k8s网络通讯:

(1)容器间通信:同一个Pod内的多个容器间的通信,lo
(2)Pod通信:Pod IP <–> Pod IP
(3)Pod与service通信:PodIP <–> ClusterIP
(4)Service与集群外部客户端的通信;

CNI

CNI(Container Network Interface)是CNCF 旗下的一个项目,由一组用于配置Linux 容器的网络接口的规范和库组成,同时还包含了一些插件

k8s的CNI:
flannel(网络地址分配,网络管理,但没有网络策略(定义Pod之间能不能访问))
calico(既支持网络地址分配,又支持网络策略,但安装复杂)
canel
kube-router(k8s自带)

解决方案:
1)虚拟网桥
2)多路复用 MacVLAN
3)硬件交换 SR-IOV(单根IO序列化,一个网卡可以虚拟出多个物理接口,这种性能最好

kubelet,/etc/cni/net.d/ 放在这个目录下即可使用网络插件
在这里插入图片描述

ifconfig我们会查看到flannel和cni0(只有创建了Pod之后才会出现)
在这里插入图片描述

flannel支持多种后端:

  1. VxLAN:
    1)vxlan
    2)Drectrouting
    在这里插入图片描述
  2. host-gw: Host Gateway(主机网关,不允许跨网段)
    在这里插入图片描述
    如果在同一网络会用host-gw,不在同一网络会自动选择VxLAN
  3. UDP效果最差

flannel的配置参数

Network: flannel使用的CIDR格式的网络地址,用于Pod配置网络功能;
10.244.0.0/16->master:10.244.0.0/24;node01:10.244.1.0/24…node255:10.244.255.0/24

10.0.0.0/8->master:10.0.0.0/24;node01:10.0.1.0/24…node65536:10.2255.255.0/24

SubnetLen:把Network切分子网供各节点使用时,使用多长的亚麻进行切分,默认为24位
SubnetMin:10.244.10.0//24(使用最小IP段是10)
SubnetMax:10.244.100.0//24(使用最大IP段是100)

Backend:vxlan,host-gw,udp
vxlan:vxlan,drectrouting

添加flannel的directroute为true

kubectl edit cm -n kube-system kube-flannel-cfg

"Directrouting": true

在这里插入图片描述

查看是否生效ip route show发现没有生效
在这里插入图片描述
需要重启主机才会起作用:
在这里插入图片描述
在这里插入图片描述
使用抓包工具:tcpdump

tcpdump -i en0 -nn icmp
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