dockerdocker

docker network

2018-11-28  本文已影响0人  Tim_SSS

docker 网络的种类

  1. host
  2. bridge
  3. overlay
  4. Macvlan

host

bridge

Use bridge networks(桥接网络的使用)

Differences between user-defined bridges and the default bridge (自定义桥接和默认桥接的不同)

1、 User-defined bridges provide better isolation and interoperability between containerized applications.(自定义桥接提供了容器化应用程序之间更好的隔离性和互操性-协同工作的能力)

2、User-defined bridges provide automatic DNS resolution between containers.(自定义桥接可以在容器之间提供自动DNS解决方案)

3、Containers can be attached and detached from user-defined networks on the fly.(正在运行的容器可以在自定义桥接网络上链接和分离)

4、Each user-defined network creates a configurable bridge.(每个用户定义的网络创建一个可配置的网桥。)

5、Linked containers on the default bridge network share environment variables.(使用默认桥接网络的容器共享变量)

  1. 多个容器可以使用Docker卷挂载包含共享信息的文件或目录。
  2. 可以使用docker-compose一起启动多个容器,并且compose文件可以定义共享变量。
  3. 您可以使用群集服务来代替独立的容器,并利用共享的秘密和配置。

连接到同一用户定义的桥接网络的容器有效地将所有端口彼此公开。要让不同网络上的容器或非Docker主机能够访问端口,必须使用-p或-publish标志发布该端口。

Manage a user-defined bridge (管理用户自定桥接)

$ docker network create my-net
$ docker network rm my-net

删除网络到底发生了什么?

在创建或删除用户定义的网桥或从用户定义的网桥连接或断开容器时,Docker使用操作系统特有的工具来管理底层网络基础设施(例如添加或删除网桥设备或在Linux上配置iptables规则)。这些细节应被视为实现细节。让docker为您管理用户定义的网络。

Connect a container to a user-defined bridge( 使用用户自定义网络链接容器)

$ docker create --name my-nginx \
  --network my-net \
  --publish 8080:80 \
  nginx:latest
$ docker network connect my-net my-nginx

Disconnect a container from a user-defined bridge (容器从自定义桥接网络断开)

$ docker network disconnect my-net my-nginx

Use IPv6

Enable forwarding from Docker containers to the outside world (允许docker容器访问外面的世界)

1、设置Linux kernel 允许ip转发。
$ sysctl net.ipv4.conf.all.forwarding=1
2、改变ptables FORWARD 规则从DROP 到 ACCEPT
$ sudo iptables -P FORWARD ACCEPT

在重新启动时,这些设置不会持久存在,因此可能需要将它们添加到启动脚本中。

Use the default bridge network(使用默认桥接网络)

默认的桥接网络被认为是docker的遗留问题,不建议在生产中使用。配置它需要手动操作,而且它还有技术缺点。

Connect a container to the default bridge network (使容器容器连接默认的桥接网络)

Configure the default bridge network(设置默认桥接网络)

{
  "bip": "192.168.1.5/24",
  "fixed-cidr": "192.168.1.5/25",
  "fixed-cidr-v6": "2001:db8::/64",
  "mtu": 1500,
  "default-gateway": "10.20.1.1",
  "default-gateway-v6": "2001:db8:abcd::89",
  "dns": ["10.20.1.2","10.20.1.3"]
}

重启docker这些改变才生效。

Use IPv6 with the default bridge network(在默认网络上使用IPv6)

overlay

1、一个被称为ingress的overlay网络,它用于处理与集群的控制和数据传输。当你创建一个swarm 集群服务,没有将它连接到用户自定义网络情况下,默认它会使用ingress网络连接。

2、一个被称为docker_gwbridge的桥接网络,它用于将单个docker进程连接到swarm集群其他docker进程。

Operations for all overlay networks (所有有关overlay网络的操作)

1、Create an overlay network(创建一个overlay网络)

你需要来往于每个参与overlay网络的docker的主机的端口是开放的。

TCP端口:2377 用于集群管理

TCP和UDP端口:7946用于集群管理节点

UDP端口:4789 用于overlay网络通信

在你创建overlay网络之前,你既可以使用docker swarm init命令初始化你的docker进程作为swarm 集群管理,也可以使用docker swarm join 命令加入到已经存在集群中。它们中任何一个都会创建一个imgress overlay 网络,这个网络默认是被用于swarm集群服务的。如果你没有计划使用swarm集群服务,就没必要这么做。之后,你可以创建一个附加的用户定义overlay网络。

$ docker network create -d overlay my-overlay
$ docker network create -d overlay --attachable my-attachable-overlay

你可以指定ip段,子网络,网关或者其他选项。具体可以参考:docker network create --help

2、 Encrypt traffic on an overlay network(在overlay网络上使用加密通信)

不能在windows节点上使用加密overlay网络

overlay 网络加密方式在windows上是不支持的。如果windows节点尝试连接加密的overlay网络,不会出现错误,但是节点之间不能通信。

3、swarm mode overlay networks and standalone containers (集群下的overlay网络和单个容器)

$ docker network create --opt encrypted --driver overlay --attachable my-attachable-multi-host-network

4、Customize the default ingress network (定制默认的ingress网络)

1、使用docker network inspect ingress 命令检测ingress网络,删除任何已经连接这个网络服务。这些服务已经暴露了端口,例如对外暴露80端口wordpress服务。如果这样的服务没有停止,下一步将会出现错误。

