网络管理

虚拟化实现之 docker(三)

1.13.1docker的网络类型

类型 说明
None 不为容器配置任何网络功能,没有网络 –net=none
Container 与另一个运行中的容器共享Network Namespace,–net=container:containerID
Host 与主机共享Network Namespace,–net=host
Bridge Docker设计的NAT网络模型**(默认类型)**

Bridge默认docker网络隔离基于网络命名空间,在物理机上创建docker容器时会为每一个docker容器分配网络命名空间,并且把容器IP桥接到物理机的虚拟网桥上。

1.13.2 不为容器配置网络功能

此模式下创建容器是不会为容器配置任何网络参数的,如:容器网卡、IP、通信路由等,全部需要自己去配置。

[[email protected] ~]# docker run -it --network none busybox:latest /bin/sh

/ # ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue

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

1.13.3 与其他容器共享网络配置(Container)

此模式和host模式很类似,只是此模式创建容器共享的是其他容器的IP和端口而不是物理机,此模式容器自身是不会配置网络和端口,创建此模式容器进去后,你会发现里边的IP是你所指定的那个容器IP并且端口也是共享的,而且其它还是互相隔离的,如进程等。

[[email protected] ~]# docker run -it --network container:mywordpress_db_1
busybox:latest /bin/sh

/ # ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue

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

105: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc
noqueue

link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff

inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0

valid_lft forever preferred_lft forever

1.13.4 使用宿主机网络

此模式创建的容器没有自己独立的网络命名空间,是和物理机共享一个Network
Namespace,并且共享物理机的所有端口与IP,并且这个模式认为是不安全的

[[email protected] ~]# docker run -it --network host busybox:latest /bin/sh

1.13.5 查看网络列表

[[email protected] ~]# docker network list

NETWORK ID NAME DRIVER SCOPE

b15e8a720d3b bridge bridge local

345d65b4c2a0 host host local

bc5e2a32bb55 mywordpress_default bridge local

ebf76eea91bb none null local

1.13.6 用PIPEWORK为docker容器配置独立IP

参考文档:http://blog.csdn.net/design321/article/details/48264825

官方网站:https://github.com/jpetazzo/pipework

宿主环境:centos7.2

1、安装pipework

wget https://github.com/jpetazzo/pipework/archive/master.zip

unzip master.zip

cp pipework-master/pipework /usr/local/bin/

chmod +x /usr/local/bin/pipework

2、配置桥接网卡

安装桥接工具

yum install bridge-utils.x86_64 -y

修改网卡配置,实现桥接

# 修改eth0配置,让br0实现桥接

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet

BOOTPROTO=static

NAME=eth0

DEVICE=eth0

ONBOOT=yes

BRIDGE=br0

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0

TYPE=Bridge

BOOTPROTO=static

NAME=br0

DEVICE=br0

ONBOOT=yes

IPADDR=10.0.0.100

NETMASK=255.255.255.0

GATEWAY=10.0.0.254

DNS1=223.5.5.5

# 重启网络

[[email protected] ~]# /etc/init.d/network restart

3、运行一个容器镜像测试:

pipework br0 $(docker run -d -it -p 6880:80 --name httpd_pw httpd)
10.0.0.220/[email protected]

在其他主机上测试端口及连通性

[[email protected] ~]# curl 10.0.0.220

[[email protected] ~]# ping 10.0.0.220 -c 1

PING 10.0.0.220 (10.0.0.220) 56(84) bytes of data.

64 bytes from 10.0.0.220: icmp_seq=1 ttl=64 time=0.043 ms

4、再运行一个容器,设置网路类型为none:

pipework br0 $(docker run -d -it --net=none --name test httpd:2.4)
10.0.0.221/[email protected]

进行访问测试

[[email protected] ~]# curl 10.0.0.221

5、重启容器后需要再次指定:

pipework br0 testduliip 172.16.146.113/[email protected]

pipework br0 testduliip01 172.16.146.112/[email protected]

Dcoker跨主机通信之overlay可以参考:

http://www.cnblogs.com/CloudMan6/p/7270551.html

