namespace隔离

在这里插入图片描述

1. veth pair

veth pair是指成对出现的虚拟网络设备接口,一端用于连接网络协议栈,一端用于彼此相连,因此在网络拓扑中可以用于连接网络命名空间(netns)、网桥、docker等。

# 创建一对虚拟网络接口
sudo ip link add <veth_name> type veth peer name <peer_name>
sudo ip link set <veth_name> up
sudo ip link set <peer_name> netns <namespace_name>

可以通过ifconfig命令配置veth接口的IP地址;

2. 网桥

# 下载Linux网桥工具
sudo apt-get install bridge-utils
# 创建网桥
sudo brctl addbr <bridge_name>
# 连接接口到网桥
sudo brctl addif <bridge_name> <eth>

3. namespace资源隔离

3.1 六项隔离

实现一个资源隔离的容器,首先可能考虑到文件系统隔离,通过chroot命令的使用切换根目录的挂载点,其次就是独立IP、端口、路由等等的网络隔离,同时还需要独立的主机名与域名来标识,以及进程间的通信隔离,和用户和用户组的权限隔离,最后包括容器中的应用需要有自己的PID与宿主机中的进程编号隔离开。

/proc下的部分文件:通过/proc/[pid]/ns文件,查看进程所属namespace;
使用namespace的API,包括clone()、setns()、以及unshare():

  1. clone()创建新进程并创建namespace;
  2. 通过setns()加入一个已经存在的namespace;
  3. 通过unshare()在原先的进程上进行namespace隔离;

clone()与unshare()的区别在于unshare()不需要启动一个新进程就可以起到隔离的效果,直接跳出原先的namespace进行操作。

3.2 network namespace(网络隔离)

Network namespace是内核支持的一种网络虚拟方式,可以在一个操作系统中创建多个网络命名空间,每个网络空间都有一个独立的协议栈。

# 查看当前所有命名空间
sudo ip netns list
# 创建一个命名空间
sudo ip netns add <namespace_name>
# 将虚拟接口接入到namespace
sudo ip link set <peer_name> netns <namespace_name>
# 在namespace中执行命令
sudo ip netns exec <namespace_name> <命令,如ifconfig等>

两个namespace间可以通过veth pair直接相连,也可以通过bridge和veth pair组合相连,或者将bridge换成虚拟交换机(OVS)也可以做到。

4. vxlan

vxlan隧道:

# 创建vxlan隧道
sudo ip link add <vxlan_name> type vxlan id <vni> 
	dstport 4789 remote <remote_ip> local <local_ip> dev <eth>
sudo ip link set <vxlan_name> up

vxlan子接口:

# 创建vxlan子接口
sudo ip link add link <vxlan_name> <子接口名> type vlan proto
	 <protocol> id <num>
sudo ip link set <子接口名> up

通过在二层子接口上配置不同的流封装类型实现不同数据进入各自对应的vxlan隧道,vxlan子接口封装类型:

  1. proto 802.1Q:dot1q 只允许携带指定vxlan tag(单层)的数据包进入隧道;
  2. proto 802.1ad:qinq 只允许携带指定vxlan tag(双层)的数据包进入隧道;
  3. untag:只允许不携带vxlan tag的数据包进入隧道;
  4. default:允许所有的数据包进入隧道。

经过两层vxlan子接口封装后的DHCP DISCOVER数据包,802.1ad ID为16,802.1Q ID为12。可见qinq在dot1q的外层。
在这里插入图片描述
经过802.1ad子接口进行解封装后:
在这里插入图片描述
经过802.1Q子接口再次进行解封装得到原DHCP DISCOVER数据包:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值