解析 | K8S之网络插件CNI

简介: CNI(Container Network Interface)容器网络接口, 是Linux容器网络配置的一组标准和库, 用户需要根据这些标准和库来开发自己的容器网络插件。 在github里已经提供了一些常用的插件,CNI只专注解决容器网络连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不同的网络模式,并且容易实现。

CNI(Container Network Interface)容器网络接口,  

是Linux容器网络配置的一组标准和库,

用户需要根据这些标准和库来开发自己的容器网络插件

在github里已经提供了一些常用的插件,CNI只专注解决容器网络连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不同的网络模式,并且容易实现。

相对于k8s exec直接执行可执行程序,cni 插件是对执行程序的封装,规定了可执行程序的框架,当然最后还是和exec 插件一样,执行可执行程序。只不过exec 插件通过命令行数据读取参数,cni插件通过环境变量以及配置文件读入参数。

相对于exec 的4个 subcommand,cni 只有2 subcommand,执行CNI插件需要传入以下环境变量:

CNI_COMMAND=ADD/DEL

CNI_CONTAINERID=xxxxxxxxxxxxxxxxxxx

CNI_NETNS=/proc/4390/ns/net

CNI_ARGS=IgnoreUnknown=1;K8S_POD_NAMESPACE=default;K8S_POD_NAME=22-my-nginx-2523304718-7stgs;K8S_POD_INFRA_CONTAINER_ID=xxxxxxxxxxxxxxxx

CNI_IFNAME=eth0

CNI_PATH=/opt/cni/bin.

最终的执行是./plugin netconfpath 其中plugin是二进制可执行cni插件,netconf 是配置文件路径,一般配置文件文件夹在 /etc/cni/net.d/。

cni插件的开发可以模仿github上面的例子,主要实现两个函数:

funccmdAdd(args *skel.CmdArgs) funccmdDel(args *skel.CmdArgs)

下面bridge配置文件例子:

 {

    “cniVersion”: “0.2.0”,

    “name”: “mynet”,

    “type”: “bridge”,   //使用的cni插件类型,cni根据这个调用相应二进制文件

    “bridge”: “cni0”,

    “isGateway”: true,    //其他配置信息比如IP地址等

    “ipMasq”: true,

    “ipam”: {

        “type”:”host-local”,

        “subnet”:”10.22.0.0/16″,

        “routes”: [

            { “dst”:”0.0.0.0/0″ }

        ]

    }

}

下面calico配置文件例子:

{

    “name”:”k8s-pod-network”,

    “type”: “calico”,

    “etcd_endpoints”:”http://10.255.13.121:2379″,

    “etcd_key_file”: “”,

    “etcd_cert_file”: “”,

    “etcd_ca_cert_file”:””,

    “log_level”: “info”,

    “ipam”: {

        “type”:”calico-ipam”

    },

    “policy”: {

        “type”: “k8s”,

        “k8s_api_root”:”https://10.255.0.1:443″,

        “k8s_auth_token”:”eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLTN4d2NjIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI3MGQ5Y2YyNS1jNzU2LTExZTYtYWVhNi1kMDBkYTBmNGQ0ZTIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.OqEBj0cofXDKvQiioRkt1RKuF5QSPRweYRsmKXsacDFq10jJmBzgJUZtiIysu5CDov-6OR4p2HzmBfjfWkNFuldvOMKdjZP4KmJ8C1ZAOJ20f7Rr0-hyiG3Hnem6RBK41QsIUz0dwB-SmGWR9Mx-HY3LHITFp6nn3UcaDVESIFuRLge3KSnWBlalTlI5zyxJJ5Bfuxh9J26hw8wCaZce53pkE9g2fcjxJkXdUPEzB1MZw8egu7FiQ6_WaiaYgu6uD9TQovjb8uewWR3Jq5aYvCOrwnegm2MxC8Ndt_3EUJRVNgYnf2yzaXmkDSqAtgR-PQQ2SmYWKu45MjPPiyJn3w”

    },

    “kubernetes”: {

        “kubeconfig”:”/etc/cni/net.d/calico-kubeconfig”

    }

}

Calico这边数据是从Calico服务端获取相应的网络信息。

像简单的插件,对于容器网络信息,比如容器应该分配的IP,可以直接从dnsmasq分配出来;如果更简单一些,可以直接从CNI_ARGS 环境变量传过来;复杂的插件,比如Calico,就需要从服务端传递数据过来。

本文转移K8S技术社区-解析 | K8S之网络插件CNI

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
156 0
|
3月前
|
Web App开发 Kubernetes 数据可视化
Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
51 0
|
14天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
25 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
14天前
|
JSON Kubernetes Go
IDEA使用Kubernetes插件编写YAML
IDEA使用Kubernetes插件编写YAML
30 0
IDEA使用Kubernetes插件编写YAML
|
27天前
|
Kubernetes Shell Docker
K8S核心插件-Flannel网络插件
K8S核心插件-Flannel网络插件
45 0
|
27天前
|
Kubernetes 网络协议 Docker
K8S核心插件-coredns服务
K8S核心插件-coredns服务
15 0
|
1月前
|
Kubernetes Linux Docker
深度解析:Kubernetes 1.28.2集群安装过程中的关键步骤
本文旨在为读者提供一份详尽的Kubernetes 1.28.2集群安装指南,帮助您从零开始构建稳定、高效的Kubernetes集群。我们将从环境准备、软件安装、集群初始化到节点添加等各个环节进行逐步讲解,确保您能够顺利完成集群的搭建。
|
2月前
|
Kubernetes 安全 API
K8S 实用工具之四 - kubectl 实用插件
K8S 实用工具之四 - kubectl 实用插件
|
3月前
|
算法
深度解析:用户增长插件的计费规则与使用技巧
深度解析:用户增长插件的计费规则与使用技巧 随着互联网的快速发展,用户增长成为了各类企业面临的重要问题。如何高效地获取并圈选目标用户,提升用户活跃度,成为了企业运营的核心竞争力。盛通教育的用户增长插件,内置高性能营销场景化算法,可以根据企业的运营目标,智能圈选海量用户,并通过智能短信的方式触达目标用户。那么,这款插件的计费规则又是怎样的呢?
22 1

推荐镜像

更多