K8S CNI操作指引

K8S CNI操作指引

简介

CNI是K8S的网络插件实现规范,与docker的CNM并不兼容,在K8S和docker的博弈过程中, K8S把docker作为默认的runtime并没有换来docker对K8S的支持。K8S决定支持CNI规范。 许多网络厂商的产品都提供同时都支持CNM和CNI的产品。

在容器网络环境,经常看到docker看不到K8S POD的IP网络配置, DOCKER容器有时候和POD无法通信。

CNI相对CNM是一个轻量级的规范。网络配置是基于JSON格式, 网络插件支持创建和删除指令。POD启动的时候发送创建指令。

POD运行时首先为分配一个网络命名空间,并把该网络命名空间制定给容器ID, 然后把CNI配置文件传送给CNI网络驱动。网络驱动连接容器到自己的网络, 并把分配的IP地址通过JSON文件报告给POD运行时POD终止的时候发送删除指令。

当前CNI指令负责处理IPAM, L2和L3, POD运行时处理端口映射(L4)

K8S网络基础

K8S网络基础

CNI插件

CNI实现方式

CNI有很多实现,在这里之列举熟悉的几个实现。并提供详细的说明文档。

  • Flannel

  • Kube-router

    Kube-router

  • OpenVSwitch

  • Calico

    Calico可以以非封装或非覆盖方式部署以支持高性能,高扩展扩展性数据中心网络需求

    CNI-Calico

  • Weave Net

  • 网桥

    CNI 网桥

Related