开发者社区 问答 正文

阿里云的centos主机主从节点etcd通信问题Socket error

大家好, 问题出现在用阿里云ECS搭建kubernetes集群环境时候, 我这里用三台阿里云centos服务器分别做1个master和2个node节点; node节点的kube-calico服务连接master节点的etcd时候报错: kube-calico bird: Mesh_172_26_178_195: Socket error: bind: Address not available [closed];下面是主节点etcd配置,通过错误大概知道是从节点跟主节点的连接问题;有一点应该注意的是,下面etcd中--listen-client-urls的IP(172.26.178.195)是master节点的内网IP,因为如果写公网IP会报错,但是这样的话,从节点就会报Socket error: bind: Address not available [closed];

master上面的etcd配置: Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target Documentation=https://github.com/coreos

[Service] Type=notify WorkingDirectory=/var/lib/etcd/ ExecStart=/root/kubernetes/bin/etcd
--name=172.26.178.195
--listen-client-urls=http://172.26.178.195:2379,http://127.0.0.1:2379
--advertise-client-urls=http://172.26.178.195:2379
--data-dir=/var/lib/etcd Restart=on-failure RestartSec=5 LimitNOFILE=65536

其他信息: master: Calico process is running.

IPv4 BGP status +----------------+-------------------+-------+----------+---------+ | PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO | +----------------+-------------------+-------+----------+---------+ | 47.105.223.158 | node-to-node mesh | start | 02:49:30 | Connect | | 47.105.189.58 | node-to-node mesh | start | 02:49:30 | Connect | +----------------+-------------------+-------+----------+---------+

IPv6 BGP status No IPv6 peers found.

node: Calico process is running.

IPv4 BGP status +----------------+-------------------+-------+----------+--------------------------------+ | PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO | +----------------+-------------------+-------+----------+--------------------------------+ | 47.105.189.58 | node-to-node mesh | start | 03:54:15 | Active Socket: Connection | | | | | | closed | | 172.26.178.195 | node-to-node mesh | start | 03:54:15 | Active Socket: Connection | | | | | | closed | +----------------+-------------------+-------+----------+--------------------------------+

IPv6 BGP status No IPv6 peers found.

展开
收起
游客cwmzfcta52sue 2019-12-18 23:57:43 1583 分享
分享
版权
举报
阿里云 AI 助理回答

根据您提供的信息,问题出在Calico网络组件尝试与etcd通信时,无法绑定到指定的地址。错误提示Socket error: bind: Address not available [closed]表明Calico服务在node节点上尝试使用内网IP(172.26.178.195)去连接master节点上的etcd服务,但这个操作在node节点上显然是不可行的,因为该IP是master节点的内网IP。

解决这个问题的关键在于正确配置Calico以确保它能够通过正确的地址访问etcd。以下是一些建议:

  1. 修改Calico配置:确保Calico配置文件中(通常是calico.yaml或类似的配置文件),etcd的endpoints指向的是master节点的可访问地址。如果您的集群内部可以解析主机名,考虑使用主机名而不是直接写IP地址。例如,如果您有DNS或者hosts文件设置,可以将etcd的地址设为etcd.service.consul之类的域名。如果是多节点部署,确保所有Calico实例都指向正确的etcd集群地址列表。

  2. 网络策略和安全组:检查阿里云ECS实例的安全组规则,确保从node节点到master节点的etcd端口(默认2379)是开放的。这包括TCP 2379端口用于客户端通信。

  3. 使用私有IP进行通信:由于您提到公网IP配置会报错,确保整个Kubernetes集群内部通信使用的是VPC内的私有IP。这意味着在Calico配置中,应该使用master节点的私有IP,并且确保node节点能够通过VPC内的路由规则访问到这个地址。

  4. 重新审视Calico的BGP配置:Calico使用BGP协议进行网络配置传播,确保BGP配置正确地指定了正确的peer IP地址。对于node-to-node mesh,Calico通常会自动发现并配置这些连接,但如果使用了特定的配置覆盖默认行为,需要确保这些配置反映了实际的网络拓扑。

  5. 日志分析:查看Calico和etcd的日志文件,可能会提供更多关于为何连接失败的具体原因。这些日志通常位于/var/log/calico/ 或者 /var/log/etcd/ 目录下,具体路径可能因安装方式而异。

综上所述,调整Calico配置以使用正确的etcd访问地址,并确保网络层面没有阻止必要的通信,应该是解决此问题的方向。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答