本文共 1457 字,大约阅读时间需要 4 分钟。
k8s网络
1.容器网络 pod每个POD分配单独的Ip地址,IP-pre-Pod模型(IP以Pod为单位进行分配的,一个Pod一个IP的设计模型)每个容器也可以称为pod,pod中有个pause容器,pause可以接入网络,并且共享网络给pod中其他容器,每个POD分配单独的Ip地址,在pod中每个容器共享自己的IP对于k8s来说,我们搭建的网络,每一个node有自己的子网,所有的子网形成一个大的子网,实现网络互连流向来说,通过pod暴露出的port流向外部的bridge或者说host上,通过host上的iptables或者其他方式路由到其他节点使用container network interface 标准,由cncf基金会推出,主要是统一整个容器网络API,k8s主要是使用CNI插件来组件自己的容器网络,当POD创建销毁时,k8s agent会调用CNI插件接口生成网络配置,创建container(POD)可以生成IP地址,把container接入bridge,去生成container到其他节点的路由,删除container时,会把IP地址回收,处理network namespace回收CNI也会在container里面生成虚拟网卡(NIC 全称:Network Interface Card),把它和container(POD)的namespace关联,从而container可以使用由CNI提供的IPCNI创建网络1:
Kubelet runtime 也就是kubelet收到创建pod请求以后,会先生成pause的container,为pause的container创建一个network namespace,把它(network namespace)关联到pause container上面CNI创建网络2:触发CNI插件,触发插件时,把CNI的configuration load给这个CNI的插件,并且传递给其他环境变量,现在做的action是什么,已经创建的network namespace是什么,interface是什么CNI创建网络3:
收到参数后开始创建网络,使用bridge plugin CNI例子来讲,1.先创建单独的bridge出来,然后去创建虚拟以特网接口veth pair,把它和network namespace 连接起来,2.同时它(CNI)会调用ipam(IP地址的分配),获取空闲IP分配给container,3.CNI会切换到container的network namespace里,把ip地址设置在 container的network interface上Network agent不仅需要CNI的plugin还需要daemon,不同的厂家都会实现不同的network agent,它去保证从这个IP会方便的路由到不同节点
calico:基于容器的网络,也可以openstack 用linux的内核转发机制,使用3层路由协议,实现container的互连
k8s上,calico会创建agent,calico cni插件,通过BGP协议路由表fannel:使用overloay,container连上flannel 0这个上,不同的flannel angent 通过UDP互连,有性能影响,在原来的ip包上封装
NSX-t:使用2层转发,使用openVswitch做2层转发,需要运行openVswitch的服务
转载地址:http://rzszx.baihongyu.com/