K8s (4) CNI和网络

Container Network interface (CNI)github repo是CNCF定义的container网络接口标准。它定义有关container之间的互联,container删除后资源的释放等。

K8s也采用了CNI标准,可以驱动符合CNI标准的插件。插件有个参考实现github repo

CNI spec link

网络被定义为一组addressable的entities。可以是container,machine,和其他网络设备比如router。

Note: 容器runtime是一个比较宽的说法,docker自称为容器platform

容器runtime去创造网络namespace
定义容器属于哪个网络,执行哪个plugin。

容器runtime顺序执行如下(sequential):运行plugin把container加入一个网络
当container生命结束时,容器runtime,反向执行前面的顺序,把container从网络中disconnect(断连接)。

执行步骤对单个容器是顺序的,不能并行。但多个container之间可以并行。

ADD和DEL操作必须in order。ADD最终必须跟着一个DEL(注:是指资源回收吗?)。DEL后面跟DEL是允许的,多次DEL操作是等价的,idempotent(达成同一状态,好像中文叫幂等)

ADD是把容器加入/插入网络,DEL是把容器从网络删除/拔除。(插入INFNAME,比如cni0)

容器有一个ID,containerID,plugin记录为<network name, CNI_CONTAINERID, CNI_IFNAME>

容器Runtime对同一个上述记录不能call ADD两次(如果没有DEL在中间)。可以加两个不同的IFNAME。

容器网络namespace

container network namespace ---------veth-------------- host (bridge)

  1. ADD IF
  2. assign IP with IPAM (IP address management)
  3. setup routes

<intf list, IP list, DNS info> ADD(containerID, networkNamespacePath=/proc/pid/ns/net, networkConfigurationFile, extraArgs, nameOfIntfInsideContainer=“emexa”)

DEL(containerID, networkNamespacePath=/proc/pid/ns/net, networkConfigurationFile, extraArgs, nameOfIntfInsideContainer=“emexa”)
// 参数和ADD相同

Under /opt/cni/bin
CNI插件是一个Binary (e.g, flannel), 网络组件是另外的(bridge, ipvlan, loopback, macvlan, ptp, vlan, etc),IPAM是另外的Binary (dhcp)。插件会调用IPAM的binary。

cni0网桥,代替了docker0网桥

POD1 (10.244.0.5) -> POD2 (10.244.1.6)
| ^
v |
flannel.1 ---- tunnel overlay ----> flannel.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值