1.13.7 Docker跨主机通信之macvlan

创建网络

[[email protected] ~]# docker network create --driver macvlan --subnet
10.1.0.0/24 --gateway 10.1.0.254 -o parent=eth0 macvlan_1

33a1f41dcc074f91b5bd45e7dfedabfb2b8ec82db16542f05213839a119b62ca

设置网卡为混杂模式

ip link set eth0 promisc on

创建使用macvlan网络容器

[[email protected] ~]# docker run -it --network macvlan_1 --ip=10.1.0.222 busybox
/bin/sh

Docker网络类型

https://www.cnblogs.com/CloudMan6/p/7587532.html

None:不为容器配置任何网络功能,–net=none

Container:与另一个运行中的容器共享Network
Namespace,–net=container:containerID

Host:与主机共享Network Namespace,–net=host

Bridge:Docker设计的NAT网络模型

docker网络的四种方式详解:

1.Host模式:

Host 模式并没有为容器创建一个隔离的网络环境。

该模式下的Docker 容器会和Host宿主机共享同一个网络namespace, Docker
Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。

Host模式特点包括:

容器没有隔离的 network namespace

容器的 IP 地址同 Docker host 的 IP 地址

注意:容器中服务端口号不能与Host宿主机上已经使用的端口号相冲突

host 模式能够和其它模式共存

2.Container模式

Container网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker
容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。

3.None模式

None 网络就是什么都没有的网络。挂在这个网络下的容器除了
lo,没有其他任何网卡。需要我们自行去配置。

4.Bridge模式

Docker 容器默认使用Bridge模式的网络。

Docker的Bridge模式和VM虚拟机的Bridge模式不同,虽然也叫Bridge,但实质上类似于VM的NAT模式。

原理是在宿主机上虚出一块网卡bridge0,然后所有容器会桥接在这块网卡的网段上。默认情况下容器能访问外部网络,但外部网络无法访问容器,需要通过暴露容器端口的方式(docker
run -p)让外部网络访问容器内的服务。

docker network inspect bridge ###bridge 网络的配置信息

详解https://www.cnblogs.com/CloudMan6/p/7077198.html

1:Docker跨主机通信之macvlan

详解https://www.cnblogs.com/CloudMan6/p/7352620.html

##创建macvlan网络

docker network create --driver macvlan --subnet 10.1.0.0/24 --gateway 10.1.0.254
-o parent=eth0 macvlan_1

##设置eth0的网卡为混杂模式

ip link set eth0 promisc on

##创建使用macvlan网络的容器

docker run -it --network macvlan_1 --ip=10.1.0.210 busybox:latest /bin/sh

满足Docker容器与宿主机网段相同,容器与其他同网段节点相互通信,不与宿主机进行通信

创建docker macvlan

Docker官方在1.12版本之后引入了macvlan网络驱动,可以更简单的为容器配置桥接网络

介绍一下macvlan:

macvlan的原理是在宿主机物理网卡上虚拟出多个子网卡,通过不同的MAC地址在数据链路层进行网络数据转发的,它是比较新的网络虚拟化技术,需要较新的内核支持(Linux
kernel v3.9–3.19 and 4.0+)

docker network create -d macvlan --subnet=192.168.70.0/24
–gateway=192.168.70.254 -o parent=em4 yu

参数说明:

-d macvlan 创建macvlan网络,使用macvlan网络驱动

–subnet 指定宿主机所在网段

–gateway 指定宿主机所在网段网关

-o parent 继承指定网段的网卡

容器内无法使用ping 命令

[email protected]:/# apt-get update

[email protected]:/# apt-get install inetutils-ping ###添加ping命令

[email protected]:/# apt-get install net-tools ###添加ifconfig 命令

[email protected]:/# apt-get install iproute2 ###添加ip命令

测试

[email protected]:/# ping 192.168.70.239

PING 192.168.70.239 (192.168.70.239): 56 data bytes

92 bytes from 526265560ca4 (192.168.70.100): Destination Host Unreachable

92 bytes from 526265560ca4 (192.168.70.100): Destination Host Unreachable

