kubeconfig 文件和 Service Account token 是 Kubernetes 集群中最常用的两种身份认证方式,合理配置可兼顾安全性与易用性,适用于多种管理和访问场景。
在启用了 TLS 的 Kubernetes 集群中,身份认证是与集群交互的重要环节。使用 kubeconfig(基于证书)和 Service Account token 是最常用和通用的两种认证方式,广泛应用于 Kubernetes Dashboard 登录、kubectl 操作等场景。
本文将通过实际示例详细介绍这两种认证方式:
kubeconfig 文件是 Kubernetes 客户端(如 kubectl)与集群安全通信的核心配置文件,支持基于证书的身份认证。
关于如何生成 kubeconfig 文件,请参考 创建用户认证授权的 kubeconfig 文件。
在 Kubernetes Dashboard 登录场景下,kubeconfig 文件需要特殊处理。以 brand 命名空间下的 brand 用户为例,生成的 brand.kubeconfig 文件需手动添加 token 字段。
{width=1798 height=1168}
注意事项:
token 字段,否则认证失败token 字段Service Account token 认证适用于自动化脚本、第三方工具和 Dashboard 等场景,便于权限隔离和细粒度控制。
如需创建具有集群最高权限的管理员 token,需新建 ServiceAccount 并绑定 cluster-admin 角色。
以下为配置示例(admin-role.yaml):
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
应用配置:
kubectl apply -f admin-role.yaml
获取 ServiceAccount token 有多种方式,适配不同 Kubernetes 版本。
kubectl -n kube-system get secret $(kubectl -n kube-system get sa admin-user -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d
Kubernetes 1.24 起,ServiceAccount 不再自动创建长期 token,推荐使用:
kubectl -n kube-system create token admin-user
如需长期 token,可手动创建 Secret:
apiVersion: v1
kind: Secret
metadata:
name: admin-user-secret
namespace: kube-system
annotations:
kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-token
获取 token:
kubectl -n kube-system get secret admin-user-secret -o jsonpath='{.data.token}' | base64 -d
为指定命名空间的用户分配管理权限:
NAMESPACE="your-namespace"
ROLEBINDING_NAME="namespace-admin"
kubectl create rolebinding $ROLEBINDING_NAME \
--clusterrole=admin \
--serviceaccount=$NAMESPACE:default \
--namespace=$NAMESPACE
获取该命名空间的 token:
kubectl -n $NAMESPACE get secret $(kubectl -n $NAMESPACE get sa default -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d
在实际使用 kubeconfig 和 token 认证时,需关注以下细节以确保安全与兼容性。
Kubernetes Secret 中存储的 token 是 base64 编码,必须解码后才能使用。
| 系统 | 解码命令示例 |
|---|---|
| Linux | echo "encoded-token" \| base64 -d |
| macOS | echo "encoded-token" \| base64 -D |
| 在线工具 | base64decode.org |
cluster-admin:集群最高权限admin:命名空间管理权限kubeconfig 文件和 Service Account token 是 Kubernetes 集群中最常用的身份认证方式。通过合理配置和权限管理,可满足多样化的访问需求,兼顾安全性与易用性。建议结合实际场景选择合适的认证方式,并遵循最小权限和定期轮换等安全最佳实践。