CoreOS 成员是否需要有公共 IP 才能加入 etcd2 集群?

CoreOS 成员是否需要有公共 IP 才能加入 etcd2 集群?

我正在一个私有子网中启动 5 个 coreos EC2 成员。然后为其中一个成员分配一个弹性 IP。似乎只有分配了 IP 的那个成员才能加入 etcd2 集群,并且一直在等待其他 4 个成员。

这是我的云配置

#cloud-config

coreos:
  update:
    reboot-strategy: "etcd-lock"
  etcd2:
    discovery: "https://discovery.etcd.io/_____hash_____"
    advertise-client-urls: "http://$private_ipv4:2379"
    initial-advertise-peer-urls: "http://$private_ipv4:2380"
    listen-client-urls: "http://0.0.0.0:2379,http://0.0.0.0:4001"
    listen-peer-urls: "http://$private_ipv4:2380,http://$private_ipv4:7001"
  fleet:
    public-ip: "$private_ipv4"
    metadata: "region=us-west"
  units:
    - name: "etcd2.service"
      command: "start"
    - name: "fleet.service"
      command: "start"

以下是来自具有公共 IP 的成员的错误

error #0: client: etcd member https://discovery.etcd.io returns server error [Gateway Timeout]
waiting for other nodes: error connecting to https://discovery.etcd.io, retrying in 4m16s
found self ae44c4332ec3c211 in the cluster
found 1 peer(s), waiting for 4 more

其他 4 名成员没有走得那么远

listening for peers on http://10.0.0.50:2380
listening for peers on http://10.0.0.50:7001
listening for client requests on http://0.0.0.0:2379
listening for client requests on http://0.0.0.0:4001
etcd2.service: Main process exited, code=exited, status=1/FAILURE
Failed to start etcd2.
etcd2.service: Unit entered failed state.
etcd2.service: Failed with result 'exit-code'.

安全组入站规则

Custom TCP 7001  VPC subnet
SSH    TCP 22    0.0.0.0/0
Custom TCP 4001  VPC subnet
Custom TCP 2379  VPC subnet
Custom TCP 2380  VPC subnet

我已经在 CoreOS 稳定通道和 alpha 通道中测试过了

答案1

我最近遇到了同样的问题。看起来 etcd2 并不像 VPC 中的 Internet 网关那样需要公共地址。文档文档说:

确保子网中的实例具有公有 IP 地址或弹性 IP 地址。

答案2

我使用相同的设置启动了集群,只是在创建实例时启用了“自动分配公共 IP”,然后一切刚刚有效™

我不确定为什么每个成员都需要一个公共 IP,因为他们只在网络内宣传他们的 $private_ipv4。

- - - 编辑 - - -

我发现通过自动分配公共 IP 来“修复”的问题,现在它实际上可以访问互联网(https 443)

现在我知道了这一点,我只需将所有集群成员放在连接到 80,443 的 NAT 的私有子网中,它现在就可以工作了。

相关内容