©
本文档使用 PHP中文网手册 发布
Docker Engine群集模式的覆盖网络可以安全地开箱即用。群组节点使用八卦协议交换覆盖网络信息。默认情况下,节点使用GCM模式下的AES算法对通过八卦交换的信息进行加密和认证。群中的管理器节点每12小时旋转一次用于加密八卦数据的密钥。
您还可以加密覆盖网络上不同节点上的容器之间交换的数据。要启用加密,创建覆盖网络时要通过--opt encrypted
标志:
$ docker network create --opt encrypted --driver overlay my-multi-host-network dt0zvqn0saezzinc8a5g4worx
当您启用覆盖加密时,Docker会在所有节点之间创建IPSEC隧道,在这些节点上调度连接到覆盖网络的服务的任务。这些通道在GCM模式下也使用AES算法,管理器节点每12小时自动旋转一次密钥。
不要将Windows节点附加到加密的覆盖网络。 Windows上不支持覆盖网络加密。如果Windows节点尝试连接到加密的覆盖网络,则不会检测到错误,但该节点将无法通信。
因为用于群集模式的覆盖网络使用来自管理器节点的加密密钥来加密八卦通信,所以只有群集中作为任务运行的容器才能访问密钥。因此,使用docker run
(非托管容器)在群集模式外启动的容器无法附加到覆盖网络。
例如:
$ docker run --network my-multi-host-network nginx docker: Error response from daemon: swarm-scoped network(my-multi-host-network) is not compatible with `docker create` or `docker run`. This network can only be used by a docker service.
要解决这种情况,请将非托管容器迁移到托管服务。例如:
$ docker service create --network my-multi-host-network my-image
由于swarm模式是可选功能,因此Docker引擎可以保持向后兼容性。如果您愿意,您可以继续依赖第三方键值存储来支持覆盖网络。然而,强烈鼓励切换到群模式。除了本文中介绍的安全优势外,swarm模式还可以充分利用新服务API提供的更高的可伸缩性。