2、删除已经存在ingress网络:

$ docker network rm ingress

WARNING! Before removing the routing-mesh network, make sure all the nodes
in your swarm run the same docker engine version. Otherwise, removal may not
be effective and functionality of newly created ingress networks will be
impaired.
Are you sure you want to continue? [y/N]

3、创建一个overlay网络,使用--ingress标记,跟随一些定制化选项。下面一个示例,设置MTU到1200设置子网段,和设置网关。

$ docker network create \
  --driver overlay \
  --ingress \
  --subnet=10.11.0.0/16 \
  --gateway=10.11.0.2 \
  --opt com.docker.network.driver.mtu=1200 \
  my-ingress

Note:你可以将ingress网络命名其他ingress的名字,但只能只要一个。尝试命名第二个将会失败。

4、重启你刚才在第一步停止的服务。

5、Customize the docker_gwbridge interface(定制化docker 桥接接口)

1、停止docker。

2、删除已经存在docker_gwbridge 接口。

$ sudo ip link set docker_gwbridge down

$ sudo ip link del dev docker_gwbridge

3、启动docker。不要加入和初始化集群。

4、使用docker network create命令,来定制化设置手动创建或者重新创建docker_gwbridge接口。以下示例在子网络下10.11.0.0/16下,有关可定制选项的完整列表,请参见“桥驱动程序选项”。

$ docker network create \
--subnet 10.11.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge

5、初始化或者加入集群。由于网桥已经存在,docker就不会自动创建和设置它。

Operations for swarm services(对swarm 集群操作)

1、Publish ports on an overlay network(暴露overlay网络端口)

标记值 描述
-p 8080:80 或-p published=8080,target=80 默认协议Tcp,在服务上用的80端口,在路由表上用的8080端口(对外)
-p 8080:80/udp 或-p published=8080,target=80,protocol=udp 指定协议udp,在服务上用的80端口,在路由表上用的8080端口(对外)
-p 8080:80/tcp -p 8080:80/udp 或 -p published=8080,target=80,protocol=tcp -p published=8080,target=80,protocol=udp 设置以上两个协议和对应的端口

2、Bypass the routing mesh for a swarm service(让swarm集群绕过路由网络)

3、Separate control and data traffic (将控制和数据传输分开)

Operations for standalone containers on overlay networks(在overlay网络下,对容器单例的操作)

1、Attach a standalone container to an overlay network (将一个容器实例依附于一个overlay网络)

Publish ports(设置对外端口)

标记值 描述
-p 8080:80 默认协议Tcp,在容器内的80端口,在overlay网络上用的8080端口(对外)
-p 8080:80/udp 指定协议udp,,在容器内的80端口,在overlay网络上用的8080端口(对外)
-p 8080:80/sctp 指定协议sctp,,在容器内的80端口,在overlay网络上用的8080端口(对外)
-p 8080:80/tcp -p 8080:80/udp 使用tcp和udp协议,在容器内的80端口,在overlay网络上用的8080端口(对外)

2、Container discovery (容器自我发现)

Macvlan

1、由于IP地址的耗尽或者VLAN扩展而意外损耗网络是不可避免的,在这种情况下你的网络中,会出现大量不合理的唯一MAC地址。

2、你的网络设备需要能处理混杂模式,一个物理网卡,可以被分配多个MAC地址。

3、如果你的应用程序使用桥接(单个容器实例)或者overlay网络(多个docker主机的通信),从长远角度来看,这些解决方案也许是更好。

Create a macvlan network (创建一个Macvlan网络)

1、在桥接模式下,Macvlan通信是通过主机上的物理网卡进行传输的。

2、在802.1q中继网络模式下,docker会在fly上创建一个子接口,通信会在这种情况下进行传输。它允许你控制路由和过滤更多等级的网络。

1、Bridge mode(桥接模式)

$ docker network create -d macvlan \
  --subnet=172.16.86.0/24 \
  --gateway=172.16.86.1  \
  -o parent=eth0 pub_net
$ docker network create -d macvlan  \
  --subnet=192.168.32.0/24  \
  --ip-range=192.168.32.128/25 \
  --gateway=192.168.32.254  \
  --aux-address="my-router=192.168.32.129" \
  -o parent=eth0 macnet32

2、802.1q trunk bridge mode(中继桥接网络)

$ docker network  create  -d macvlan \
    --subnet=192.168.50.0/24 \
    --gateway=192.168.50.1 \
    -o parent=eth0.50 macvlan50

3、Use an ipvlan instead of macvlan(使用一个ipvlan代替macvlan网络)

$ docker network create -d ipvlan \
    --subnet=192.168.210.0/24 \
    --subnet=192.168.212.0/24 \
    --gateway=192.168.210.254  \
    --gateway=192.168.212.254  \
     -o ipvlan_mode=l2 ipvlan210

Use IPv6

$ docker network  create  -d macvlan \
    --subnet=192.168.216.0/24 --subnet=192.168.218.0/24 \
    --gateway=192.168.216.1  --gateway=192.168.218.1 \
    --subnet=2001:db8:abc8::/64 --gateway=2001:db8:abc8::10 \
     -o parent=eth0.218 \
     -o macvlan_mode=bridge macvlan216

以上内容是对docker 网络内容的相关翻译和自己的理解。

上一篇 下一篇

猜你喜欢

热点阅读