K8s 組件 APIServer 、etcd 等對應的 Pod IP 地址 (監聽的 IP 地址) 問題


APIServer ,etcd,kube-controller-manager,kube-scheduler,kube-proxy 等 K8s 組件的 Pod IP 地址(也就是它們監聽的地址)默認都是他們所在 Node 的 IP 地址。

這些一般在搭建K8s集群的時候指定( 也可以在它們的 yaml 文件中的某個參數中修改) ,APIServer ,etcd,kube-controller-manager,kube-scheduler 等是以 static pod 的形式部署在 master 節點的,所以它們對應的 yaml 文件默認位於 master 節點的 /etc/kubernetes/manifests/ 目錄下。

而 kube-proxy 的配置需要在 kube-system 命名空間下的名為 kube-proxy 的configmap中修改。(kubectl edit configmap kube-proxy -n kube-system)

 

以 APIServer 舉例:

APIServer 監聽的 IP 是由參數 --advertise-address 指定,這個參數是用來指定APIServer 和其他組件之間通訊的地址或者它的監聽地址(也是 APIServer pod 的 IP 地址)。如果不指定,它默認的判定方法會選取機器默認的網卡ip地址。

雲端的master節點一般同時具有公網IP 和內網IP,默認是內網IP, 因此 apiserver pod 的 IP 默認是雲端 master 節點的內網 IP,因此邊緣節點想要訪問雲端master節點中的apiserver,必須通過 APIServer 的公網地址(即雲端節點公網IP的6443端口)來訪問,不能通過 kubernetes這個service(default命名空間下名為kubernetes的service,這個服務的端口是443,其背后的endpoint為apiserver的pod ip:6443)來訪問,因為這個service后端的endpoint是雲端master節點的內網IP:6443,而邊緣節點與雲端節點不在一個局域網中(目的地址為私有地址的數據包會被路由器直接丟棄,不會進行轉發)。

 

參考文章:

kubernetes中apiserver的地址指定問題 :: 觸寶運維團隊文檔 (haojianxun.github.io)

二進制安裝k8s超詳細版本-V1.20-阿里雲開發者社區 (aliyun.com)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM