是否可以自定义 swarm 端口?如果是这样,该怎么做?
Is it possible to customize swarm port? If so, how to do this?
根据 docker 文档:
以下端口必须可用。在某些系统上,这些端口默认打开。
用于集群管理通信的 TCP 端口 2377
用于节点间通信的 TCP 和 UDP 端口 7946
覆盖网络流量的 UDP 端口 4789
所以如果这 3 个默认端口在主机上不可用,如何自定义这些端口?
以下选项在 19.03(刚刚发布)中可用:
$ docker swarm init --help
Usage: docker swarm init [OPTIONS]
Initialize a swarm
Options:
--advertise-addr string Advertised address (format: <ip|interface>[:port])
--autolock Enable manager autolocking (requiring an unlock key to start a stopped manager)
--availability string Availability of the node ("active"|"pause"|"drain") (default "active")
--cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
--data-path-addr string Address or interface to use for data path traffic (format: <ip|interface>)
--data-path-port uint32 Port number to use for data path traffic (1024 - 49151). If no value is set or is set to 0, the default port (4789) is used.
--default-addr-pool ipNetSlice default address pool in CIDR format (default [])
--default-addr-pool-mask-length uint32 default address pool subnet mask length (default 24)
--dispatcher-heartbeat duration Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
--external-ca external-ca Specifications of one or more certificate signing endpoints
--force-new-cluster Force create a new cluster from current state
--listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
--max-snapshots uint Number of additional Raft snapshots to retain
--snapshot-interval uint Number of log entries between Raft snapshots (default 10000)
--task-history-limit int Task history retention limit (default 5)
要更改 2377 上的侦听端口和 4789 上的 VXLAN 端口,您应该能够运行像这样:
docker swarm init --listen-addr 0.0.0.0:3377 --data-path-port 5789
我不认为 7946 是可配置的。
将其他节点加入 swarm 时,您有以下选择:
$ docker swarm join --help
Usage: docker swarm join [OPTIONS] HOST:PORT
Join a swarm as a node and/or manager
Options:
--advertise-addr string Advertised address (format: <ip|interface>[:port])
--availability string Availability of the node ("active"|"pause"|"drain") (default "active")
--data-path-addr string Address or interface to use for data path traffic (format: <ip|interface>)
--listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
--token string Token for entry into the swarm
这让您可以调整监听器 address/port。我不知道 data-path-port 是否是整个 swarm 中的全局设置,该功能一个小时前才发布 GA,因此需要一些测试才能了解它的行为方式。
来自您的评论:
I'd like to know if the docker community will consider to make 7946 configurable
Docker 是开源的,因此您可以自由地向 moby/moby、libnetwork、and/or swarmkit 提交 PR。不确定哪个 repo 专门涵盖了这个实现细节。
根据 docker 文档:
以下端口必须可用。在某些系统上,这些端口默认打开。
用于集群管理通信的 TCP 端口 2377
用于节点间通信的 TCP 和 UDP 端口 7946
覆盖网络流量的 UDP 端口 4789
所以如果这 3 个默认端口在主机上不可用,如何自定义这些端口?
以下选项在 19.03(刚刚发布)中可用:
$ docker swarm init --help
Usage: docker swarm init [OPTIONS]
Initialize a swarm
Options:
--advertise-addr string Advertised address (format: <ip|interface>[:port])
--autolock Enable manager autolocking (requiring an unlock key to start a stopped manager)
--availability string Availability of the node ("active"|"pause"|"drain") (default "active")
--cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
--data-path-addr string Address or interface to use for data path traffic (format: <ip|interface>)
--data-path-port uint32 Port number to use for data path traffic (1024 - 49151). If no value is set or is set to 0, the default port (4789) is used.
--default-addr-pool ipNetSlice default address pool in CIDR format (default [])
--default-addr-pool-mask-length uint32 default address pool subnet mask length (default 24)
--dispatcher-heartbeat duration Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
--external-ca external-ca Specifications of one or more certificate signing endpoints
--force-new-cluster Force create a new cluster from current state
--listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
--max-snapshots uint Number of additional Raft snapshots to retain
--snapshot-interval uint Number of log entries between Raft snapshots (default 10000)
--task-history-limit int Task history retention limit (default 5)
要更改 2377 上的侦听端口和 4789 上的 VXLAN 端口,您应该能够运行像这样:
docker swarm init --listen-addr 0.0.0.0:3377 --data-path-port 5789
我不认为 7946 是可配置的。
将其他节点加入 swarm 时,您有以下选择:
$ docker swarm join --help
Usage: docker swarm join [OPTIONS] HOST:PORT
Join a swarm as a node and/or manager
Options:
--advertise-addr string Advertised address (format: <ip|interface>[:port])
--availability string Availability of the node ("active"|"pause"|"drain") (default "active")
--data-path-addr string Address or interface to use for data path traffic (format: <ip|interface>)
--listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
--token string Token for entry into the swarm
这让您可以调整监听器 address/port。我不知道 data-path-port 是否是整个 swarm 中的全局设置,该功能一个小时前才发布 GA,因此需要一些测试才能了解它的行为方式。
来自您的评论:
I'd like to know if the docker community will consider to make 7946 configurable
Docker 是开源的,因此您可以自由地向 moby/moby、libnetwork、and/or swarmkit 提交 PR。不确定哪个 repo 专门涵盖了这个实现细节。