[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
```
- 应用层
- HTTP
- Cookie
- Session
- HTTP报文格式
- HTTP的Header字段
- HTTPS
- 简介
- 原理
- RSA加密与解密
- 证书签名与验证
- TLS双向认证
- openssl命令汇总
- DNS
- DNS的记录类型
- DNS的报文格式
- FAQ
- 传输层
- TCP
- CloseWait
- 网络层
- IPv6
- 链路层
- 链接层基础知识
- VLAN
- FAQ
- Linux网络收发包
- 网卡收包
- 网卡发包
- 收发包FAQ
- LVS
- 安装-DR模式
- 基本原理
- Ipvsadm命令
- Netfilter
- Netfilter简介
- 注册钩子函数
- Netfilter中数据包流向
- Iptables的数据结构
- 连接跟踪
- 初识连接跟踪
- 连接跟踪详解
- 连接跟踪数据结构
- 数据包与连接的状态
- NAT
- IPVS
- KubeProxy的IPVS模式
- Linux虚拟网络设备
- 虚拟网络设备简介
- Tap
- VethPair
- Vlan
- Vxlan
- Flannel的VXLAN原理
- Openstack的VXLAN原理
- VXLAN总结
- Bridge
- 给容器设置主机网段IP
- Macvlan
- Ipvlan
- IPIP
- IPIP使用介绍
- IPIP源码分析
- Limdiag网络
- 详细设计
- kubeovn
- IP命令
- Calico
- Calico常见问题
- ARP无响应
- 其他