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
配置文件:
[ ~]# 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 一个网卡可以虚拟出多个接口