使用CNI插件时,需要如下配置

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

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

3、kubelet启动参数中networkPlugin设置为cni

4、创建网桥

5、添加本机网络端口到网桥中

具体操作流程:

1、下载CNI插件

https://github.com/containernetworking/cni

2、构建cni组件
cd $GOPATH/src/github.com/containernetworking/plugins
./build_linux.sh
3、将第2步生成的cni组件放到/opt/cni/bin目录下
4、在/etc/cni/net.d中增加cni的配置文件
mkdir -p /etc/cni/net.dcat >/etc/cni/net.d/10-mynet.conf <<EOF
{"cniVersion": "0.3.1","name": "mynet","plugins": [{"name": "mynet","type": "bridge","bridge": "cni0","isGateway": true, "ipam": {"type": "host-local","subnet": "192.168.204.2/24","rangeStart": "192.168.204.0","rangeEnd": "192.168.204.254","routes": [{ "dst": "0.0.0.0/0" }]}}]
}
EOF
5、kubelet启动参数中networkPlugin设置为cni
--network-plugin=cni
--cni-conf-dir=/etc/cni/net.d
--cni-bin-dir=/opt/cni/bin
6、创建bridge网桥和添加添加本机网络端口到网桥中
[root@node1 ~]# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.touch /var/lock/subsys/local/usr/sbin/ip link add cni0 type bridge//添加网桥
/usr/sbin/ip link set ens33 master cni0//
/usr/sbin/ifconfig ens33 192.168.204.143/24//主机网卡恢复IP
/usr/sbin/ifconfig cni0 192.168.204.3/24//给网桥设置IP

/usr/sbin/ip link add cni0 type bridge:创建网桥

Ip link set ens33 master cni0: 添加添加本机网络端口到网桥中

1-4步将bridge搭建好了,但本机网卡eth0与bridge网桥是还没有建立通信的。也就是说外界还是无法访问通过bridge创建的容器。

所以当eth0加入bridge之后,从外面网络收到的数据包将无条件的转发给bridge,自己变成了一根网线。就可以访问通过bridge创建的容器了。

bridge不区分接入进来的是物理设备还是虚拟设备,对它来说都一样的,都是网络设备。

ens33是本机网卡名称,不同主机名称会不同,ens33对应下图的eth0,cni0对应bridge

验证:

192.168.204.189是pod的ip

[root@master1 ~]# curl 192.168.204.189
<h1>This request was processed by host: first-deployment-5bc5c8cd58-p2kqk</h1>

拓展:

CNI-bridge方式示意图:

![未命名文件 (4)](/Users/tcy/Documents/Typora/Picture/未命名文件 (4).png)

使用新建的bridge网桥代替docker0网桥(docker0也可以继续保留,常规容器还是用docker0,而需要互通的容器可以借助于这个工具给docker容器新建虚拟网卡并绑定IP桥接到bridge)

bridge和主机eth0之间是也是利用veth pair这个技术:

https://blog.csdn.net/sld880311/article/details/77650937

https://segmentfault.com/a/1190000009491002#articleHeader6

查看网桥:

[root@node1 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
cni0            8000.000c294220a7       no              ens33veth1b8fe73aveth31fc4222veth5ed676bcvethf0b15c0b
docker0         8000.0242814c9fe7       no

查看路由:

[root@node1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.204.2   0.0.0.0         UG    0      0        0 cni0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.204.0   0.0.0.0         255.255.255.0   U     0      0        0 cni0

查看网卡:

[root@node1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master cni0 state UP qlen 1000link/ether 00:0c:29:42:20:a7 brd ff:ff:ff:ff:ff:ffinet 192.168.204.143/24 brd 192.168.204.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::7c8e:9fcd:f1c1:f52b/64 scope link valid_lft forever preferred_lft forever
3: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000link/ether 00:0c:29:42:20:a7 brd ff:ff:ff:ff:ff:ffinet 192.168.204.3/24 brd 192.168.204.255 scope global cni0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe42:20a7/64 scope link valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN link/ether 02:42:81:4c:9f:e7 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever

创建删除容器时,Bridge工作流程:

创建容器:

1)brdige组件创建一个指定名字的网桥,如果网桥已经存在,就使用已有的网桥;

2)创建vethpair,将node端的veth设备连接到网桥上;

3)从ipam获取一个给容器使用的ip数据,并根据返回的数据计算出容器对应的网关;

4)进入容器网络名字空间,修改容器中网卡名和网卡ip,以及配置路由,并进行arp广播(注意我们只为vethpair的容器端配置ip,node端是没有ip的);

5)如果IsGW=true,将网桥配置为网关,具体方法是:将第三步计算得到的网关IP配置到网桥上,同时根据需要将网桥上其他ip删除。最后开启网桥的ip_forward内核参数;

6)如果IPMasq=true,使用iptables增加容器私有网网段到外部网段的masquerade规则,这样容器内部访问外部网络时会进行snat,在很多情况下配置了这条路由后容器内部才能访问外网。(这里代码中会做exist检查,防止生成重复的iptables规则);

7)配置结束,整理当前网桥的信息,并返回给调用者。DEL命令

