以 Kubernetes 角度來看,網路大致有四種通訊類型
- Container to Container
Pod 內的容器共享同一網路,通常由
pause基礎架構容器提供。彼此間可透過 lo 接口交互。
from 此篇文章
Pod to Pod 每個 Pod 擁有一個在集群中全域唯一的 IP 地址,可直接與其它 Pod 通訊。如上圖所示,其節點也可以透過同一網路的橋接設備(docker0)與 Pod 進行通訊。
Service to Pod Service 資源也稱 Cluster network,啟動
kube-apiserver時由--service-cluster-ip-range進行指定。當我們對 Service 資源進行變動時,會藉由 Api Server 觸發節點上的kube-proxy,並設置相對應的iptables或ipvs規則,方便實現 Cluster-IP 與 Pod-IP 之間進行轉發。
可參考此篇文章
- WAN to Pod 這須透過 nodePort、LoadBalancer 類型的 Service 資源實現。
Pod 網路
在配置時,kubelet 會在預設的 /etc/cni/net.d/ 目錄中搜尋 CNI 的 json 配置檔,並藉由 type 查找 /opt/cni/bin 下相關插件
cat 05-cilium.conf
{
"cniVersion": "0.3.1",
"name": "cilium",
"type": "cilium-cni",
"enable-debug": false
}
master in /opt/cni/bin
○ → ls
bandwidth bridge cilium-cni dhcp firewall flannel host-device host-local ipvlan loopback macvlan portmap ptp sbr static tuning vlan
CNI 僅是一個規範,其提供類型分為三類
- main
- 實作特定網路功能,
loopback、bridge、ipvlan等
- 實作特定網路功能,
- meta
- 本身不提供網路的實現,而是調用其他套件
- ipam
- 僅分配 IP 地址。不提供其他網路實現