间歇性Pod通信问题

时间:2019-12-01 22:43:52

标签: kubernetes azure-kubernetes

我有一个Azure Kubernetes群集,所有pod和服务都处于运行状态。我遇到的问题是,当我从pod1到pod2的服务URL进行卷曲时,它间歇性地失败,无法解决主机错误。

为了说明,我有3个吊舱-pod1,pod2,pod3 当我使用

进入pod1时
  

kubectl exec -it pod1

然后我使用pod2的服务网址运行curl:

  

卷曲http://api-batchprocessing:3000/result

该命令每6/10次成功执行一次,其余4/10则失败,并显示错误“ curl: (6) Could not resolve host:api-batchprocessing”。

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

我尝试了以下方法,但均未成功: -删除kube系统中的coredns pod -删除并重新创建Azure Kubernetes集群。 上面的方法似乎可以暂时解决此问题,但是在几次尝试中,我都会遇到相同的间歇性“无法解决主机:”问题。

在此问题上的任何帮助/指针将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题可能存在于DNS配置中。 看起来coredns以与kube-dns不同的方式使用DNS服务器列表。 如果必须同时解析公共和私有主机名,请始终仅检查列表中的私有DNS服务器,或者找到正确的配置以在私有场所中路由私有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
  1. 使用kubectl日志或VSCode Kubernetes扩展来打开/查看您的coredns日志。

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

  3. 查看coredns日志。

您之前会看到,curl尝试通过尝试对Pod中定义的所有搜索域的A和AAAA条目来解析DNS。换句话说,为解决“ api-batchprocessing”问题,curl使DNS查询再次成为coredns。但是,coredns用“ NXDOMAIN”(不存在)或“ NOERROR”(找到记录)正确响应。所以问题出在其他地方。

  1. 在VNET级别配置DNS服务器

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

  1. 从VNET中删除Google DNS服务器,重新启动群集并运行检查。

在这里您可以找到更多信息:random-dns-error

希望对您有帮助。