Docker 第五章 容器网络

ip netns

虚拟化网络都是基于netns实现
ip-netns - process network namespace management  #管理网络名称空间工具

网络命名空间在逻辑上是网络堆栈的另一个副本,具有自己的路由,防火墙规则和网络设备。 默认情况下,进程从其父级继承其网络命名空间。最初,所有进程共享相同的默认网络名称空间 来自init进程。
SYNOPSIS         top        #用法
       ip [ OPTIONS ] netns  { COMMAND | help }

       ip netns [ list ]    #列出所有名称空间

       ip netns add NETNSNAME       #创建一个新的名称空间

       ip netns attach NETNSNAME PID       

       ip [-all] netns del [ NETNSNAME ]     #伤处一个名称空间

       ip netns set NETNSNAME NETNSID      

       ip netns identify [ PID ]

       ip netns pids NETNSNAME

       ip [-all] netns exec [ NETNSNAME ] command...      #在网络名称空间执行指定命令

       ip netns monitor

       ip netns list-id
 ip [-all] netns delete [ NAME ] - delete the name of a network namespace(s)

  

[[email protected] netreport]# ip netns add testspace   #添加一个名称空间
[[email protected] netreport]# ip netns list            #列出
testspace

[[email protected] netreport]# ip netns del testspace    #删除

[[email protected] netreport]# ip netns add testspace

[[email protected] netreport]# ip netns exec testspace ifconfig -a    #执行命令
lo: flags=8<LOOPBACK>  mtu 65536
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[[email protected] netreport]#

  

 

ip-link: network device configuration

#ip link 网络设备管理工具,用于配置虚拟网卡[[email protected] netreport]# ip link help
Usage: ip link add [link DEV] [ name ] NAME
                   [ txqueuelen PACKETS ]
                   [ address LLADDR ]
                   [ broadcast LLADDR ]
                   [ mtu MTU ] [index IDX ]
                   [ numtxqueues QUEUE_COUNT ]
                   [ numrxqueues QUEUE_COUNT ]
                   type TYPE [ ARGS ]

       ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]

       ip link set { DEVICE | dev DEVICE | group DEVGROUP }
	                  [ { up | down } ]
	                  [ type TYPE ARGS ]
	                  [ arp { on | off } ]
	                  [ dynamic { on | off } ]
	                  [ multicast { on | off } ]
	                  [ allmulticast { on | off } ]
	                  [ promisc { on | off } ]
	                  [ trailers { on | off } ]
	                  [ carrier { on | off } ]
	                  [ txqueuelen PACKETS ]
	                  [ name NEWNAME ]
	                  [ address LLADDR ]
	                  [ broadcast LLADDR ]
	                  [ mtu MTU ]
	                  [ netns { PID | NAME } ]
	                  [ link-netnsid ID ]
			  [ alias NAME ]
	                  [ vf NUM [ mac LLADDR ]
				   [ vlan VLANID [ qos VLAN-QOS ] [ proto VLAN-PROTO ] ]
				   [ rate TXRATE ]
				   [ max_tx_rate TXRATE ]
				   [ min_tx_rate TXRATE ]
				   [ spoofchk { on | off} ]
				   [ query_rss { on | off} ]
				   [ state { auto | enable | disable} ] ]
				   [ trust { on | off} ] ]
				   [ node_guid { eui64 } ]
				   [ port_guid { eui64 } ]
			  [ xdp { off |
				  object FILE [ section NAME ] [ verbose ] |
				  pinned FILE } ]
			  [ master DEVICE ][ vrf NAME ]
			  [ nomaster ]
			  [ addrgenmode { eui64 | none | stable_secret | random } ]
	                  [ protodown { on | off } ]

       ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]

       ip link xstats type TYPE [ ARGS ]

       ip link afstats [ dev DEVICE ]

       ip link help [ TYPE ]

TYPE := { vlan | veth | vcan | dummy | ifb | macvlan | macvtap |
          bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |
          gre | gretap | ip6gre | ip6gretap | vti | nlmon | team_slave |
          bond_slave | ipvlan | geneve | bridge_slave | vrf | macsec }
[[email protected] netreport]#   

  

常用命令

ip link add - 添加虚拟链接
ip link delete - 删除虚拟链接
ip link set - 更改设备属性
ip link show - 显示设备属性
ip link xstats - 显示扩展统计信息
ip link afstats - 显示特定于地址的系列统计信息
ip link help - 显示帮助

显示设备属性

ip link show - display device attributes

  dev NAME:specifies the network device to show. (default) 如果不指定设备,则显示所有设备信息
  up:only display running interfaces. 只显示启动的接口

添加虚拟设备

ip link add - add virtual link

link DEVICE:specifies the physical device to act operate on. 指定在哪个物理设备上操作
NAME:specifies the name of the new virtual device. 指定新虚拟设备的名称
TYPE:specifies the type of the new device. 指定新设备的类型
Link types:
  vlan - 802.1q tagged virtual LAN interface
  veth - Virtual ethernet interface 虚拟网络接口(一对)
  vcan - Virtual Local CAN interface
  dummy - Dummy network interface
  ifb - Intermediate Functional Block device
  macvlan - virtual interface base on link layer address (MAC)
  can - Controller Area Network interface
  bridge - Ethernet Bridge device 网桥设备

  

 

