【问题标题】:kube-dns error: reply from unexpected sourcekube-dns 错误:来自意外来源的回复
【发布时间】:2018-01-08 10:55:12
【问题描述】:

我在使用 kube-dns 时遇到了一个奇怪的错误。

环境: 使用 kops 在 AWS 上部署一个主节点和几个节点的集群。 Kubernetes 版本 1.8.4。

问题是我的 pod 中的 DNS 名称解析(集群内部或外部名称)存在缺陷。经过故障排除后,我了解到只有在特定节点上安排 pod 时才会出现问题,该节点是 kube-dns pod 的副本之一正在运行的节点。

这些是我的 kube-dns pod:

$ 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,但问题仍然存在。

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

有人知道发生了什么吗?

【问题讨论】:

    标签: kubernetes kube-dns


    【解决方案1】:

    我发现了一个与我所拥有的非常相似的issue on github,并且在那里发布的solution 似乎有效。

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

    modprobe br_netfilter
    

    当然,YMMV

    【讨论】:

      【解决方案2】:

      对于以下解决方案的 centos 对我有用

      https://github.com/kubernetes/kubernetes/issues/21613#issuecomment-363859075

      echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
      

      【讨论】:

        猜你喜欢
        • 2017-05-25
        • 2015-11-01
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 2017-12-30
        • 1970-01-01
        • 2021-05-07
        • 2012-07-27
        相关资源
        最近更新 更多