kubeadm相關
主機有雙網路卡,預設網路卡為外網網路卡,叢集內通訊使用內網網路卡
嘗試從 apiServer 引數--advertise-address
和 kubelet 引數--node-ip
入手。
一個出錯的典型場景:
比如在物理機上通過 vagrant 建立虛擬機器部署 k8s 叢集,虛擬機器預設可能會配置一張 NAT 網路卡作為預設網路卡且這個 ip 可能是一樣的,那可能多個虛擬機器的的預設網路卡的 ip 都是一樣的。
kube-dns 的 service ip 更改導致叢集內服務發現功能不可用
kube-dns 是 k8s 的一個叢集內 dns 外掛,解決叢集內服務發現的問題。在沒有任何 dns 解決方案的情況下,pod 也可以通過 service name 訪問到 service,但前提是 service 建立在 pod 之前。其原因是, apiserver 在建立 pod 的時候會將現在的叢集內的 service 資訊注入到容器中的環境變數。
假如叢集內的 pod network CIDR 是 10.96.0.0/16
,那 kube-dns 預設的 service ip 將會是 10.96.0.10
,這個 ip 將會成為容器的 nameserver。加入因為 pod 網路 CIDR 發生變化,有可能 kube-dns 的 service ip 改變了,但容器中的 nameserver ip 沒有及時同步。
關於叢集內 DNS 的問題可以參考官網提供的經典問題分析。