结论

使用macVLAN模式的容器,无法ping通宿主机,宿主机也无法ping通该容器,对其他同网段的服务器和容器都可以联通。

2:用PIPEWORK为docker容器配置独立IP

2:Dcoker跨主机通信之overlay

http://www.cnblogs.com/CloudMan6/p/7270551.html

需求docker的网络配置进行修改,将docker容器的IP地址设置成与宿主机同网段,并且相互连通。

使用pipework为docker容器配置独立IP

安装pipework

wget https://github.com/jpetazzo/pipework/archive/master.zip

unzip master.zip

cp pipework-master/pipework /usr/local/bin/

chmod +x /usr/local/bin/pipework

创建两个容器实例,并不需要默认docker0网桥分配的172.17.0.1网段,设置为–net=none

docker run -itd –name test1 –net=none -h test1 centos /bin/bash

docker run -itd –name test1 –net=none -h test2 centos /bin/bash

docker run -d -p 192.168.70.239:80:80 -p 443:443 --net=none --restart=always
–name=lekaiyu -h lekaiyu --volume “$PWD/html”:/usr/share/nginx/html --volume
“$PWD/conf”:/etc/nginx/conf -v /etc/localtime:/etc/localtime nginx

接下来,使用pipework命令为容器设置固定IP

[[email protected] ~]# pipework br0 test1 192.168.1.52/[email protected]

[[email protected] ~]# pipework br0 test2 192.168.1.53/[email protected]

查看主机是否包含br0网桥,如果不存在就创建,向容器实例test1添加一块网卡,并配置固定IP:192.168.1.53,若test1已经有默认的路由,则删除掉,将@后面的192.168.1.1设置为默认路由的网关,将test1容器实例连接到创建的br0上。

pipework br0 test1 192.168.70.111/[email protected]

删除虚拟网卡

[[email protected] yppt]# ifconfig br0 down

[[email protected] yppt]# systemctl restart network

pipework包含了200多行的shell脚本

通过network namespace,veth pair以及linux
bridge完成容器网络的设置,执行过程大概包括:

问题 需要docker宿主机之间redis与nginx容器互通

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FxVhqWdh-1600932385950)(media/0541ce440968886f662615621fd2facc.png)]

–cluster-store 指定 consul 的地址。

–cluster-advertise 告知 consul 自己的连接地址。

3. flannel 是 CoreOS 开发的容器网络解决方案。

详解:https://www.cnblogs.com/CloudMan6/p/7412150.html

flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在
host 间路由,容器间无需 NAT 和 port mapping 就可以跨主机通信。

每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫
flanneld 的 agent,其职责就是从池子中分配
subnet。为了在各个主机间共享信息,flannel 用 etcd(与 consul 类似的 key-value
分布式数据库)存放网络配置、已分配的 subnet、host 的 IP 等信息。

4. weave 是 Weaveworks 开发的容器网络解决方案

详解:https://www.cnblogs.com/CloudMan6/p/7471162.html

  1. 如何部署 Calico 网络?

详解:https://www.cnblogs.com/CloudMan6/p/7509975.html
主机通信。

每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫
flanneld 的 agent,其职责就是从池子中分配
subnet。为了在各个主机间共享信息,flannel 用 etcd(与 consul 类似的 key-value
分布式数据库)存放网络配置、已分配的 subnet、host 的 IP 等信息。

4. weave 是 Weaveworks 开发的容器网络解决方案

详解:https://www.cnblogs.com/CloudMan6/p/7471162.html

  1. 如何部署 Calico 网络?

详解:https://www.cnblogs.com/CloudMan6/p/7509975.html

相关文章:

  • 2022-12-23
  • 2021-12-14
  • 2021-08-11
  • 2022-12-23
  • 2021-12-01
  • 2022-01-25
  • 2021-11-17
  • 2021-09-14
猜你喜欢
  • 2021-07-08
  • 2021-09-23
  • 2021-11-14
  • 2022-12-23
  • 2021-05-08
  • 2021-08-12
  • 2021-06-20
相关资源
相似解决方案