Bitbucket Pipeline部署EKS时认证失败问题求助
排查Bitbucket Pipeline EKS Kubectl认证失败问题
可能的原因及排查步骤
1. 校验AWS凭证的权限覆盖度
虽然你确认凭证有效,但需验证两项关键权限:
- 执行
aws eks describe-cluster --name <集群名称>,确认能正常返回集群信息(此操作需要eks:DescribeCluster权限,是生成kubeconfig的前提) - 检查K8s集群中,该AWS IAM用户/角色是否绑定了对应RBAC权限(比如目标namespace的编辑权限或集群级
cluster-admin权限)
2. 对比kubeconfig生成的完整性
在Pipeline中添加调试步骤,打印生成的kubeconfig内容,和本地手动生成的版本对比:
- step: name: Debug Kubeconfig image: atlassian/aws-eks-kubectl-run:2.2.1 script: - aws eks update-kubeconfig --name <你的集群名称> - cat ~/.kube/config
重点核对:
users.user.exec.args是否包含正确的集群ARN和区域信息users.user.exec.command是否为aws-iam-authenticator或aws eks get-token(不同EKS版本的认证命令有差异)
3. 检查内置AWS CLI版本兼容性
atlassian/aws-eks-kubectl-run:2.2.1内置的AWS CLI版本可能偏旧,导致生成的kubeconfig不符合当前EKS要求。可在Pipeline中添加版本检查:
script: - aws --version
如果版本低于2.x,建议升级AWS CLI或更换包含新版CLI的kubectl镜像。
4. 确认EKS集群的IAM认证映射
检查EKS集群是否配置了IAM OIDC提供商,且你的AWS凭证对应的IAM实体已正确映射到K8s权限:
- 执行
aws eks describe-cluster --name <集群名称> --query "cluster.identity.oidc.issuer",确认OIDC提供商存在 - 查看
kube-system下的aws-authConfigMap,确认你的IAM用户ARN在mapUsers列表中,并绑定了合适的权限组(比如system:masters):
kubectl get configmap aws-auth -n kube-system -o yaml
5. 验证Pipeline环境变量传递
确保AWS凭证和区域变量在Pipeline中正确注入:
script: - echo "AWS_ACCESS_KEY_ID已设置: ${AWS_ACCESS_KEY_ID:+是}" - echo "AWS_SECRET_ACCESS_KEY已设置: ${AWS_SECRET_ACCESS_KEY:+是}" - echo "AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION"
注意集群所在区域必须和AWS_DEFAULT_REGION一致。
6. 绕开update-kubeconfig,手动测试认证
跳过自动生成kubeconfig的步骤,手动生成token并配置kubectl,验证认证是否可行:
script: - export AWS_REGION=<你的集群区域> - export CLUSTER_NAME=<你的集群名称> - export TOKEN=$(aws eks get-token --cluster-name $CLUSTER_NAME --query 'status.token' --output text) - kubectl config set-credentials aws-user --token=$TOKEN - kubectl config set-cluster $CLUSTER_NAME --server=$(aws eks describe-cluster --name $CLUSTER_NAME --query 'cluster.endpoint' --output text) --certificate-authority-data=$(aws eks describe-cluster --name $CLUSTER_NAME --query 'cluster.certificateAuthority.data' --output text) - kubectl config set-context $CLUSTER_NAME --cluster=$CLUSTER_NAME --user=aws-user - kubectl config use-context $CLUSTER_NAME - kubectl get nodes # 测试认证是否成功
如果以上步骤仍未解决问题,需排查Bitbucket Pipeline的网络环境,确认是否能正常访问EKS集群的API端点,是否存在防火墙或代理限制。
内容的提问来源于stack exchange,提问作者Siddalingesh Angadi
相关产品推荐
相关产品推荐

