kubernetes 網絡通信
1、 容器間通信:同一個Pod內的多個容器間的通信,lo迴環網口
2、 Pod通信:Pod IP <-->Pod IP
3、 Pod 與Service通信:PodIP<-->ClusterIP kube-Porxy
4、 Service與集羣外部客戶端的通信:
CNI:CNI是Container Network Interface的縮寫,它是一個通用的容器網絡插件的k8s網絡接口
flannel: (在每一個集羣節點上面都得安裝flannet,kubeadm安裝情況下flanne爲Daemoset)
flannel2.0 已繼承了calico BGP
配置文件:
[root@Master ~]# cat /etc/cni/net.d/10-flannel.conflist
{
"name": "cbr0",
"cniVersion": "0.3.1",
"plugins": [
{
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
支持多種後端傳輸的方式:
VXlan 擴展的虛擬局域網,
- vxlan
- Directrouting vxlan
host-gw:Host GatWay 容易造成路由表特別大,容易廣播風暴,要求集羣節點在同一個網段
vxlan+host-gw:兩種方式結合使用,同網段使用host-gw,不同網段降級爲vxlan
vim kube-flannel.yml 添加直接路由模式
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
" Directrouting": true
}
}
UDP:性能比較差,不推薦使用,很早版本前不兼容vxlan方式時,使用UDP
flannel的配置參數:
Network:flannel使用的是CIDR格式的網絡地址,用於爲Pod配置網絡功能
默認使用#也可以使用掩碼爲8的網段。
10.244.0.0/16
master:10.244.0.0/24
node01:10.244.1.0/24
……
node255:10.244.255.0/24
SubetLen:把Network切分子網供各節點使用時,使用多長的掩碼進行切分,默認爲24位;
SubetMin:10.244.10.0/24 最小分配子網網段使用
SubetMax:10.244.100.0/24
Backend:vxlan ,host-gw , upd
calico:BGP 自動路由發現協議 默認192.168.0.0/16網段 不支持ipvs模式,只能使用iptables模式,每一臺node節點都得部署calico
ingress:進棧
egress:出棧
如果定義僅ingress,egress默認允許,ingress拒絕所有,如果想放行指定pod或者是名稱空間,可在定義network-policy ingress規則
canel
kube-router
解決方案:
虛擬網橋:純軟件的方式實現一個虛擬網絡
多路複用:MacVLAN 根據物理節點的macvlan進行通信
硬件交換:SR-IOV 一個網卡可以虛擬出多個接口