API-Server:本质是Web服务,使用HTTPS协议,
用户
user Account:普通用户;私钥 ->CA ->
ServiceAccount:让Pod和ApiServer通信使用的用户
角色与授权
角色:
①Role:局部的角色,只对某个命名空间内生效;
②ClusterRole:全局的角色,所有命名空间生效;
权限:
①只读:查询权限
get(查询单个资源)、list(列出资源清单)、watch(实时监听资源变化);
②只写:修改创建权限
create(创建)、update(更新)、patch(部分更新);
③删除权限:
delete(删除单个资源)、deletecollection(删除资源集合,如所有Pod);
资源:
限定权限仅作用于"特定名称的资源",比如只允许修改名为"prod-app"的Deployment,相当于"说明书的附加条件"。
用户与角色绑定
RoleBinding:局部绑定
分配Role权限给命名空间内部用户;
让ClusterRole的权限仅在单个命名空间生效;
ClusterRoleBinding:给用户\用户组分配集群级权限(运维管理原)
案例
客户端证书认证(推荐)
客户端证书认证是Kubernetes中最安全、最常用的方式(类似HTTPS双向认证)。流程为:生成用户证书 → 用集群CA签名 → 配置用户通过证书访问API Server。
步骤1:生成用户私钥和证书签名请求(CSR)
使用openssl工具生成用户私钥和CSR(证书签名请求),需指定用户名(CN)和所属组(O,可选)。
示例:创建一个名为dev-user、所属组为dev-group的用户
# 生成私钥(dev-user.key)
openssl genrsa -out dev-user.key 2048
# 生成CSR(dev-user.csr),CN为用户名,O为组(可多个,用逗号分隔)
openssl req -new -key dev-user.key -out dev-user.csr -subj "/CN=dev-user/O=dev-group"
步骤2:用集群CA签名证书
Kubernetes集群的CA证书和私钥默认存储在/etc/kubernetes/pki/(kubeadm部署),需用CA签名用户的CSR,生成可被API Server信任的证书。
# 用CA签名CSR,生成用户证书(dev-user.crt),有效期365天
openssl x509 -req -in dev-user.csr \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-out dev-user.crt \
-days 365
步骤3:配置kubeconfig文件
用户通过kubeconfig文件管理集群、用户、认证信息。需将生成的证书配置到kubeconfig中。
# 1. 设置集群信息(指向API Server,信任CA)
kubectl config set-cluster kubernetes \
--server=https://192.168.146.10:6443 \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true
# 2. 设置用户信息(关联证书和私钥)
kubectl config set-credentials dev-user \
--client-certificate=./dev-user.crt \
--client-key=./dev-user.key \
--embed-certs=true
# 3. 设置上下文(绑定集群和用户)
kubectl config set-context dev-user-context \
--cluster=kubernetes \
--user=dev-user
# 4. 切换到该上下文
kubectl config use-context dev-user-context