删除虚拟设备

ip link delete - delete virtual link

  DEVICE:specifies the virtual  device to act operate on.
  TYPE:specifies the type of the device.
  dev DEVICE:specifies the physical device to act operate on.

  

设置设备属性

ip link set - change device attributes

  dev DEVICE:specifies network device to operate on.
  up and down:change the state of the device to UP or DOWN. 启动或关闭网卡
  multicast on or multicast off:change the MULTICAST flag on the device. 启用或禁用组播
  name NAME:change the name of the device. 修改网卡名称。需要先donw掉网卡,不然会提示busy。
    This operation is not recommended if the device is running or has some addresses already configured.
  alias NAME:give the device a symbolic name for easy reference. 为网卡设置别名
  mtu NUMBER:change the MTU of the device. 设置MTU大小,默认为1500
  netns NETNSNAME:move the device to the network namespace associated with name NETNSNAME. 将接口移动到指定的网络名称空间

  

veth - Virtual ethernet interface #虚拟以太网卡

#veth设备是成对出现的,一端连接的是内核协议栈,一端彼此相连。一个设备收到协议栈的数据,会将数据发送另一个设备上去。大概结构如下:

  

+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|              ↑               ↑               ↑                 |
|..............|...............|...............|.................|
|              ↓               ↓               ↓                 |
|        +----------+    +-----------+   +-----------+           |
|        |   eth0   |    |   veth0   |   |   veth1   |           |
|        +----------+    +-----------+   +-----------+           |
|192.168.100.100  ↑               ↑               ↑                 |
|              |               +---------------+                 |
|              |          10.1.1.1/24       10.1.1.2/24               |
+--------------|-------------------------------------------------+
               ↓
         Physical Network

  

示例

创建一对虚拟网卡,新建的网卡默认都是关闭的,名称空间里的回环网卡lo默认也是关闭的。
[[email protected] netreport]# ip link add name veth1 type veth peer name veth2
[[email protected] netreport]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:8b:7c:a1 brd ff:ff:ff:ff:ff:ff
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
    link/ether 02:42:3d:8c:f3:de brd ff:ff:ff:ff:ff:ff
7: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
    link/ether 3a:54:20:3d:ff:16 brd ff:ff:ff:ff:ff:ff link-netnsid 0
8: [email protected]: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 8a:ed:62:73:ec:f6 brd ff:ff:ff:ff:ff:ff
9: [email protected]: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether da:6c:01:ef:3b:6a brd ff:ff:ff:ff:ff:ff
[[email protected] netreport]#

 

#一块网卡只能属于一个名称空间, 将veth2 网卡配置为testspace 名称空间[[email protected] netreport]# ip link set dev veth2 netns testspace
[[email protected] netreport]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:8b:7c:a1 brd ff:ff:ff:ff:ff:ff
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
    link/ether 02:42:3d:8c:f3:de brd ff:ff:ff:ff:ff:ff
7: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
    link/ether 3a:54:20:3d:ff:16 brd ff:ff:ff:ff:ff:ff link-netnsid 0
9: [email protected]: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether da:6c:01:ef:3b:6a brd ff:ff:ff:ff:ff:ff link-netnsid 1
[[email protected] netreport]#

 让两块在不同名称空间网卡通信

[[email protected] netreport]# ip netns list
testspace (id: 1)
[[email protected] netreport]# ip netns exec testspace ip link set dev veth2 name veth0    #可以修改dev name
[[email protected] netreport]# ip netns exec testspace ifconfig        
[[email protected] netreport]# ip netns exec testspace ifconfig -a                #显示网卡
lo: flags=8<LOOPBACK>  mtu 65536
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 8a:ed:62:73:ec:f6  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[[email protected] netreport]# ip netns exec testspace ifconfig veth0 10.1.1.2/24
[[email protected] netreport]# ip netns exec testspace ifconfig veth0 10.1.1.2/24 up     #配置名称空间网卡地址,并启动
[[email protected] netreport]# ip netns exec testspace ifconfig -a
lo: flags=8<LOOPBACK>  mtu 65536
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 10.1.1.2  netmask 255.255.255.0  broadcast 10.1.1.255
        ether 8a:ed:62:73:ec:f6  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[[email protected] netreport]#
[[email protected] netreport]# ifconfig veth1 10.1.1.1/24
[[email protected] netreport]# ifconfig veth1 10.1.1.1/24 up                #配置本地虚拟网卡地址并启动
[[email protected] netreport]# ping 10.1.1.2
PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data.
64 bytes from 10.1.1.2: icmp_seq=1 ttl=64 time=0.079 ms
64 bytes from 10.1.1.2: icmp_seq=2 ttl=64 time=0.089 ms
64 bytes from 10.1.1.2: icmp_seq=3 ttl=64 time=0.067 ms
^C
--- 10.1.1.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.067/0.078/0.089/0.011 ms
[[email protected] netreport]#

  

 

 

  

 

  

