kube-dns错误:来自意外来源的回复

whi*_*s11 3 kubernetes kube-dns

我对kube-dns有一个奇怪的错误.

环境:使用kops在AWS上部署的单个主服务器和几个节点的集群.Kubernetes版本1.8.4.

问题是我的pod中的DNS名称解析(集群内部或外部名称)都很脆弱.经过故障排除后我才明白,只有当pod安装在特定节点上时才会出现问题,该节点是运行kube-dns pod的其中一个副本的节点.

这些是我的kube-dns pods:

$ kubectl -n kube-system get po -l k8s-app=kube-dns -o wide
NAME                        READY     STATUS    RESTARTS   AGE       IP             NODE
kube-dns-7f56f9f8c7-2ztbn   3/3       Running   0          2d        100.96.8.239   node01
kube-dns-7f56f9f8c7-h5w29   3/3       Running   0          17d       100.96.7.114   node02
Run Code Online (Sandbox Code Playgroud)

如果我运行测试POD强制它运行node02一切似乎很好.我可以解决任何(有效的)DNS名称,完全没有问题.

如果我在node01名称解析上运行相同的测试POD 是片状的:有时它会失败(大约50%的时间),并出现以下错误

$ dig google.com
;; reply from unexpected source: 100.96.8.239#53, expected 100.64.0.10#53
Run Code Online (Sandbox Code Playgroud)

其余的时间它完美无缺:

$ dig google.com

; <<>> DiG 9.10.4-P3 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24454
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             60      IN      A       209.85.202.100
google.com.             60      IN      A       209.85.202.101
google.com.             60      IN      A       209.85.202.102
google.com.             60      IN      A       209.85.202.113
google.com.             60      IN      A       209.85.202.138
google.com.             60      IN      A       209.85.202.139

;; Query time: 2 msec
;; SERVER: 100.64.0.10#53(100.64.0.10)
;; WHEN: Mon Jan 08 10:46:42 UTC 2018
;; MSG SIZE  rcvd: 135
Run Code Online (Sandbox Code Playgroud)

/etc/resolv.conf正确指向kube-dns服务的IP地址:

$ head -n 1 /etc/resolv.conf 
nameserver 100.64.0.10

$ kubectl -n kube-system get svc kube-dns 
NAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
kube-dns   ClusterIP   100.64.0.10   <none>        53/UDP,53/TCP   33d
Run Code Online (Sandbox Code Playgroud)

显然,node01只有当服务将请求转发到自身kube-dns运行的pod实例时node01才会触发错误.

我尝试重新启动kube-proxy,node01但问题仍然存在.

我打赌重启/重新创建node01会让问题消失,但我需要确保这个问题不再发生.

有人知道发生了什么事吗?

whi*_*s11 6

在github上发现了一个与我正在使用的问题非常相似的问题,并且在那里发布的解决方案似乎有效.

基本上,我需要使用以下命令加载内核模块:

modprobe br_netfilter
Run Code Online (Sandbox Code Playgroud)

当然,YMMV