[英]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.