删除容器:

1)根据命令执行的参数,确认要删除的容器ip,调用ipam的del命令,将IP还回IP pool;

2)进入容器的网络名字空间,根据容器IP将对应的网卡删除;

3)如果IPMasq=true,在node上删除创建网络时配置的几条iptables规则。

Kubernetes利用CNI-bridge插件打通网络相关推荐

  1. cni k8s 插件安装_第一次,如此清晰脱俗的直解K8S网络

    图片出自:<你女儿也能看懂的插画版 Kubernetes 指南> K8S 网络设计原则 K8S 网络设计原则如下: 每个 Pod 都拥有一个独立 IP 地址,Pod 内所有容器共享该 IP ...

  2. 关于kubernetes的CNI插件说明

    https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md https://kubernetes.io/zh/docs/co ...

  3. kubelet配置cni插件_kubernetes网络插件对比分析(flannel、calico、weave)

    本文将在介绍技术原理和相应术语的基础上,再集中探索与详细对比目前最流行的CNI插件: Flannel Calico Weave 介绍 网络架构是Kubernetes中较为复杂.让很多用户头疼的方面之一 ...

  4. Calico集成kubernetes的CNI网络部署全过程、启用CA自签名

    原创内容,转载请注明出处 博主地址:https://aronligithub.github.io/ kubernetes v1.11 二进制部署篇章目录 kubernetes v1.11 二进制部署 ...

  5. 思科服务器 vmware虚拟多少个hba卡,利用Cisco UCS 管理虚拟机网络(上)

    Cisco UCS计算系统针对虚拟化环境的网络管理提供了两种解决方案:一种是纯软件的Cisco Nexus 1000V:一种是基于Cisco UCS M81KR网卡的硬件解决方案.Cisco Nexu ...

  6. 思科虚拟机服务器,利用Cisco UCS管理虚拟机网络(上)

    Cisco UCS计算系统针对虚拟化环境的网络管理提供了两种解决方案:一种是纯软件的Cisco Nexus 1000V:一种是基于Cisco UCS M81KR网卡的硬件解决方案.Cisco Nexu ...

  7. 打通网络营销的任督二脉

    人体有两条重要的经络,一条为任脉,一条为督脉,任脉在前,督脉再后,一旦任督二脉打通,其功力必然大增.如何打通任督二脉呢? 没有武侠小说中讲的那么难,这留到以后我写养生的书中再给大家谈,今天要给大家分享 ...

  8. 思科虚拟机服务器,利用Cisco UCS管理虚拟机网络

    Cisco UCS计算系统针对虚拟化环境的网络管理提供了两种解决方案:一种是纯软件的Cisco Nexus 1000V:一种是基于Cisco UCS M81KR网卡的硬件解决方案.Cisco Nexu ...

  9. Host Only、NAT和Bridge三种网络连接

    Host Only.NAT和Bridge三种网络连接 在安装好了Linux镜像之后,如何连接物理机和虚拟机呢?这就需要网络连接,网络连接有三种:HostOnly.NAT.Bridge,它们都可用于Gu ...

最新文章

  1. linux内核arch模块,Kernel module (简体中文)
  2. linux命令实验设备,实验二 Linux系统的常用命令
  3. python 计算s= 12+ 22+ 32 +... + (10*n+2)
  4. oracle blob字段索引,在oracle 数据库中使用 Blob 字段存储 一张图片并读取
  5. pytorch扩展——如何自定义前向和后向传播
  6. PSP金手指CMF_r21d修改版安装方法
  7. html 压缩工具 html-minifier
  8. mysql 未发现数据源名称并且未指定默认驱动程序_SQLSERVER 链接 MYSQL 的 两种方法 及 未发现数据源名称并且未指定默认驱动程序 处理办法...
  9. SQL2005开发版下载地址
  10. 【铨顺宏项目推荐】RFID无线射频识别技术的设计思路
  11. F450无人机组装与调试
  12. Moviebooking电影售票系统--用例建模
  13. Juce-强大的开源类库
  14. python绘制密度散点图
  15. 《分布式任务调度平台XXL-JOB》
  16. 对比分析法(Comparative Analysis Approach)
  17. 小米 2015 北京 研发面试
  18. 计算机主机是几几年的怎么查,怎样查询电脑上次开机时间_电脑开机时间查询方法-系统城...
  19. Natbib 参考文献样式
  20. 如何给PDF文件去水印,10秒轻松搞定

热门文章

  1. PADA: Example-based Prompt Learning for on-the-fly Adaptation to Unseen Domains
  2. Yuga Labs 收购 CryptoPunks 的始末
  3. 像掌阅这种保存到手机的图片,是那么保存和读取的?
  4. selenuim爬虫实战(日lofter.com)
  5. html网页制作体会,网页制作的心得体会
  6. 工作问题:SQL求解用户复购率
  7. 在word中给方框打勾
  8. 【教程】阿里云服务器挂载硬盘(其中硬盘为从快照中创建的云硬盘)
  9. 计算机科学人工智能的应用,计算机人工智能技术的应用与发展.pdf
  10. [ZJOI2008]无序运动Movement