kuberbetes網絡通信:
- 容器間通信: 同一個pod內的多個容器通信 --- lo
- Pod間通信: Pod IP ---> Pod IP
- Pod與Service通信: Pod IP ---> ClusterIP
- Service與集群外部客戶端通信:
常用CNI(container network 插件):
- flannel ---不支持網絡策略
- calico ---支持地址分配和網絡策略
- canel --- flannel+calico
- kube-router...
解決方案:
- 虛擬網橋
- 多路復用: Mac-VLAN
- 硬件交換:SR-IOV
網絡配置文件: /etc/cni/net.d/
Flannel支持多種后端:
- VxLAN: 在node上起一個flannel.0或者flannel.1的隧道端口,通過隧道傳輸實現不同node間pod的通信。 會封裝以下守護: 以太網+ip+udp+vxlan,開銷比較大
- vxlan 疊加網絡或者隧道網絡,通過封裝網絡報文的方式使不同網段的pod之間可以通訊,默認情況下flannel使用VxLAN模式
- Directrouting 直接使用主機的IP地作為網關,通過主機路由的方式與目標pod進行通訊,當目標pod與當前pod不在同一三層網絡內,會自動降級為VxLAN模式
- Host-gw: Host Gateway --- Pod把數據報文發給虛擬網口,查本地路由表,不是本地的ip,則由本機的物理網卡傳給對端的物理網卡,對端再解析到自己的內部網絡。 僅使用本地路由,開銷較小;與VxLAN的Directrouting模式相同,當目標pod與當前pod不在同一三層網絡內時,pod之間無法通訊
- UDP: 最早期的通信模式,性能非常差
Flannel的配置參數:
獲取flannel配置信息: kubectl get configmap/kube-flannel-cfg -n kube-system -o yaml
Network: flannel使用的CIRD格式的網絡地址,用於為pod配置網絡功能:
10.244.0.0./16 ->
master: 10.244.0.0/24
node1: 10.244.1.0/24
node2: 10.244.2.0/24
....
node255: 10.244.255.0/24
SubnetLen: 把Network切分子網供各節點使用時,使用多長的掩碼進行切分,默認為24位
SubnetMin:地址段中子網起始值
SubnetMax:地址段中子網結束值
Backend:vxlan/host gw/udp
♦ brctl show xxx 可以查看xxx網口綁定情況
♦ tcpdump -i xxx -nn 對xxx網口抓包
♦ ip route show 可以顯示當前路由信息
♦ kubectl edit configmap/kube-flannel-cfg -n kube-system 直接編輯flanel配置文件來修改網絡模式不會生效, 需要在安裝flanne初始化的時候就編輯好配置文件,修改flannel插件配置文件的“net-conf.json”下backend的網絡模型