原文地址:https://www.cnblogs.com/zy09/p/10999268.html

时间: 2024-10-26 12:13:22

Docker 第五章 容器网络的相关文章

Docker的单主机容器网络

作者:杨冬 欢迎转载,也请保留这段声明.谢谢! 出处: https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/ 本篇文章主要探索Docker的单机容器网络,了解一下单个Docker主机上网络的各种模式,从而为后续理解跨主机容器网络打下基础. Docker默认容器网络的建立和控制是一种结合了network namespace,iptables,Linux网桥及route table等多种技术的综合解决方案,本篇主要针对于如何使用单

(五)容器网络 -上

一 Linux路由机制打通网络 docker128上修改Docker0的网络地址,与docker130不冲突 [[email protected] ~]# cat /etc/docker/daemon.json {"bip":"172.18.0.1/16"}[[email protected] ~]# systemctl restart docker [[email protected] ~]# ip addr|grep docker05: docker0: <

Docker | 第五章:构建自定义镜像

前言 上一章节,主要是介绍了下Dockerfile的一些常用命令的说明.我们知道,利用Dockerfile可以构建一个新的镜像,比如运行Java环境,就需要一个JDK环境的镜像,但直接使用公共的镜像时,一般上大小都比较大.所以本章节就主要结合Dockerfile文件及commit方式,构建属于自己的镜像,同时对镜像进行压缩和优化,同时也是对Dockerfile知识的一个实践. 利用Dockerfile构建自定义镜像 选定基础镜像 准备JRE版本 编写Dockerfile 实践:运行SpringB

第 8 章 容器网络 - 049 - 准备 Overlay 网络实验环境

overlay环境准备 在docker-machine (10.12.31.21)的基础上 docker主机 host1 (10.12.31.22) host2 (10.12.31.23) 在docker-machine (10.12.31.21)上部署安装模块Consul docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server –bootstrap 容器启动后,可以通过 http:// 10.12.3

第 8 章 容器网络 - 057 - macvlan 网络隔离和连通

macvlan 网络隔离和连通 验证 macvlan 之间的连通性. bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4. 即:同一 macvlan 网络能通信. bbox1 无法 ping 通 bbox2 和 bbox4. 即:不同 macvlan 网络之间不能通信. 但更准确的说法应该是:不同 macvlan 网络不能 在二层上 通信. 在三层上可以通过网关将 macvlan 连通,下面我们就启用网关. 将 Host 10.12.31.21 配置成一个虚拟路由

第十五章----容器和集合

容器(Collection) 数组是一种容器, 集合也是一种容器 java编程中, 装其他各种各样的对象(引用类型)的一种东西, 叫容器 (图书馆里所有的书, 要想管理图书馆里所有的书, 就需要先把这些书放到一个东西里面, 目前掌握的知识来说, 只能是数组, 数组的长度是固定的, 这就出现一个问题, 数组的长度该定义成多长 ? 长度是不固定的, 因为不知道有多少本书, 这个时候需要这样一种机制: 定义一种东西, 长度不固定, 可以随时添加和删除, 这种东西就是Collection, 只要不超出内

Kubernetes &amp; Docker 容器网络终极之战(十四)

目录 一.单主机 Docker 网络通信 1.1.host 模式 1.2 Bridge 模式 1.3 Container 模式 1.4.None 模式 二.跨主机 Docker 网络通信分类 2.1 通信方案 2.2.容器网络规范 2.3.网络通信实现方案 2.4.Kubernetes 网络模型 三.跨主机 Docker 网络 3.1 Flannel 网络方案 3.2.Calico 网络方案 3.3.Canal 网络方案 3.4.Docker overlay 网络方案 3.5.Docker ma

《Linux高性能服务器编程》学习总结(五)——Linux网络编程基础API

第五章      Linux网络编程基础API 对于网络编程,首先要了解的就是字节序的问题,字节序分为主机字节序和网络字节序,主机字节序又称小端字节序,是低字节存放在地地址,而网络字节序又称大端字节序,是低字节放在高地址.当数据在不同的机器上传播时,就需要统一字节顺序以保证不出现错误.在发送数据前,先将需要转变的数据转成网络字节序再发送,接收时先转成主机字节序再处理,要特别注意的是,即使是本机的两个进程通信,也要考虑字节序的问题,比如JAVA的虚拟机就使用大端字节序.使用如下代码可以查看本机的字

数据中心如何实现传统网络与容器网络的架构共存

一.概述随着数据中心网络技术的革新,并伴随容器的落地,如何在数据中心内部构建一个合理可用的网络架构,以满足不同形态的业务部署模式,成为一个网络人员越来越需要注重和考虑的方向. 二.业务背景在互联网公司的数据中心,通常你会越来越多的看到容器(k8s)作为业务/服务的载体,各业务/服务之间(pod间)彼此调用,以下从pod间调用.容器网络选型.容器网络架构.网络隔离几个方面进行阐述. 三.pod间调用 同一node内pod间调用pod间通过容器网络纯内部交互,这时外部网络无感知. 不通node的po