求助:生成不依赖AWS IAM的EKS静态kubeconfig配置方法
生成不依赖AWS IAM的EKS静态kubeconfig完整流程
核心思路
通过Kubernetes原生的ServiceAccount+RBAC机制生成静态kubeconfig,完全绕开AWS IAM认证,步骤如下:
1. 创建专用ServiceAccount
先创建一个用于静态认证的ServiceAccount(示例命名为eks-static-user,可自定义):
apiVersion: v1 kind: ServiceAccount metadata: name: eks-static-user namespace: default
执行创建命令:
kubectl apply -f sa.yaml
2. 绑定ClusterRole(配置权限)
根据需求给ServiceAccount分配权限,示例绑定cluster-admin(全集群权限,生产环境建议自定义最小权限的ClusterRole):
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks-static-user-cluster-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: eks-static-user namespace: default
执行绑定命令:
kubectl apply -f crb.yaml
3. 提取ServiceAccount的认证信息
EKS会自动为ServiceAccount生成包含token和CA证书的Secret,用以下命令提取关键信息:
# 获取对应Secret名称 SECRET_NAME=$(kubectl get sa eks-static-user -n default -o jsonpath='{.secrets[0].name}') # 解码token(直接可用) KUBE_TOKEN=$(kubectl get secret $SECRET_NAME -o jsonpath='{.data.token}' | base64 -d) # 提取CA证书(base64编码格式,直接填入kubeconfig) KUBE_CA_CERT=$(kubectl get secret $SECRET_NAME -o jsonpath='{.data.ca\.crt}') # 获取EKS集群API服务器地址 EKS_API_SERVER=$(kubectl cluster-info | grep 'Kubernetes control plane' | awk '{print $NF}')
4. 构造静态kubeconfig文件
创建static-kubeconfig.yaml,替换以下变量为实际值:
apiVersion: v1 kind: Config clusters: - cluster: certificate-authority-data: ${KUBE_CA_CERT} server: ${EKS_API_SERVER} name: eks-cluster contexts: - context: cluster: eks-cluster user: eks-static-user name: eks-static-context current-context: eks-static-context users: - name: eks-static-user user: token: ${KUBE_TOKEN}
也可以用环境变量直接生成:
cat << EOF > static-kubeconfig.yaml apiVersion: v1 kind: Config clusters: - cluster: certificate-authority-data: $KUBE_CA_CERT server: $EKS_API_SERVER name: eks-cluster contexts: - context: cluster: eks-cluster user: eks-static-user name: eks-static-context current-context: eks-static-context users: - name: eks-static-user user: token: $KUBE_TOKEN EOF
5. 验证kubeconfig可用性
用生成的静态kubeconfig测试集群访问:
kubectl --kubeconfig=./static-kubeconfig.yaml get nodes
关于你用到的脚本可能遗漏的环节
你提到的脚本大概率没帮你完成RBAC权限绑定步骤,或者默认使用的ServiceAccount权限不足。另外,脚本可能没有正确提取EKS集群的CA证书和API地址,导致kubeconfig无法正常连接集群。按照上面的完整流程补全配置后,应该就能正常生成可用的静态kubeconfig。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

