使用Lens桌面连接AWS上kubeadm部署的K8s集群失败:无法获取/version接口
Lens桌面连接AWS上kubeadm部署的K8s集群失败:无法获取/version接口
看起来你猜得没错——问题确实出在KubeConfig里用了Master节点的私有IP上!AWS的私有IP只能在VPC内部访问,你Windows上的Lens处于公网环境,自然连不通VPC内的节点,才会出现连接超时的报错:
E0607 15:01:56.696813 3604 proxy_server.go:147] Error while proxying request: dial tcp :6443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed...
我给你几个实用的解决方案,你可以根据自己的场景选择:
方案一:用SSH隧道端口转发(推荐,无需修改集群配置)
这个方法不用改动K8s集群的任何设置,通过SSH把本地的6443端口转发到Master节点的私有IP上:
- 打开Windows的命令提示符或者PowerShell,执行以下命令(替换成你的AWS密钥文件路径和Master节点的公网IP):
(注意:如果你的Master节点用的不是ec2-user账号,换成对应的用户名,比如ubuntu)ssh -i "你的AWS密钥文件.pem" -L 6443:<Master私有IP>:6443 ec2-user@<Master公网IP> - 保持这个SSH会话窗口打开,不要关闭
- 修改你的KubeConfig文件里的
server字段为:https://localhost:6443 - 重新在Lens里加载这个KubeConfig,应该就能正常连接了
注意:要确保AWS安全组允许你的本地IP访问Master节点的22端口(SSH端口)
方案二:修改Kubeadm的APIServer绑定公网IP
如果你希望直接通过公网IP访问集群,可以修改APIServer的配置:
- 登录到Master节点,编辑APIServer的静态Pod配置文件:
sudo nano /etc/kubernetes/manifests/kube-apiserver.yaml - 找到
command字段下的--bind-address=<私有IP>,把它改成Master节点的公网IP,或者改成0.0.0.0(不推荐,因为会让APIServer监听所有网卡,安全性低) - 同时确保AWS安全组开放6443端口,并且只允许你的本地公网IP访问(不要开放给0.0.0.0/0,避免被攻击)
- 修改KubeConfig里的
server字段为https://<Master公网IP>:6443 - 保存配置后,Kubelet会自动重启APIServer Pod,等待几分钟后再用Lens连接
方案三:使用Bastion主机做跳板(适合集群在私有子网的场景)
如果你的Master节点在私有子网没有公网IP,需要先通过Bastion主机(有公网IP的跳板机)中转:
- 先建立到Bastion主机的SSH隧道,同时转发到Master节点的6443端口:
ssh -i "Bastion密钥文件.pem" -L 6443:<Master私有IP>:6443 ec2-user@<Bastion公网IP> - 同样保持SSH会话打开,修改KubeConfig的
server为https://localhost:6443,再用Lens连接
最后再给你几个检查点,确保万无一失:
- 确认Master节点的安全组规则是否正确,允许对应的端口(22或6443)被你的本地IP访问
- 检查KubeConfig里的证书数据(client-certificate-data、client-key-data)是否和Master节点上的一致,有没有过期
- 如果用端口转发,确认本地的6443端口没有被其他程序占用(可以用
netstat -ano | findstr :6443检查)
备注:内容来源于stack exchange,提问作者ajay_edupuganti
相关产品推荐
相关产品推荐

