kube-dns error: reply from unexpected source
kube-dns error: reply from unexpected source
我在使用 kube-dns 时遇到一个奇怪的错误。
环境:
使用 kops 部署在 AWS 上的具有单个主节点和几个节点的集群。
Kubernetes 版本 1.8.4.
问题是我的 pods 中的 DNS 名称解析(集群内部或外部名称)存在问题。故障排除后,我了解到只有当 pods 被安排在特定节点上时才会出现问题,该节点的 kube-dns pod 副本之一是 运行ning.
这些是我的 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
如果我 运行 一个测试 POD 强制它在 node02
上 运行 一切似乎都很好。我可以毫无问题地解析任何(有效的)DNS 名称。
如果我 运行 node01
名称解析上的相同测试 POD 不稳定:有时它会失败(大约 50% 的时间)并出现以下错误
$ dig google.com
;; reply from unexpected source: 100.96.8.239#53, expected 100.64.0.10#53
其余时间运行完美:
$ 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
/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
显然,仅在 node01
上,当服务将请求转发到 node01
上 运行 本身的 kube-dns
pod 实例时,会触发错误.
我尝试在 node01
上重启 kube-proxy,但问题仍然存在。
我打赌 rebooting/recreating node01
会解决问题,但我需要确保此问题不会再次发生。
有人知道发生了什么事吗?
我发现那里发布的 issue on github that looks very similar to this one I am having, and the solution 似乎有效。
基本上,我需要使用以下命令加载内核模块:
modprobe br_netfilter
当然,YMMV
对于 centos,下面的解决方案对我有用
https://github.com/kubernetes/kubernetes/issues/21613#issuecomment-363859075
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
我在使用 kube-dns 时遇到一个奇怪的错误。
环境: 使用 kops 部署在 AWS 上的具有单个主节点和几个节点的集群。 Kubernetes 版本 1.8.4.
问题是我的 pods 中的 DNS 名称解析(集群内部或外部名称)存在问题。故障排除后,我了解到只有当 pods 被安排在特定节点上时才会出现问题,该节点的 kube-dns pod 副本之一是 运行ning.
这些是我的 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
如果我 运行 一个测试 POD 强制它在 node02
上 运行 一切似乎都很好。我可以毫无问题地解析任何(有效的)DNS 名称。
如果我 运行 node01
名称解析上的相同测试 POD 不稳定:有时它会失败(大约 50% 的时间)并出现以下错误
$ dig google.com
;; reply from unexpected source: 100.96.8.239#53, expected 100.64.0.10#53
其余时间运行完美:
$ 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
/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
显然,仅在 node01
上,当服务将请求转发到 node01
上 运行 本身的 kube-dns
pod 实例时,会触发错误.
我尝试在 node01
上重启 kube-proxy,但问题仍然存在。
我打赌 rebooting/recreating node01
会解决问题,但我需要确保此问题不会再次发生。
有人知道发生了什么事吗?
我发现那里发布的 issue on github that looks very similar to this one I am having, and the solution 似乎有效。
基本上,我需要使用以下命令加载内核模块:
modprobe br_netfilter
当然,YMMV
对于 centos,下面的解决方案对我有用
https://github.com/kubernetes/kubernetes/issues/21613#issuecomment-363859075
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables