Kubernetes之网络模型与网络策略

1.  K8s网络模型

    k8s的网络模型主要用于解决四类通信需求

      1.  同一pod内容器之间的通信

          pod内的各个容器共享同一网络名称空间,该名称空间由构建Pod对象的基础架构容器所提供。

          同一pod内的容器,彼此之间通过lo接口完成交互          

        

          Container1和Container2在同一个pod内,它们之间通信使用lo接口

      2.  pod之间通信

          各pod对象需要运行于同一个平面网络中,每个pod对象拥有一个集群全局唯一的地址并可直接用于与其他pod进行通信          

          

      3.  Service与Pod之间的通信

          每个service对象在集群中拥有一个ClusterIP的固定地址          

      4.  集群外部到Pod对象之间的通信

2.  k8s网络插件CNI

    k8s网络遇到的问题:

      1.  各docker主机在docker0网桥上默认使用同一个子网,不同节点的容器很可能会得到相同的地址,于是跨节点的容器间通信会面临地址冲突的问题

      2.  即使人为设定多个节点上的docker0网桥使用不同的子网,其报文也会因为在网络中缺乏路由信息而无法准备到达

    1.  flannel网络插件

      1.  解决上面的两个问题

          1.  预留使用一个网络,而后自动为每个节点的Docker容器引擎分配一个子网,并将其分配信息保存于etcd持久存储。

          2.  flannel使用的后端

              1.  VxLAN               

                   

                  

                  工作原理:

                    将虚拟网络的数据帧添加到VxLAN首部后,封装在物理网络的UDP报文中,然后以传统网络的通信方式传送该UDP报文,待其到达目的主机后,去掉物理网络报文的头部信息以及VxLAN首部,然后将报文交付给目的终端。                     

                    

                  VxLAN的DirectRouting模式

                    通过添加必要的路由信息使用节点的二层网络直接发送Pod的通信报文,仅在跨IP网络时,才启用传统的隧道方式转发通信流量。                    

                    

                    在各个节点上查看生成的路由信息,ip route show 

10.244.0.0/24 via 10.244.0.0 dev flannel.1 onlink 
10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink 
10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink 
10.244.3.0/24 via 10.244.3.0 dev flannel.1 onlink 
10.244.4.0/24 via 10.244.4.0 dev flannel.1 onlink 
10.244.5.0/24 via 10.244.5.0 dev flannel.1 onlink 
10.244.6.0/24 dev cni0 proto kernel scope link src 10.244.6.1 
172.16.1.0/24 dev ens160 proto kernel scope link src 172.16.1.21 metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1                    

                  在各个集群节点上执行iptables -nL可以看到,iptables filter表的FORWARD链上生成量两条转发规则,放行了10.244.0.0/16网络进出的所有报文。              

              2.  host-gw

                  通过在节点上创建到达目标容器地址的路由直接完成报文转发,这种方式要求各节点本身必须在同一个二层网络中,不适用于较大的网络规模                 

                         

              3.  UDP

                  使用普通UDP报文封装完成隧道转发

      2.  flannel的配置参数

          默认情况下,flannel的配置信息保存于etcd的键名/coreos.com/network/config之下。config的值是一个JSON格式的字典数据结构。

          Network  flannel全局网络地址

          SubnetLen  切割子网的掩码,默认24

          SubnetMin  起始子网

          SubnetMax  最大的一个子网

          Backend  在指定后端类型          

                                  

    2.  calico网络插件  

3.  k8s网络策略    

              

 

      

posted @ 2023-06-30 11:02  奋斗史  阅读(28)  评论(0)    收藏  举报