浅谈K8S cni和网络方案

本文深入探讨了Kubernetes (K8S) 中的CNI(Container Network Interface)插件及其使用方式,包括ipam、main和meta三类插件的详细说明。例如,host-local和dhcp作为ipam插件管理IP,bridge和ptp作为main插件配置网络。此外,文章还介绍了常见的网络方案,如kubenet、flannel的udp/vxlan和host-gw等,以及如何通过CNI实现跨虚拟机的容器网络互联。
摘要由CSDN通过智能技术生成

此文已由作者黄扬授权网易云社区发布。


欢迎访问网易云社区,了解更多网易技术产品运营经验。



在早先的k8s版本中,kubelet代码里提供了networkPlugin,networkPlugin是一组接口,实现了pod的网络配置、解除、获取,当时kubelet的代码中有个一个docker_manager,负责容器的创建和销毁,亦会负责容器网络的操作。而如今我们可以看到基本上kubelet的启动参数中,networkPlugin的值都会设置为cni。

cni插件的使用方式

使用CNI插件时,需要做三个配置:

  • kubelet启动参数中networkPlugin设置为cni

  • 在/etc/cni/net.d中增加cni的配置文件,配置文件中可以指定需要使用的cni组件及参数

  • 将需要用到的cni组件(二进制可执行文件)放到/opt/cni/bin目录下

所有的cni组件都支持两个命令:add和del。即配置网络和解除网络配置。

cni插件的配置文件是一个json文件,不同版本的接口、以及不同的cni组件,有着不同的配置内容结构,目前比较通用的接口版本是0.3.1的版本。

在配置文件中我们可以填入多个cni组件,当这些cni组件的配置以数组形式记录时,kubelet会对所有的组件进行按序链式调用,所有组件调用成功后,视为网络配置完成,过程中任何一步出现error,都会进行回滚的del操作。以保证操作流上的原子性。

几种基本的cni插件

cni插件按照代码中的存放目录可以分为三种:ipam、main、meta。

  • ipam cni用于管理ip和相关网络数据,配置网卡、ip、路由等。

  • main cni用于进行网络配置,比如创建网桥,vethpair、macvlan等。

  • meta cni有的是用于和第三方CNI插件进行适配,如flannel,也有的用于配置内核参数,如tuning

由于官方提供的cni组件就有很多,这里我们详细介绍一些使用率较高的组件。

ipam类CNI

ipam类型的cni插件,在执行add命令时会分配一个IP给调用者。执行del命令时会将调用者指定的ip放回ip池。社区开源的ipam有host-local、dhcp。

host-local

我们可以通过host-local的配置文件的数据结构来搞懂这个组件是如何管理ip的。

type IPAMConfig struct {
    *Range
    Name       string
    Type       string         `json:"type"`
    Routes     []*types.Route `json:"routes"`//交付的ip对应的路由
    DataDir    string         `json:"dataDir"`//本地ip池的数据库目录
    ResolvConf string         `json:"resolvConf"`//交付的ip对应的dns
    Ranges     []RangeSet     `json:"ranges"`//交付的ip所属的网段,网关信息
    IPArgs     []net.IP       `json:"-"` // Requested IPs from CNI_ARGS and args
}

#配置文件范例:
{
    "cniVersion": "0.3.1",
    "name": "mynet",
    "type": "ipvlan",
    "master": "foo0",
    "ipam": {
        "type": "host-local",
        "resolvConf": "/home/here.resolv",
        "dataDir": "/home/cni/network",
        "ranges": [
            [
                {
                    "subnet": "10.1.2.0/24",
                    "rangeStart": "10.1.2.9",
                    "rangeEnd": "10.1.2.20",
                    "gateway": "10.1.2.30"
                },
                {
                    "subnet": "10.1.4.0/24"
                }
            ],
            [{
                "subnet": "11.1.2.0/24",
                "rangeStart": "11.1.2.9",
                "rangeEnd": "11.1.2.20",
                "gateway": "11.1.2.30"
            }]
        ]
    }
}

从上面的配置我们可以清楚:

  • host-local组件通过在配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值