kubernetes配置网络插件flannel
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的网络模型