我有一个Azure Kubernetes群集,所有pod和服务都处于运行状态。我遇到的问题是,当我从pod1到pod2的服务URL进行卷曲时,它间歇性地失败,无法解决主机错误。
为了说明,我有3个吊舱-pod1,pod2,pod3 当我使用
进入pod1时kubectl exec -it pod1
然后我使用pod2的服务网址运行curl:
该命令每6/10次成功执行一次,其余4/10则失败,并显示错误“ curl: (6) Could not resolve host:api-batchprocessing
”。
当我尝试使用curl调用在pod3上运行的另一个服务时,我遇到了同样的问题。
我尝试了以下方法,但均未成功: -删除kube系统中的coredns pod -删除并重新创建Azure Kubernetes集群。 上面的方法似乎可以暂时解决此问题,但是在几次尝试中,我都会遇到相同的间歇性“无法解决主机:”问题。
在此问题上的任何帮助/指针将不胜感激。
答案 0 :(得分:1)
问题可能存在于DNS配置中。 看起来coredns以与kube-dns不同的方式使用DNS服务器列表。 如果必须同时解析公共和私有主机名,请始终仅检查列表中的私有DNS服务器,或者找到正确的配置以在私有场所中路由私有DNS查询。
找到并消除问题的可能步骤:
您唯一需要的就是这个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日志或VSCode Kubernetes扩展来打开/查看您的coredns日志。
附加到我们的环境Pod之一,并执行一些DNS解析操作,包括nslookup和curl。 循环查询对DNS和网络组件施加压力的一些执行方式:
查看coredns日志。
您之前会看到,curl尝试通过尝试对Pod中定义的所有搜索域的A和AAAA条目来解析DNS。换句话说,为解决“ api-batchprocessing”问题,curl使DNS查询再次成为coredns。但是,coredns用“ NXDOMAIN”(不存在)或“ NOERROR”(找到记录)正确响应。所以问题出在其他地方。
此随机DNS解析错误的可能解释是,在高负载情况下,coredns在VNET级别定义的所有DNS服务器上使用。 一些查询可能会转到本地服务器。其他人,到Google。 Google不知道如何解析您的私人主机名。
在这里您可以找到更多信息:random-dns-error。
希望对您有帮助。