kubernetes - 间歇性 Pod 通信问题

标签 kubernetes azure-aks

我有一个 Azure Kubernetes 集群,其中所有 Pod 和服务都处于运行状态。我遇到的问题是,当我从 pod1 到 pod2 的服务 url 进行 curl 时,它会间歇性失败,并出现“无法解析主机”错误。

为了说明这一点,我有 3 个 pod - pod1、pod2、pod3 当我使用

进入 pod1 时

kubectl exec -it pod1

我使用 pod2 的服务 url 运行curl:

curl http://api-batchprocessing:3000/result

该命令大约每 6/10 次成功,其余 4/10 次失败,并出现错误“curl: (6) 无法解析主机:api-batchprocessing”。

当我尝试使用curl调用在pod3上运行的另一个服务时,我遇到了同样的问题。

我尝试过以下方法但没有成功: - 删除 kube 系统中的 coredns pod - 删除并重新创建 azure kubernetes 集群。 上面似乎暂时解决了这个问题,但在几次尝试中我遇到了同样的间歇性“无法解析主机:”问题。

有关此问题的任何帮助/指示将不胜感激。

最佳答案

问题可能出在 DNS配置。 看起来 coredns 使用 DNS 服务器列表的方式与 kube-dns 不同。 如果您必须解析公共(public)和私有(private)主机名,请始终检查列表中是否只有私有(private) DNS 服务器,或者找到正确的配置来针对您的私有(private)场所路由私有(private) DNS 查询。

查找并解决问题的可能步骤:

  1. 打开 coredns 日志。

你唯一需要的是这个YAML文件:

apiVersion: v1
data:
  log.override: |
    log
kind: ConfigMap
metadata:
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
  name: coredns-custom
  namespace: kube-system
  • 使用 kubectl log 或 VSCode Kubernetes 扩展打开/查看您的 coredns 日志。

  • 附加到我们的环境 Pod 之一并执行一些 DNS 解析操作,包括 nslookup 和 curl。 一些循环查询对 DNS 和网络组件施加压力的执行:

  • 查看 coredns 日志。

  • 您之前会看到,curl 正在尝试通过尝试 A 和 AAAA 条目来解析我们 pod 中定义的所有搜索域的 DNS。换句话说,为了解析“api-batchprocessing”,curl 正在对 coredns 进行 DNS 查询。然而,coredns 正确响应“NXDOMAIN”(不存在)或“NOERROR”(找到记录)。所以问题出在其他地方。

  • 在 VNET 级别配置 DNS 服务器
  • 对此随机 DNS 解析错误的可能解释是,在高负载情况下,coredns 正在 VNET 级别定义的所有 DNS 服务器上使用。 一些查询可能会发送到本地服务器。其他人,到谷歌。 Google 不知道如何解析您的私有(private)主机名。

  • 从 VNET 中删除 Google DNS 服务器,重新启动集群并运行检查。
  • 在这里您可以找到更多信息:random-dns-error .

    希望对您有所帮助。

    关于kubernetes - 间歇性 Pod 通信问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59130676/

    相关文章:

    kubernetes - 不使用 kubectl cp 将文件复制到 kubernetes pod 中

    azure - AKS 群集创建额外的路由表、额外的 NSG 并且不使用现有的自定义路由表和 NSG

    kubernetes - 为什么 AKS 创建的 Azure 负载均衡器设置为将流量定向到节点上的端口 80 和 443,而不是服务打开的节点端口?

    azure - 有没有办法在 Azure Kubernetes 服务中运行现有的 ASP.NET Web API?

    azure - 如何使用 LoadBalancer 服务从 Azure Kubernetes 内部获取客户端 IP 地址

    kubernetes - 谷歌云 : insufficient authentication scopes

    reactjs - 无法使用Kubernetes连接到React js应用的api服务器?

    kubernetes - 如何利用 kubectl 补丁部署来更新环境变量?

    Azure 应用程序网关后端设置以某种方式被覆盖。我之前从30改成900,现在又回到30了

    azure - 使用 AKS 时如何修复 "Kibana server is not ready yet"错误