一、平面隔离概念
为了提升兼容性和管理的便利性,一些产品在运维架构设计上的控制平面、用户平面和管理平面在缺省情况下没有隔离。
用户可以通过业务接口登录并管理设备,客观上使被攻击的可能性增大,攻击者可以较容易的通过业务接口尝试攻击管理平面。
因此,产品在运维架构设计上,要支持用户安装时,配置三面隔离:隔离控制平面、用户平面和管理平面,以保护管理平面不受外部攻击。
二、Swarm数据流量(平面)分类
Docker swarm 数据流量分为两个层面:
1. 控制管理流量(control and management plane traffic): 包括 swarm 管理消息,例如加入/退出 swarm 的请求,这些流量总是被加密的。
2.应用数据流量(Application data plane traffic): 包括容器之间的数据交换,以及容器与外部网络的数据交换。
三、Docker 启用swarm模式参数
# docker swarm --help
# docker swarm init --help
# docker swarm join --help
--listen-addr参数是管理者节点的docker服务所在的IP:PORT,也就是说,可以通过这个组合访问到该节点的docker服务。
--advertise-addr是广播地址,也就是其他节点加入该swarm集群时,需要访问的IP.
--datapath-addr是数据域地址,服务容器之间的流量将通过--datapath-addr接口发送
--listen-addr指出的是这个集群暴露给外界调用的HTTP API的socket地址。
添加--advertise-addr参数的原因是大多数情况下我们的主机都不只有一张网卡,而一个swarm集群需要辨明集群所在的子网络是哪张网卡的。
多网卡时,--advertise-addr 必须被指定,集群加入,离开和管理群的相关流量将通过--advertise-addr 接口发送
--datapath-addr如果不指定,则与 --advertise-addr 相同,服务容器之间的流量将通过--datapath-addr接口发送
--advertise-addr 和 --datapath-addr 的值,可以是 IP地址或者接口(网卡)名称:
IP地址: 192.168.1.1, --advertise-addr 192.168.1.1
接口名称: ens33, --datapath-addr ens33
默认情况下,所有群集流量都通过同一接口发送,包括用于维护群集本身的控制和管理流量以及往返服务容器的数据流量。
在Docker 17.06及更高版本中,可以在初始化或加入集群时通过传递 --datapath-addr 标志来分离此流量。
四、集群初始化后的端口监听
我们以单平面为例,查看集群初始化后的端口监听
在manager节点:
# docker swarm init --listen-addr 192.168.1.101:2377 --advertise-addr 192.168.1.101:2377 --data-path-addr ens33
在worker节点:
# docker swarm join --token SWMTKN-1-3siyil5mkdwgpmmnob5ainaxhr5q4sz9r5n17slhe2r2g83lu2-et21wwft0w3samzatx9aslcow 192.168.1.101:2377
在manager节点:
# ss -tan | grep 2377
在worker节点:
# ss -tan | grep 2377
可以看出,manager节点,会监听在--advertise-addr 的2377 端口上,worker节点用随机端口37492跟manager通讯。
五、参考
Manage swarm service networks
https://octowhale.gitbooks.io/docker-doc-cn/engine/swarm/networking
FusionInsight所说的单平面,双平面三平面是什么?
https://www.jianshu.com/p/ce87bb8f88fc
docker单机、docker swarm 网络
https://www.jianshu.com/p/c76ecaa08a79