kubernetes無內建方案控管叢集內部及外部的網路,需使用外部方案如:weaveworks, flannel, cilium, wmwareNSX etc.
Networking Model的需求
設置方式,遵循CNI規則,統整於script當中,包裹於建立或刪除容器的時候:
--cni conf-dir=/etc/cni/net.d
--cni-bin-dir=/etc/cni/bin
--cni-bin-dir=/opt/cni/bin
./net script.sh add <container> <namespace>
1.3或更新的版本,可以在cluster使用CNI plugin,設定鑲嵌於components的configuration
Pod對service的溝通,service像是虛擬的object,有自己的ip,跨越cluster範圍,建立轉導規則
轉導規則的模式 kube proxy proxy mode [ userspace | iptablkes | ipvs ]
Service的ip rangekube-api-server --service-cluster-ip-range ipNet (Default: 10.0.0.0/24)
建立service後,由跨越cluster範圍的kubeDNS做紀錄,pod則是要另外啟用,其hostname來自ip變形
hostname | namespace | type | root | ip address |
---|---|---|---|---|
xxx-svc-name | xxx-name | svc | cluster.local | xxx.xxx.xx.xx |
xxx-xxx-xx-xx | xxx-name | pod | cluster.local | xxx.xxx.xx.xx |
統一將service的name和ip資訊存在dns server裡面,各pod只要指向該config檔案即可,1.12+版本後使用CoreDNS
為DNS server,部署後自動產生service(預設名稱為kube-dns),名為nameserver指向此service,由kubelet幫忙做好這些事情
cat /etc/coredns/Corefile
/etc/resolv.conf
設定使用kubernetes node的nameserverconfigmap
object放在kubernetes內