【k8s】serviceAccount、role、RoleBinding入门示例

文章目录

RBAC(基于角色的访问控制,Role-Based Access Control)是Kubernetes中用于管理权限的机制。要在Kubernetes环境中创建并演示一个RBAC权限设置的例子,你可以按照以下步骤操作:

  1. 创建一个命名空间
    首先,创建一个新的命名空间,以便在其中演示RBAC的配置。
bash 复制代码
kubectl create namespace demo-rbac
  1. 创建一个ServiceAccount
    接下来,在这个命名空间中创建一个ServiceAccount。这个ServiceAccount会与RBAC绑定,从而获得特定权限。
html 复制代码
kubectl create serviceaccount demo-user -n demo-rbac
  1. 创建一个Role
    创建一个Role,并定义该角色在特定命名空间中的权限。例如,以下Role允许demo-user在demo-rbac命名空间中查看和列出Pods。
html 复制代码
# role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: demo-rbac
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]

应用这个Role:

html 复制代码
kubectl apply -f role.yaml

注意:Role是区分命名空间的,因此,在查询的时候,也需要指定 -n 参数

  1. 创建一个RoleBinding
    将这个Role绑定到刚才创建的ServiceAccount上,使得该ServiceAccount可以使用指定的权限。
toml 复制代码
# rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: demo-rbac
subjects:
- kind: ServiceAccount
  name: demo-user
  namespace: demo-rbac
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

应用这个RoleBinding:

html 复制代码
kubectl apply -f rolebinding.yaml

注意:rolebinding是区分命名空间的,因此,在查询的时候,也需要指定 -n 参数

  1. 使用kubectl命令行验证权限
    验证这个ServiceAccount是否拥有正确的权限。为了模拟用户使用这个ServiceAccount进行操作,可以通过kubectl命令使用--as标志来执行操作。

例如,尝试在demo-rbac命名空间中列出Pods:

html 复制代码
kubectl get pods -n demo-rbac --as=system:serviceaccount:demo-rbac:demo-user

如果设置正确,这个命令会返回命名空间中的Pod列表。

  1. 验证无权限操作
    尝试执行未授予权限的操作,例如删除一个Pod:
html 复制代码
kubectl delete pod <pod-name> -n demo-rbac --as=system:serviceaccount:demo-rbac:demo-user

你会看到一个错误,表明没有删除Pod的权限。

或者 查看 role的操作,也会没权限:

html 复制代码
kubectl get role -n demo-rbac --as=system:serviceaccount:demo-rbac:demo-user
相关推荐
分布式存储与RustFS8 小时前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
闲云自留地15 小时前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
weirong18 小时前
Operator 上生产前补的 6 件事,和 5 件我明确不做的
kubernetes
孙克旭_20 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
孙克旭_20 小时前
云原生基础之Containerd容器运行时
运维·云原生
分布式存储与RustFS20 小时前
RustFS 自建对象存储实战目录:110 篇按场景分类(持续更新)
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
java_logo1 天前
Docker 部署 EmulatorJS:轻松搭建浏览器复古游戏平台
游戏·docker·容器·复古游戏·轩辕镜像·emulatorjs·红白机
吴声子夜歌1 天前
Kubernetes权威指南——网络原理(一)
网络·容器·kubernetes
方便面不加香菜2 天前
Docker Container --容器及容器的操作案例详解
运维·docker·容器
无言听风雨丶2 天前
Kubernetes Service Mesh 与 mTLS 实战:从网络可达走向零信任服务通信
网络·kubernetes·service_mesh