kubeadm部署下,未配置Service的ETCD集群如何被K8S API Server访问?
K8S API Server 访问无Service/Ingress的ETCD集群(kubeadm部署场景)
在kubeadm默认部署的场景下,即便没有为ETCD创建Service或Ingress,API Server依然可以通过以下两种核心方式访问ETCD集群:
1. 直接通过节点IP+主机端口访问(kubeadm默认生产方案)
kubeadm部署ETCD Pod时,默认会配置hostNetwork: true,让ETCD直接使用宿主机网络,绑定节点的IP地址和默认TLS端口2379。
API Server的启动参数中会明确指定ETCD集群所有节点的访问地址,格式示例:
--etcd-servers=https://192.168.1.10:2379,https://192.168.1.11:2379
同时,API Server还会通过以下参数配置TLS认证信息,确保与ETCD的安全通信:
--etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
这些证书文件由kubeadm自动生成,并通过Volume挂载到API Server Pod中。
2. 直接访问ETCD Pod的IP或Pod DNS(临时调试场景)
如果是临时调试或测试,API Server Pod可以直接通过ETCD Pod的IP地址访问,格式为https://<etcd-pod-ip>:2379。
另外,在同一集群内,还可以通过Pod的全限定域名(FQDN)访问,格式示例:
https://etcd-node01.kube-system.pod.cluster.local:2379
不过这种方式不适合生产环境,因为Pod重启后IP或名称可能变化,无法保证服务的稳定性。
需要注意的是,无论哪种方式,API Server都必须持有ETCD CA颁发的客户端证书,才能通过ETCD的TLS认证。
内容的提问来源于stack exchange,提问作者김민우
相关产品推荐
相关产品推荐

