无法通过AWS SSM Run Command发送kubectl命令的问题排查
问题分析与解决方案
报错The connection to the server localhost:8080 was refused说明堡垒机上的kubectl没有正确配置EKS集群的连接信息,默认尝试连接本地Kubernetes节点(不存在),而非你的EKS集群。以下是需要补充的配置步骤:
1. 确保堡垒机具备访问EKS的IAM权限
- 如果堡垒机是EC2实例,需要为其附加IAM实例角色,角色需包含以下权限(可通过自定义策略或AmazonEKSClusterPolicy托管策略实现):
eks:DescribeCluster:用于获取EKS集群的端点和证书数据sts:AssumeRole(若EKS集群使用IAM角色进行授权)
- 若使用IAM用户凭证,需在堡垒机上配置
aws configure(推荐用实例角色更安全)
2. 在堡垒机上生成EKS的kubeconfig
kubectl依赖~/.kube/config文件获取集群连接信息,你需要在执行kubectl命令前先生成该配置:
- 直接在SSM命令中添加生成kubeconfig的步骤,修改后的命令如下:
aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids i-0####### --parameters commands="aws eks update-kubeconfig --name <你的EKS集群名称> --region ap-southeast-3 && kubectl get pods -n app" --region ap-southeast-3 - 或者提前在堡垒机上手动执行
aws eks update-kubeconfig --name <集群名> --region <区域>,后续SSM命令可直接执行kubectl
3. 验证SSM执行命令的用户权限
SSM的send-command默认以root用户执行(可通过runAsUser参数指定其他用户),需确保执行用户的~/.kube/config文件存在且可读:
- 如果提前生成了kubeconfig,确认文件路径为
/root/.kube/config(若用root)或对应用户的home目录下 - 若指定其他用户执行,需确保该用户有权限读取kubeconfig文件
4. 可选:直接指定kubeconfig路径执行命令
如果不想生成默认的~/.kube/config,可以在kubectl命令中通过--kubeconfig参数指定配置文件路径:
kubectl get pods -n app --kubeconfig /path/to/your/kubeconfig
内容的提问来源于stack exchange,提问作者Gilang Samudra Kuswana
相关产品推荐
相关产品推荐

