无需Token从Linux登录K8s,如何通过Shell脚本访问部署文件并更新副本集?
无需Token登录Kubernetes的可行方法
1. 客户端证书认证
Kubernetes支持通过客户端证书完成身份验证,你可以在Linux服务器上配置kubeconfig文件,直接引用证书文件实现无Token登录:
- 从集群管理员处获取三个核心文件:
client.crt(客户端证书)、client.key(客户端私钥)、ca.crt(集群CA证书) - 在服务器上创建
~/.kube/config文件,写入以下配置(替换路径和集群地址):
apiVersion: v1 clusters: - cluster: certificate-authority: /opt/k8s/certs/ca.crt server: https://192.168.1.100:6443 name: prod-cluster contexts: - context: cluster: prod-cluster user: deploy-user name: prod-context current-context: prod-context users: - name: deploy-user user: client-certificate: /opt/k8s/certs/client.crt client-key: /opt/k8s/certs/client.key
- 给私钥设置严格权限:
chmod 600 /opt/k8s/certs/client.key,之后直接运行kubectl命令即可操作集群,无需输入Token。
2. ServiceAccount密钥文件自动加载
如果服务器需要访问集群,可利用ServiceAccount的密钥文件实现无手动Token输入的认证:
- 创建或选择一个具备副本集更新权限的ServiceAccount,比如
rs-update-sa - 获取该ServiceAccount关联的密钥名称:
kubectl get serviceaccount rs-update-sa -o jsonpath='{.secrets[0].name}' - 导出密钥中的CA证书、Token文件和命名空间:
kubectl get secret <secret-name> -o jsonpath='{.data.ca\.crt}' | base64 -d > /opt/k8s/sa/ca.crt kubectl get secret <secret-name> -o jsonpath='{.data.token}' | base64 -d > /opt/k8s/sa/token - 在kubeconfig中配置Token文件引用:
这种方式无需手动输入Token,users: - name: sa-update-user user: tokenFile: /opt/k8s/sa/tokenkubectl会自动读取文件内容完成认证。
3. Kerberos集成认证(集群需支持)
如果你的Kubernetes集群配置了Kerberos认证体系,可在Linux服务器上配置Kerberos客户端实现无Token登录:
- 安装Kerberos客户端工具:Debian/Ubuntu用
apt-get install krb5-user,RHEL/CentOS用yum install krb5-workstation - 修改
/etc/krb5.conf,配置KDC服务器地址和域信息 - 获取Kerberos票据:
kinit k8s-deploy@YOUR-DOMAIN.COM - 在kubeconfig中配置Kerberos认证:
后续运行users: - name: kerberos-deploy-user user: auth-provider: name: kerberoskubectl时会自动使用Kerberos票据完成认证,无需输入Token。
4. OIDC自动刷新认证(集群需支持)
若集群支持OpenID Connect(OIDC),可通过配置OIDC客户端实现自动Token刷新,避免手动输入:
- 安装OIDC辅助工具(比如
oidc-login) - 在kubeconfig中配置OIDC认证参数:
首次认证后会生成刷新令牌文件,后续users: - name: oidc-deploy-user user: auth-provider: name: oidc config: client-id: "k8s-deploy-client" client-secret: "xxxxxx" idp-issuer-url: "https://your-oidc-server.com" refresh-token-file: /opt/k8s/oidc/refresh-tokenkubectl会自动刷新Token,无需手动干预。
内容的提问来源于stack exchange,提问作者Prarthna Maurya
相关产品推荐
相关产品推荐

