企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ### **初始网络** 有两台主机,它们有一个网卡ens33,IP为分别为192.168.92.101/24和192.168.92.102/24,网关地址为192.168.92.2。如下: ![](https://img.kancloud.cn/07/ac/07ac7dcd882734532ca5d4633db189dd_444x420.png) 主机101上的初始路由如下: ``` [root@k8s1 ~]# ip route default via 192.168.92.2 dev ens33 192.168.92.0/24 dev ens33 proto kernel scope link src 192.168.92.101 ``` 它是能Ping通子网外的地址114的: ``` [root@k8s1 ~]# ping -c 1 114.114.114.114 PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data. 64 bytes from 114.114.114.114: icmp_seq=1 ttl=128 time=48.9 ms --- 114.114.114.114 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 48.957/48.957/48.957/0.000 ms ``` ### **目标** 在主机101上,创建容器Pod,并且给容器赋予和主机同网段的IP 192.168.92.200/24。最终要达到的效果是:从主机102上应该能Ping通192.168.92.200。从Pod0容器内也能Ping通同子网内的192.168.92.102,也能Ping通不同子网内的114。 目标网络拓扑图如下: ![](https://img.kancloud.cn/f1/75/f1756b4e8e2a4e661803173858f9ed90_443x418.png) ### **步骤** ##### **创建网桥,把物理网卡设置在网桥上,并把IP给网桥** 创建网桥cni-bridge ``` $ ip link add cni-bridge type bridge $ ip link set cni-bridge up ``` 把物理网卡ens33加到网桥上,然后查看一下网桥上的设备 ``` $ ip link set ens33 master cni-bridge $ bridge link show ``` 此时,从外面已经连不上192.168.92.101了,而且ens33上已经自动没有了IP。 接着,我们把物理网卡的IP赋给网桥 ``` $ ip addr add 192.168.92.101/24 dev cni-bridge ``` 接着,我们调整一下主机上的默认路由,使用主机能够正常通外网 ``` $ ip route delete default via 192.168.92.2 dev ens33 $ ip route add default via 192.168.92.2 dev cni-bridge $ ping -c 1 114.114.114.114 ``` ##### **创建容器Pod0,连接在cni-bridge上** 创建容器pod0(这里是创建网络命名空间pod0)** ``` $ ip netns add pod0 ``` 然后创建veth-pair(一个叫pod0,一个叫eth0),用来连接容器和网桥 ``` $ ip link add pod0 type veth peer name eth0 $ ip link set pod0 up $ ip link set eth0 up ``` 把veth-pair的一端eth0加到网桥上 ``` $ ip link set pod0 master cni-bridge ``` 把veth-pair另一端加到Pod内(把网络设备放到另一个网络命名空间中后,需要重新set up) ``` $ ip link set eth0 netns pod0 $ ip netns exec pod0 ip link set eth0 up ``` 给容器里面的网卡eth0设置IP ``` $ ip netns exec pod0 ip addr add 192.168.92.200/24 dev eth0 ``` 设置Pod内的默认路由使其可以上外网 ``` $ ip netns exec pod0 ip route add default via 192.168.92.2 dev eth0 ```