容器网络原理分析:veth 和 network namespace
1. Liunx veth-pair 和 network namespace
[root@lianhua netns]$ ip netns add ns1
[root@lianhua netns]$ ip netns add ns2
[root@lianhua netns]$ ip netns list
ns2
ns1
[root@lianhua netns]$ ip netns exec ns1 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 [root@lianhua netns]$ ip netns exec ns1 ip link set dev lo up
[root@lianhua netns]$ ip netns exec ns1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
[root@lianhua netns]$ ip link add veth-ns1-a type veth peer name veth-ns2-b
[root@lianhua netns]$ ip link set veth-ns1-a netns ns1
[root@lianhua netns]$ ip link set veth-ns2-b netns ns2 [root@lianhua netns]$ ip netns exec ns1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
307: veth-ns1-a@if306: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 8a:a2:45:23:aa:28 brd ff:ff:ff:ff:ff:ff link-netnsid 1 [root@lianhua netns]$ ip netns exec ns2 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
306: veth-ns2-b@if307: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 5e:a9:4e:d9:e2:5d brd ff:ff:ff:ff:ff:ff link-netnsid 0
[root@lianhua netns]$ ip netns exec ns1 ip link set dev veth-ns1-a up
[root@lianhua netns]$ ip netns exec ns2 ip link set dev veth-ns2-b up
[root@lianhua netns]$ ip netns exec ns1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
307: veth-ns1-a@if306: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 8a:a2:45:23:aa:28 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::88a2:45ff:fe23:aa28/64 scope link
valid_lft forever preferred_lft forever
[root@lianhua netns]$ ip netns exec ns1 ip addr add 162.0.0.1/24 dev veth-ns1-a
[root@lianhua netns]$ ip netns exec ns2 ip addr add 162.0.0.2/24 dev veth-ns2-b
[root@lianhua netns]$ ip netns exec ns1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
307: veth-ns1-a@if306: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 8a:a2:45:23:aa:28 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet 162.0.0.1/24 scope global veth-ns1-a
valid_lft forever preferred_lft forever
inet6 fe80::88a2:45ff:fe23:aa28/64 scope link
valid_lft forever preferred_lft forever
[root@lianhua netns]$ ip netns exec ns1 ping 162.0.0.2
PING 162.0.0.2 (162.0.0.2) 56(84) bytes of data.
64 bytes from 162.0.0.2: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 162.0.0.2: icmp_seq=2 ttl=64 time=0.027 ms --- 162.0.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.027/0.046/0.066/0.020 ms
[root@lianhua netns]$ ip netns exec ns1 ip route
162.0.0.0/24 dev veth-ns1-a proto kernel scope link src 162.0.0.1
2. 容器网络原理
[root@lianhua ~]$ ip netns add ns5
[root@lianhua ~]$ ip link add veth5.1 type veth peer name veth5.2
[root@lianhua ~]$ brctl addbr lxcbr1
[root@lianhua ~]$ brctl stp lxcbr1 off
[root@lianhua ~]$ ip link set veth5.2 netns ns5
[root@lianhua ~]$ ip netns exec ns5 ip link set dev veth5.2 up [root@lianhua ~]$ ip link set dev veth5.1 up
[root@lianhua ~]$ brctl addif lxcbr1 veth5.1
[root@lianhua ~]$ ifconfig lxcbr1 172.11.0.1/24 up # 类似 docker 机制,将 veth5.2 改名为 eth0
[root@lianhua ~]$ ip netns exec ns5 ip link set dev veth5.2 down
[root@lianhua ~]$ ip netns exec ns5 ip link set dev veth5.2 name eth0
[root@lianhua ~]$ ip netns exec ns5 ip link set dev eth0 up [root@lianhua ~]$ ip netns exec ns5 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
312: eth0@if313: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether ea:23:3f:8f:9d:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::e823:3fff:fe8f:9d07/64 scope link
valid_lft forever preferred_lft forever
[root@lianhua ~]$ ip netns exec ns5 ifconfig eth0 172.11.0.2/24 up
[root@lianhua ~]$ ip netns exec ns5 route add default gw 172.11.0.1
[root@lianhua ~]$ ip netns exec ns5 ip route
default via 172.11.0.1 dev eth0
172.11.0.0/24 dev eth0 proto kernel scope link src 172.11.0.2
[root@lianhua ~]$ ip netns exec ns5 ping 192.168.0.69
PING 192.168.0.69 (192.168.0.69) 56(84) bytes of data.
64 bytes from 192.168.0.69: icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from 192.168.0.69: icmp_seq=2 ttl=64 time=0.026 ms --- 192.168.0.69 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.026/0.033/0.041/0.009 ms
3. 容器到 network namespace 的映射
[root@lianhua ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
459df1132c4b caps1371 "/bin/bash" 6 days ago Up 6 days test2
94a3abcf7e54 caps1371 "/bin/bash" 6 days ago Up 6 days test1
[root@lianhua ~]$ ip netns list
[root@lianhua ~]$ docker inspect --format '{{ .State.Pid }}' test1
43163
[root@lianhua ~]$ docker inspect --format '{{ .State.Pid }}' test2
43265
[root@lianhua ~]$ mkdir -p /var/run/netns
[root@lianhua ~]$ ln -s /proc/43163/ns/net /var/run/netns/test1
[root@lianhua ~]$ ln -s /proc/43265/ns/net /var/run/netns/test2
[root@lianhua ~]$ ip netns list
test2 (id: 3)
test1 (id: 2) [root@lianhua ~]$ ip netns exec test1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
298: eth0@if299: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:19:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.25.0.2/16 brd 172.25.255.255 scope global eth0
valid_lft forever preferred_lft forever
302: eth1@if303: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:1a:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.26.0.3/16 brd 172.26.255.255 scope global eth1
valid_lft forever preferred_lft forever [root@lianhua ~]$ ip netns exec test2 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
300: eth0@if301: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:1a:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.26.0.2/16 brd 172.26.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@lianhua ~]$ ip netns exec test1 ls -la /proc/self/ns/
total 0
...
lrwxrwxrwx 1 root root 0 Jan 12 00:42 net -> net:[4026532403] [root@lianhua ~]$ ip netns exec test2 ls -la /proc/self/ns/
total 0
...
lrwxrwxrwx 1 root root 0 Jan 12 00:42 net -> net:[4026532502]
容器网络原理分析:veth 和 network namespace的更多相关文章
- docker容器网络通信原理分析
概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求.而容器的网络通信又可以分为两大方面:单主机容器上的相互通信和跨主机的容器相互通信.而本文将分别针对这两 ...
- docker容器网络通信原理分析(转)
概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求.而容器的网络通信又可以分为两大方面:单主机容器上的相互通信和跨主机的容器相互通信.而本文将分别针对这两 ...
- 第 8 章 容器网络 - 068 - 分析 Calico 的网络结构
分析 Calico 的网络结构 在 host1 中运行容器 bbox1 并连接到 cal_net1: docker container run --network cal_net1 --name bb ...
- spring容器启动原理分析1
在项目的web.xml中配置 <listener> <listener-class>org.springframework.web.context.ContextLoaderL ...
- 【转】理解Docker容器网络之Linux Network Namespace
原文:理解Docker容器网络之Linux Network Namespace 由于2016年年中调换工作的原因,对容器网络的研究中断过一段时间.随着当前项目对Kubernetes应用的深入,我感觉之 ...
- 容器网络——从CNI到Calico
从容器诞生开始,存储和网络这两个话题就一直为大家津津乐道.我们今天这个环境下讲网络这个问题,其实是因为容器对网络的需求,和传统物理.虚拟环境对网络环境需求是有差别的,主要面临以下两个问题: 过去Iaa ...
- Docker容器的原理与实践 (下)
欢迎访问网易云社区,了解更多网易技术产品运营经验. Docker原理分析 Docker架构 镜像原理 镜像是一个只读的容器模板,含有启动docker容器所需的文件系统结构及内容Docker以镜像和在镜 ...
- 一文搞懂 Linux network namespace
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 本文通过 IP ...
- 【Networking】容器网络大观 && SDN 资料汇总
SDNLAB技术分享(十五):容器网络大观 SDNLAB君• 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望 ...
- [Kubernetes]浅谈容器网络
Veth Pair 这部分内容主要介绍一个设备: Veth Pair . 作为一个容器,它可以声明直接使用宿主机的网络栈,即:不开启 Network Namespace .在这种情况下,这个容器启动后 ...
随机推荐
- 解决opencv测试时OpenCV Error: Unspecified error (The function is not implemented.的问题
在安装好opencv时,出现如下的报错信息: OpenCV Error: Unspecified error (The function is not implemented. Rebuild the ...
- Kernel Memory 入门系列: Embedding 简介
Kernel Memory 入门系列: Embedding 简介 在 RAG模式 其实留了一个问题. 我们对于的用户问题的理解和文档的检索并没有提供合适的方法. 当然我们可以通过相对比较传统的方法. ...
- ElasticSearch之查看集群的参数
参考Cluster get settings API. 命令样例,不指定参数,如下: curl -X GET "https://localhost:9200/_cluster/setting ...
- weblogic GC overhead limit exceeded
weblogic GC overhead limit exceeded 使用weblogic启动较大项目时,超出GC限制,可以通过修改 C:\Oracle\Middleware\Oracle_Home ...
- centos7 安装 mysqlclient 报错
报错如下: 解决方法: 先安装依赖: yum install mysql-devel 再安装: pip3 install mysqlclient
- 2023-09-05:请用go语言编写。一个图像有n个像素点,存储在一个长度为n的数组arr里, 每个像素点的取值范围[0,s]的整数, 请你给图像每个像素点值加上一个整数k(可以是负数), 像素值会
2023-09-05:请用go语言编写.一个图像有n个像素点,存储在一个长度为n的数组arr里, 每个像素点的取值范围[0,s]的整数, 请你给图像每个像素点值加上一个整数k(可以是负数), 像素值会 ...
- 【程序员的福音】一款C#开源的GitHub加速神器
前言 作为一个程序员你是否会经常会遇到GitHub无法访问(如下无法访问图片),或者是访问和下载源码时十分缓慢就像乌龟爬行一般.之前有尝试过手动修改host文件来解决网站的访问问题,以及更换网络但还是 ...
- 新版以太坊Ethereum库ethersV5.0配合后端Golang1.18实时链接区块链钱包(Metamask/Okc)以及验签操作
区块链去中心化思想无处不在,比如最近使用个体抗原自检替代大规模的中心化核酸检测,就是去中心化思想的落地实践,避免了大规模聚集导致的交叉感染,提高了检测效率,本次我们使用Ethereum最新的ether ...
- AI开发实践丨客流分析之未佩戴口罩识别
摘要:通过本教程,我们可以学习客流统计应用的扩展--过线客流统计+口罩佩戴识别,可用于商超.写字楼入口安检. 本文分享自华为云社区<客流分析之未佩戴口罩识别>,作者: HiLens_fei ...
- DarkMode(3):sass函数实实现深色模式操作
上文<DarkMode(2):深色模式解决方案--css颜色变量实现Dark Mode>,完全基于样色抽离变量,然后使用预处理其,生成两套样式.切换样式文件. sass自定义函数与mixi ...