Kubernetes(简称K8s)作为当前容器编排领域的标杆,已成为企业级应用部署的核心基础设施,而“登录K8s集群”是开发、运维人员日常操作的起点——无论是调试应用、管理资源,还是监控系统状态,都需要通过安全的认证流程访问集群,本文将系统介绍K8s集群登录的核心机制、常用工具及安全最佳实践,帮助读者构建高效、可靠的集群访问能力。
Kubernetes集群登录的核心:认证与授权
在讨论“登录”之前,需明确K8s的安全架构:认证(Authentication) 与 授权(Authorization) 是两大核心环节,只有通过认证验证用户身份,再通过授权确认操作权限,才能完成合法的集群访问。
认证:你是谁?
K8s支持多种认证方式,常见的包括:
(1)静态Token文件
早期K8s支持的简单认证方式,通过预定义的token.csv文件存储用户与Token的映射关系(格式:token,username,uid)。缺点:Token管理困难,无法动态更新,已逐渐被淘汰。
(2)X.509客户端证书
基于TLS证书的认证方式,用户通过CA签名的客户端证书证明身份,K8s的kube-apiserver会验证证书的有效性(有效期、签名、域名等)。适用场景:服务账户(ServiceAccount)或长期用户认证,安全性较高。
(3)静态密码文件
通过htpasswd工具生成用户密码文件,结合Basic认证。缺点:密码明文存储,易泄露,仅适合测试环境。
(4)Bearer Token(令牌)
最常用的认证方式之一,包括:
- ServiceAccount Token:K8s自动为每个ServiceAccount生成Secret(包含Token),Pod可通过挂载的Secret获取Token访问集群;
- 自定义Token:通过
kube-apiserver的tokenreviewAPI验证外部Token(如OIDC、JWT)。
(5)OIDC(OpenID Connect)
基于OAuth2.0的开放认证协议,可与企业现有身份系统(如Keycloak、Azure AD)集成,实现单点登录(SSO)。适用场景:多租户集群或企业级统一认证。
授权:你能做什么?
认证通过后,K8s需判断用户是否有权限执行操作,授权机制由插件实现,常见插件包括:
- Node Authorizer:限制Node节点对Pod的操作权限;
- RBAC(Role-Based Access Control):基于角色-权限的授权,是K8s最核心的授权方式(下文详述);
- ABAC(Attribute-Based Access Control):基于属性的动态授权(通过Policy文件配置);
- Webhook Authorizer:通过外部HTTP服务动态授权(如集成企业权限系统)。
常用登录工具与实战
登录K8s集群的核心工具是kubectl,此外还有Dashboard、kubelogin等辅助工具,以下重点介绍kubectl的使用及配置。
kubectl:集群操作的“瑞士军刀`
kubectl是K8s的命令行工具,通过kubeconfig文件(默认路径~/.kube/config)管理集群连接信息。kubeconfig包含三个核心组件:
- Cluster:集群信息(API Server地址、CA证书);
- User:用户认证信息(Token、证书路径);
- Context:上下文(关联Cluster与User,指定当前操作的集群和用户)。
(1)生成kubeconfig文件
以ServiceAccount Token为例,为用户dev-user生成kubeconfig:
# 1. 创建ServiceAccount和RoleBinding kubectl create sa dev-user kubectl create clusterrolebinding dev-user-editor --clusterrole=edit --serviceaccount=default:dev-user # 2. 获取Token(K8s v1.24+,Token可通过Secret手动创建) kubectl create token dev-user --duration=24h # 3. 生成kubeconfig kubectl config set-credentials dev-user --token=<TOKEN> kubectl config set-context dev-user-context --cluster=kubernetes --user=dev-user kubectl config use-context dev-user-context
(2)kubectl常用登录命令
- 查看当前Context:
kubectl config current-context - 切换集群:
kubectl config use-context <context-name> - 查看集群资源:
kubectl get pods --all-namespaces
Kubernetes Dashboard:可视化登录
Dashboard是K8s官方Web UI,适合非命令行操作用户。
(1)安装Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
(2)创建登录用户并获取Token
# 创建ServiceAccount和ClusterRoleBinding kubectl create sa dashboard-admin kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=default:dashboard-admin # 获取Token(用于登录Dashboard) kubectl create token dashboard-admin --duration=24h
(3)访问Dashboard
执行kubectl proxy后,通过浏览器访问http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/,输入Token即可登录。
kubelogin:OIDC认证工具
对于使用OIDC认证的集群,可通过kubelogin实现自动Token获取和SSO登录:
# 安装kubelogin go install github.com/int128/kubelogin/cmd/kubelogin@latest # 配置kubeconfig(启用OIDC插件) kubectl config set-credentials oidc-user --auth-provider=oidc --auth-provider-arg=client-id=<CLIENT_ID> --auth-provider-arg=client-secret=<CLIENT_SECRET> --auth-provider-arg=idp-issuer-url