因此,它一直在起作用。我在GKE中运行了一些简单的服务,它们通过标准service.namespace DNS名称相互引用。
今天,所有DNS名称解析均停止工作。我没有做任何更改,尽管这可能是由主升级触发的。
/ambassador # nslookup ambassador-monitor.default
nslookup: can't resolve '(null)': Name does not resolve
nslookup: can't resolve 'ambassador-monitor.default': Try again
/ambassador # cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local c.snowcloud-01.internal google.internal
nameserver 10.207.0.10
options ndots:5
主版本1.14.7-gke.14
我可以使用他们的IP地址来谈论跨服务,只是DNS无法正常工作。
不太确定要怎么做...
答案 0 :(得分:1)
验证Kube DNS是否存在问题的最简单方法是查看日志StackDriver [https://cloud.google.com/logging/docs/view/overview]。
您应该能够使用以下过滤器在Pod的日志中找到DNS解析失败:
resource.type =“ container”
(“ UnknownHost”或“查找失败”或“ gaierror”)
确保检查每个容器的日志。因为容器的确切名称和数量可以随GKE版本而变化,所以可以这样找到它们:
kubectl get pod -n kube-system -l k8s-app = kube-dns -o \
jsonpath ='{range .items [*]。spec.containers [*]} {。name} {“ \ n”} {end}'| |排序-u kubectl获取容器-n kube-system -l k8s-app = kube-dns
吊舱是否经常重启?在节点控制台中查找OOM。每个pod的节点可以这样找到:
kubectl get pod -n kube-system -l k8s-app = kube-dns -o \
jsonpath ='{range .items [*]} {。spec.nodeName} pod = {。metadata.name} {“ \ n”} {end}'
kube-dns
窗格包含四个容器:
kube-dns
进程监视Kubernetes主服务器的服务和端点更改,并维护内存中查找结构以服务DNS请求,dnsmasq
添加了DNS缓存以提高性能,sidecar
在执行双重健康检查时(针对dnsmasq
和kubedns
)提供单个健康检查端点。它还收集dnsmasq指标,并以Prometheus格式公开它们,prometheus-to-sd
刮除sidecar
公开的指标并将其发送到Stackdriver。默认情况下,dnsmasq
容器接受150个并发请求。超出此范围的请求将被简单丢弃,并导致DNS解析失败,包括metadata
的解析。要对此进行检查,请使用以下过滤器查看日志:
resource.type =“ container”
resource.labels.cluster_name =“
resource.labels.namespace_id =“ kube-system”
logName =“ projects /
”已达到并发DNS查询的最大数量“
如果禁用了群集的旧式堆栈驱动程序日志记录,请使用以下过滤器:
resource.type =“ k8s_container”
resource.labels.cluster_name =“ <集群名称>”
resource.labels.namespace_name =“ kube-system”
resource.labels。 container_name =“ dnsmasq”
“已达到并发DNS查询的最大数量”
如果禁用了Stackdriver日志记录,请执行以下操作:
kubectl日志--tail = 1000 --namespace = kube-system -l k8s-app = kube-dns -c dnsmasq | grep'达到并发DNS查询的最大数量'
此外,您可以尝试从每个节点使用命令[dig ambassador-monitor.default @ 10.207.0.10]来验证这是否仅影响一个节点。如果是这样,您可以简单地重新创建受影响的节点。
答案 1 :(得分:0)
首先调试您的kubernetes服务[1]。这将告诉您是k8s资源问题还是kubernetes本身出现故障。了解这一点后,您可以继续进行修复。如果您想跟进,可以在这里发布结果。
[1] https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/
答案 2 :(得分:0)
看来我碰到了一个导致gke-元数据服务器启动崩溃池的错误(这反过来又使kube-dns无法工作)。
使用先前的版本(1.14.7-gke.10)创建一个新池并将其迁移到该池中,可以解决所有问题。
我被告知已经提交了修复程序。
谢谢您的建议。