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 扩展的虚拟局域网,

  1. vxlan
  2. 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 一个网卡可以虚拟出多个接口