ubuntu系统中containerd的cni网络配置
containerd创建cni网络
1、下载cni工具源码包和网络插件包
访问地址:
https://github.com/containernetworking/plugins
https://github.com/containernetworking/cni
下载某一个版本的包
mkdir -p /root/cni && cd /root/cni wtet https://github.com/containernetworking/cni/archive/refs/tags/v1.2.3.tar.gz wtet https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz
2、创建cri插件解压目录,解压cni-plugins插件包
mkdir /root/cni/cni-plugins tar -xf cni-plugins-linux-amd64-v1.6.2.tgz -C /root/cni/cni-plugins tar -xf cni-1.2.3.tar.gz
我这里将cni-plugins和cni-1.2.3移动到opt目录安装:mv cni-1.2.3 /opt/cni && mv cni-plugins /opt/
3、准备cni的网络配置文件
mkdir -p /etc/cni/net.d vi /etc/cni/net.d/10-mynet.conf { "cniVersion": "1.0.0", // CNI 规范版本 "name": "mynet", // 网络配置名称(自定义标识) "type": "bridge", // 插件类型:桥接 "bridge": "cni0", // 创建的网桥设备名称 "isGateway": true, // 是否为网桥配置网关IP "ipMasq": true, // 是否设置IP伪装(NAT) "ipam": // IP地址管理配置 { "type": "host-local", // 使用本地存储分配IP "subnet": "10.66.0.0/16", // 分配的IP子网范围 "routes": [ { "dst": "0.0.0.0/0" } // 默认路由(所有流量通过网桥) ] } } vi /etc/cni/net.d/99-loopback.conf { "cniVersion": "1.0.0", // CNI 规范版本 "name": "lo", // 网络配置名称(注意:不是设备名) "type": "loopback" // 插件类型:回环设备 }
4、安装json解析工具,
apt-get install jq
5、执行脚本生成cni网络
cd /opt/cni/scripts/ CNI_PATH=/opt/cni-plugins ./priv-net-run.sh echo "Hello world"
6、给容器配置网络功能,使宿主机能访问容器
# 获取容器进程ID pid=$(ctr tasks ls | grep linux|awk '{print $2}') # 在宿主机中完成指定容器网络命名空间的获取 netnspath=/proc/6156/ns/net # 执行脚本为容器添加网络配置 CNI_PATH=/opt/cni-plugins ./exec-plugins.sh add ${pid} ${netnspath}
由于镜像没有查看容器内ip相关命令,这里没截图展示效果。