使用kops在AWS搭建集群后如何获取永久证书访问kubectl
kops AWS集群获取永久访问权限的解决方案
过期原因
你当前使用的kubeconfig存在有效期,通常是两种情况导致:
- 配置中使用了AWS IAM生成的临时访问凭证,最长有效期不超过12小时
- kops默认生成的管理员客户端TLS证书默认有效期为18个月,到期后自动失效
解决方案1:使用永久有效的服务账号凭证(推荐)
该方案生成的凭证只要不主动删除对应服务账号和密钥,就永久有效:
- 登陆到可正常访问集群的设备,首先创建管理员权限的服务账号:
kubectl create serviceaccount permanent-admin -n kube-system - 为服务账号绑定集群管理员权限:
kubectl create clusterrolebinding permanent-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:permanent-admin - 针对K8s 1.24及以上版本,需要手动创建服务账号对应的密钥(1.24以下版本可跳过该步):
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: permanent-admin-token namespace: kube-system annotations: kubernetes.io/service-account.name: permanent-admin type: kubernetes.io/service-account-token EOF
- 提取服务账号token:
kubectl get secret permanent-admin-token -n kube-system -o jsonpath='{.data.token}' | base64 --decode - 提取集群CA证书:
kubectl get secret permanent-admin-token -n kube-system -o jsonpath='{.data.ca\.crt}' - 提取集群API服务地址:
kubectl config view -o jsonpath='{.clusters[0].cluster.server}' - 将上述三个参数填入本地kubeconfig配置文件即可,无需再同步服务端的配置。
解决方案2:生成长期客户端TLS证书
如果希望继续使用证书认证的方式,可以通过kops命令生成有效期更长的kubeconfig:
- 执行以下命令生成有效期为10年的admin用户kubeconfig:
kops get kubeconfig --user=admin --lifetime=87600h - 将输出的配置替换本地kubeconfig即可,证书到期前重新执行该命令更新即可。
注意事项
- 永久权限凭证泄露会导致集群完全被控制,建议将本地kubeconfig文件权限设置为
chmod 600 ~/.kube/config,避免泄露 - 若不需要集群全量权限,可根据实际需求为服务账号绑定最小必要权限,降低安全风险
内容的提问来源于stack exchange,提问作者confusedWarrior
相关产品推荐
相关产品推荐

