大家好, 问题出现在用阿里云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.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的信息,问题出在Calico网络组件尝试与etcd通信时,无法绑定到指定的地址。错误提示Socket error: bind: Address not available [closed]
表明Calico服务在node节点上尝试使用内网IP(172.26.178.195)去连接master节点上的etcd服务,但这个操作在node节点上显然是不可行的,因为该IP是master节点的内网IP。
解决这个问题的关键在于正确配置Calico以确保它能够通过正确的地址访问etcd。以下是一些建议:
修改Calico配置:确保Calico配置文件中(通常是calico.yaml
或类似的配置文件),etcd的endpoints指向的是master节点的可访问地址。如果您的集群内部可以解析主机名,考虑使用主机名而不是直接写IP地址。例如,如果您有DNS或者hosts文件设置,可以将etcd的地址设为etcd.service.consul
之类的域名。如果是多节点部署,确保所有Calico实例都指向正确的etcd集群地址列表。
网络策略和安全组:检查阿里云ECS实例的安全组规则,确保从node节点到master节点的etcd端口(默认2379)是开放的。这包括TCP 2379端口用于客户端通信。
使用私有IP进行通信:由于您提到公网IP配置会报错,确保整个Kubernetes集群内部通信使用的是VPC内的私有IP。这意味着在Calico配置中,应该使用master节点的私有IP,并且确保node节点能够通过VPC内的路由规则访问到这个地址。
重新审视Calico的BGP配置:Calico使用BGP协议进行网络配置传播,确保BGP配置正确地指定了正确的peer IP地址。对于node-to-node mesh,Calico通常会自动发现并配置这些连接,但如果使用了特定的配置覆盖默认行为,需要确保这些配置反映了实际的网络拓扑。
日志分析:查看Calico和etcd的日志文件,可能会提供更多关于为何连接失败的具体原因。这些日志通常位于/var/log/calico/ 或者 /var/log/etcd/ 目录下,具体路径可能因安装方式而异。
综上所述,调整Calico配置以使用正确的etcd访问地址,并确保网络层面没有阻止必要的通信,应该是解决此问题的方向。