ingress overlay网络
以下是来至官方文档——Use overlay networks 的一段
When you initialize a swarm or join a Docker host to an existing swarm, two new networks are created on that Docker host:
- an overlay network called
ingress
, which handles control and data traffic related to swarm services. When you create a swarm service and do not connect it to a user-defined overlay network, it connects to theingress
network by default.- a bridge network called
docker_gwbridge
, which connects the individual Docker daemon to the other daemons participating in the swarm.
大致意思就是说ingress
是集群服务默认使用的overlay网络,用于处理与集群服务有关的控制(负载)和数据流量。
在容器内的应用无法使用此网络进行通信,比如:在只有一个leader
的集群上开两个服务:tomcatv1
和tomcatv2
,以交互的方式进入tomcatv2
,并使用此网络去请求tomcat
的8080
端口,是无法访问的(即便两个IP能够ping通)
创建两个tomcat
服务
1 | docker service create -p 8080:8080 --name tomcatv1 tomcat |
交互进入tomcatv2
:
1 | docker exec -it tomcatv2.1.i5v2a2vnocgxguoup6fh7jt55 bash |
请求tomcatv1
:
1 | //ping |
自定义overlay网络
Prerequisites:
Firewall rules for Docker daemons using overlay networks
You need the following ports open to traffic to and from each Docker host participating on an overlay network:
- TCP port 2377 for cluster management communications
- TCP and UDP port 7946 for communication among nodes
- UDP port 4789 for overlay network traffic
Before you can create an overlay network, you need to either initialize your Docker daemon as a swarm manager using
docker swarm init
or join it to an existing swarm usingdocker swarm join
. Either of these creates the defaultingress
overlay network which is used by swarm services by default. You need to do this even if you never plan to use swarm services. Afterward, you can create additional user-defined overlay networks.
两个先决条件:宿主机加入集群和配置防火墙规则(测试使用直接关闭就行)
创建
注意:必须是集群管理节点
1 | docker network create -d overlay my-overlay |
这里给出部分参数说明:
名称 | 描述 |
---|---|
–attachable | 独立容器也能使用此网络 |
–driver , -d | 网络驱动 |
–subnet | 网段的CIDR格式的子网 |
–gateway | 主子网的IPv4或IPv6网关 |
–ingress | 自定义ingress类型的时候指定,只能有一个ingress网络 |
–ip-range | 从子范围(相对于子网)分配容器ip |
更多参数参见:docker network create
测试
这次使用创建的my-overlay
网络启动服务
1 | docker service create -p 8080:8080 --network my-overlay --name tomcatv1 tomcat |
进入tomcatv2
通过my-overlay
请求tomcatv1
的8080端口
1 | //这里404的原因是我拉取的tomcat镜像webapps下没有任何东西 |
发现,服务间已能通过此网络正常访问。
注意:当管理节点创建的服务被部署到工作节点,或者工作节点使用此网络部署独立的服务(docker run -p 8080:8080 --network my-overlay -d --name tomcat tomcat
),工作节点会在此网络(my-overlay)自动创建一个端点(Endpoint),用于连接工作节点所在宿主机与其他集群内的宿主机。该端点(Endpoint)将占用此网络(my-overlay)一个随机的IP地址。
Docker 网络模型如下: