温馨提示×

centos k8s如何设置权限

小樊
58
2026-08-04 21:42:43
栏目: 智能运维

在 CentOS 上部署 Kubernetes(k8s) 时,“设置权限”通常涉及 Linux 系统权限、kubectl 访问权限、RBAC(K8s 权限控制) 等多个层面。下面按最常见的使用场景给你一个完整说明。


一、CentOS 系统层面权限(运行 k8s 前)

1️⃣ 使用 root 或 sudo 用户

K8s 安装和初始化通常需要 root 权限:

sudo -i

或确保当前用户在 wheel 组:

usermod -aG wheel youruser

2️⃣ 关闭 SELinux(常见做法)

SELinux 会影响 kubelet 和容器运行:

setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

3️⃣ 防火墙 / 端口权限

如果是多节点集群,需要放行端口:

systemctl stop firewalld
systemctl disable firewalld

或按需放行:

firewall-cmd --add-port=6443/tcp --permanent
firewall-cmd --reload

二、kubectl 访问权限(kubeconfig)

1️⃣ 默认 admin 权限

kubeadm init 后会生成 admin 配置:

mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

✅ 此用户拥有 集群最高权限


2️⃣ 给普通用户 kubectl 权限

如果你想让某个用户能执行 kubectl:

方法一:复制 admin.conf(不推荐生产)

scp /etc/kubernetes/admin.conf user@node:/home/user/.kube/config

⚠️ 风险:等同于集群管理员


三、Kubernetes RBAC 权限(重点 ✅)

K8s 推荐使用 RBAC 控制权限,而不是共享 admin 配置。


四、RBAC 权限设置示例

场景 1:给某个用户「某个 namespace 的管理员权限」

1️⃣ 创建 ServiceAccount

apiVersion: v1
kind: ServiceAccount
metadata:
  name: dev-user
  namespace: dev
kubectl apply -f sa.yaml

2️⃣ 创建 Role(namespace 级别)

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: dev
  name: dev-admin
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]

3️⃣ 绑定 Role

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dev-admin-binding
  namespace: dev
subjects:
- kind: ServiceAccount
  name: dev-user
  namespace: dev
roleRef:
  kind: Role
  name: dev-admin
  apiGroup: rbac.authorization.k8s.io

✅ 该 SA 只能管理 dev namespace


场景 2:给某个用户「集群管理员权限」

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cluster-admin-binding
subjects:
- kind: User
  name: zhangsan
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

⚠️ 等同于 admin.conf


五、kubeconfig 方式授权(推荐)

1️⃣ 为 ServiceAccount 生成 kubeconfig

TOKEN=$(kubectl -n dev get secret \
  $(kubectl -n dev get sa dev-user -o jsonpath='{.secrets[0].name}') \
  -o jsonpath='{.data.token}' | base64 -d)

然后生成 kubeconfig(或使用脚本自动生成)。


六、常见权限问题排查

1️⃣ Forbidden 错误

Error: pods is forbidden: User "xxx" cannot get resource "pods"

✅ 说明 RBAC 权限不足

查看权限:

kubectl auth can-i get pods
kubectl auth can-i "*" "*"

2️⃣ 查看当前用户

kubectl config view
kubectl config current-context

七、总结(快速对照表)

需求 推荐方式
系统安装 k8s root / sudo
kubectl 访问 kubeconfig
精细权限控制 RBAC
namespace 管理员 Role + RoleBinding
集群管理员 ClusterRole + ClusterRoleBinding

如果你愿意,可以告诉我:

  • ✅ 单节点还是多节点集群
  • ✅ 是否为生产环境
  • ✅ 想给“人”还是“程序”权限

我可以给你一套 完全适合你场景的权限方案。

0 踩