在 CentOS 上搭建的 Kubernetes(k8s) 中,“设置权限”通常指 RBAC(基于角色的访问控制),包括:
下面按 常见使用场景 给你一套完整说明(CentOS 不影响 k8s 权限模型,主要是 kubectl + RBAC)。
K8s 权限由 4 个对象组成:
| 对象 | 作用 |
|---|---|
| Role | 某 Namespace 内权限 |
| ClusterRole | 集群级别权限 |
| RoleBinding | 把 Role 绑给用户/SA |
| ClusterRoleBinding | 把 ClusterRole 绑给用户/SA |
权限主体可以是:
kubectl create sa my-sa -n default
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
kubectl apply -f role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: ServiceAccount
name: my-sa
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
kubectl apply -f rolebinding.yaml
✅ Pod 中就能以 my-sa 访问 API
openssl genrsa -out user.key 2048
openssl req -new -key user.key -out user.csr -subj "/CN=user1"
openssl x509 -req -in user.csr \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial -out user.crt -days 365
kubectl config set-credentials user1 \
--client-certificate=user.crt \
--client-key=user.key
kubectl config set-context user1-context \
--cluster=kubernetes \
--user=user1
kubectl config use-context user1-context
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: user1-admin
subjects:
- kind: User
name: user1
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
⚠️ cluster-admin 是最高权限,生产慎用
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: dev-ns-binding
namespace: dev
subjects:
- kind: User
name: dev-user
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
✅ 用户只能访问 dev namespace
kubectl auth can-i get pods
kubectl auth can-i delete pods --namespace default
kubectl auth can-i "*" "*"
setenforce 0
或配置 SELinux 策略firewall-cmd --add-port=6443/tcp --permanent
firewall-cmd --reload
你是想:
我可以直接给你 可用 YAML 模板。