温馨提示×

centos k8s怎么设置权限

小樊
39
2026-10-18 01:29:50
栏目: 智能运维

在 CentOS 上搭建的 Kubernetes(k8s) 中,“设置权限”通常指 RBAC(基于角色的访问控制),包括:

  • 给用户 / 服务账号分配权限
  • 限制 Namespace 访问
  • 给 Pod 使用 ServiceAccount
  • kubectl 访问权限

下面按 常见使用场景 给你一套完整说明(CentOS 不影响 k8s 权限模型,主要是 kubectl + RBAC)。


一、K8s 权限核心概念(先理解)

K8s 权限由 4 个对象组成:

对象 作用
Role 某 Namespace 内权限
ClusterRole 集群级别权限
RoleBinding 把 Role 绑给用户/SA
ClusterRoleBinding 把 ClusterRole 绑给用户/SA

权限主体可以是:

  • User(普通用户,通常由证书/OIDC)
  • Group
  • ServiceAccount(Pod 最常用)

二、给 ServiceAccount 设置权限(最常见)

1️⃣ 创建 ServiceAccount

kubectl create sa my-sa -n default

2️⃣ 创建 Role(例如只允许读取 Pod)

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

3️⃣ 绑定 Role 到 ServiceAccount

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


三、给“普通用户”设置 kubectl 权限

方式一:证书用户(CentOS 常用)

1️⃣ 生成用户证书

openssl genrsa -out user.key 2048
openssl req -new -key user.key -out user.csr -subj "/CN=user1"

2️⃣ 用 k8s CA 签发

openssl x509 -req -in user.csr \
  -CA /etc/kubernetes/pki/ca.crt \
  -CAkey /etc/kubernetes/pki/ca.key \
  -CAcreateserial -out user.crt -days 365

3️⃣ 配置 kubectl

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

4️⃣ 绑定权限(ClusterRole)

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 是最高权限,生产慎用


四、Namespace 隔离权限(推荐)

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 "*" "*"

六、CentOS 常见坑

  1. kubectl 权限 ≠ Linux 权限
    • CentOS 用户权限不影响 k8s
  2. API Server 端口
    • 6443 要通
  3. SELinux
    setenforce 0
    
    或配置 SELinux 策略
  4. 防火墙
    firewall-cmd --add-port=6443/tcp --permanent
    firewall-cmd --reload
    

七、你可以告诉我

你是想:

  • ✅ 给 Pod 设置权限?
  • ✅ 给 开发/运维人员 设置 kubectl 权限?
  • ✅ 多租户 Namespace 隔离?
  • ✅ 使用 Kubernetes Dashboard 权限?

我可以直接给你 可用 YAML 模板。

0 踩