簡體   English   中英

無法從 k8s pod 內部解析 home dns

[英]Can't resolve home dns from inside k8s pod

所以我最近在我的家庭網絡上設置了一個單節點 kubernetes 集群。 我有一個在我的路由器(DD-WRT、dnsmaq)上運行的 dns 服務器,它解析了一堆本地域以便於使用。 server1.lan ,例如解析為192.168.1.11

服務器 1 被設置為我的單節點 kubernetes 集群。 對本地 DNS 的可能性感到興奮,我使用名為 netshoot 的 docker 容器啟動了我的第一個部署,該容器捆綁了一堆有用的網絡調試工具。我執行到容器中,然后運行 ping 並得到以下信息...

bash-5.0# ping server1.lan
ping: server1.lan: Try again

它失敗了,然后我嘗試 ping google 的 DNS (8.8.8.8),效果很好。

我試圖解決 kubernetes 默認域,它工作正常

bash-5.0# nslookup kubernetes.default
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

/etc/resolve.conf文件從 pod 內部看起來很好

bash-5.0# cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

然后我開始跟蹤 coredns 日志,我開始看到一些有趣的 output ......

2019-11-13T03:01:23.014Z [ERROR] plugin/errors: 2 server1.lan. AAAA: read udp 192.168.156.140:37521->192.168.1.1:53: i/o timeout
2019-11-13T03:01:24.515Z [ERROR] plugin/errors: 2 server1.lan. A: read udp 192.168.156.140:41964->192.168.1.1:53: i/o timeout
2019-11-13T03:01:24.515Z [ERROR] plugin/errors: 2 server1.lan. AAAA: read udp 192.168.156.140:33455->192.168.1.1:53: i/o timeout
2019-11-13T03:01:25.015Z [ERROR] plugin/errors: 2 server1.lan. AAAA: read udp 192.168.156.140:48864->192.168.1.1:53: i/o timeout
2019-11-13T03:01:25.015Z [ERROR] plugin/errors: 2 server1.lan. A: read udp 192.168.156.140:35328->192.168.1.1:53: i/o timeout

似乎 kubernetes 正在嘗試從集群網絡內部與192.168.1.1通信並且失敗。 我猜 CoreDNS 使用主機上的resolv.conf中的任何內容,所以這就是它的樣子。

nameserver 192.168.1.1

除了這些 pod 之外,我可以從網絡上的其他任何地方解析 server1.lan。 我的路由器 IP 是 192.168.1.1,這就是對 DNS 查詢的響應。

對此的任何幫助將不勝感激,在 kubernetes 網絡和我的真實家庭網絡之間似乎存在某種 IP 路由問題,或者這就是我的理論。 提前致謝。

所以事實證明,當我啟動集群時,我指定了一個與家庭網絡上的 IP 沖突的 pod CIDR。 我的 kubeadm 命令是這樣的

sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-cert-extra-sans=server1.lan

由於我的家庭網絡與該 CIDR 沖突,並且由於我的 dns 上游是 192.168.1.1,它認為這是在 pod 網絡上而不是在我的家庭網絡上,並且未能正確路由 DNS 解析數據包。

解決方案是使用以下命令重新創建我的集群,

sudo kubeadm init --pod-network-cidr=10.200.0.0/16 --apiserver-cert-extra-sans=server1.lan

當我應用我的 calico yaml 文件時,我確保將默認的192.168.0.0/16 CIDR 替換為新的10.200.0.0/16 CIDR。

希望這可以幫助某人。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM