kubernetes 網路溝通基礎

December 12, 2021

以 Kubernetes 角度來看,網路大致有四種通訊類型

  1. Container to Container Pod 內的容器共享同一網路,通常由 pause 基礎架構容器提供。彼此間可透過 lo 接口交互。

from 此篇文章

  1. Pod to Pod 每個 Pod 擁有一個在集群中全域唯一的 IP 地址,可直接與其它 Pod 通訊。如上圖所示,其節點也可以透過同一網路的橋接設備(docker0)與 Pod 進行通訊。

  2. Service to Pod Service 資源也稱 Cluster network,啟動 kube-apiserver 時由 --service-cluster-ip-range 進行指定。當我們對 Service 資源進行變動時,會藉由 Api Server 觸發節點上的 kube-proxy,並設置相對應的 iptablesipvs 規則,方便實現 Cluster-IP 與 Pod-IP 之間進行轉發。

可參考此篇文章

  1. 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 僅是一個規範,其提供類型分為三類