【容器】K8s RBAC介绍

认识RBAC

RBAC(基于角色的访问控制)是一种将权限分配给用户和服务的方法,基于他们的角色来确定他们可以访问和修改的资源。K8s使用RBAC作为来访请求鉴权的机制之一。

场景:访问K8s接口时的认证和鉴权

某些场景下,我们需要与K8s API Server交互,以获取或变更集群中资源的状态。我们知道,访问K8s API Server是需要认证,鉴权,准入控制,审计四个步骤的。

其中认证(password,Service account token,X509 客户端证书认证),鉴权(节点授权,RBAC,ABAC)的信息需要客户端在请求中携带。因此,为了请求K8s API,首先我们需要从K8s获取认证,鉴权信息。K8s为我们准备了这样一份信息: kubeconfig file。该文件在每一个可正常执行kubectl的K8s节点机的/root/.kube/config。获取这个文件后,我们可以使用如下样例代码列举K8s特定命名空间中的所有deployments:

复制代码
from kubernetes import client, config

def list_deployments(namespace):
    # Load the kubeconfig file
    config.load_kube_config('/root/.kube/config')

    # Create an instance of the API class
    apps_v1 = client.AppsV1Api()
    
    print(f"Listing deployments in namespace: {namespace}")
    
    # List deployments
    deployments = apps_v1.list_namespaced_deployment(namespace)
    for deployment in deployments.items:
        print(deployment.metadata.name)

# Replace 'your_namespace' with the desired namespace
list_deployments('your_namespace')

通过这种方式获取访问K8s所需的认证,鉴权信息方便有效。不过有安全隐患,在后面的章节我们会通过分析这个文件的内容,解析安全隐患在哪里。在此之前,需先了解K8s RBAC(Role Based Access Control)的基础知识。

RBAC中的resource和verb

RBAC中resource是可以被操作的资源对象,verbs是操作的动作。

复制代码
#resource
pods,nodes,deployments,service
#verbs
create, delete, get, list, patch, watch

通过下面的命令可以查看K8s中的资源和对应的动作
kubectl api-resources -o wide

RBAC中的role

Role定义了对resource做什么verb。

复制代码
# 删除Pods
Delete Pods
# 更新Service
patch Service

以下Role描述文件定义了该role能够对"deployments", "statefulsets"进行"get", "watch", "list", "patch", "update"

复制代码
apiVersion: rbac.authorization.k8s.io/v1
## 这里也可以使用 Role
kind: ClusterRole
metadata:
  name: deploy-cluster-role
rules:
- apiGroups: ["apps"]
  resources: ["deployments", "statefulsets"]
  verbs: ["get", "watch", "list", "patch", "update"]

RBAC中的ServiceAccount

以下yaml创建一个ServiceAccount(testapp)。绑定该ServiceAccount的应用使用该身份与K8s集群进行交互。

复制代码
apiVersion: v1
kind: ServiceAccount
metadata:
  name: testapp
  # change to desired namespace
  namespace: default

RBAC中的RoleBinding

RoleBinding将ServiceAccount绑定到Role上。表示应用对资源的操作。

以下yaml把Role:deploy-cluster-role绑定到ServiceAccount:testApp上

复制代码
apiVersion: rbac.authorization.k8s.io/v1
## 这里也可以使用 RoleBinding
kind: ClusterRoleBinding
metadata:
  name: deploy-role-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: deploy-cluster-role
subjects:
- kind: ServiceAccount
  name: testapp
  namespace: default

小结

至此了解了RBAC的基本元素Resource,Verb,Role,ServiceAccount,RoleBinding。并了解了这些概念在K8s中的落地。下篇我们介绍具体的实践。

相关推荐
张小凡vip7 分钟前
Kubernetes--k8s---了解和使用 ServiceAccount
容器·贪心算法·kubernetes
流星白龙29 分钟前
【Docker】13.容器基本操作实战
运维·docker·容器
还卿一钵无情泪15 小时前
Docker 部署Unsloth 绕开环境配置难题
运维·人工智能·docker·ai·容器·nlp·干货
打工仔折腾 AI16 小时前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
极客先躯17 小时前
高级java每日一道面试题-2026年01月20日-实战篇[Docker]-如何实现镜像的跨区域复制?
java·运维·docker·容器·架构图
dawnsky.liu17 小时前
OpenShift - 实现系统负载和业务负载分区隔离
kubernetes·openshift
杀不死的坏蛋c20 小时前
k8s-原理-网络-安装
kubernetes
紫神21 小时前
DDS 通信技术说明
网络·云原生·容器·k8s·dds·弱网
java_logo21 小时前
Docker 部署 DeepSeek Harness:轻松搭建局域网里的 AI Agent 平台
运维·docker·容器·ai agent·deepseek·轩辕镜像·deepseekharness
weixin_435247061 天前
医疗科研“Agent化”:给研究型医院搭AI原生科研平台的3个架构取舍
云原生