• kubernetes 配置示例 RBAC


    3个基本概念:

    (1) Role: 角色。它其实是一组规则,定义了一组对 kubernetes API 对象的操作权限 。

    (2)Subject:被作用者。可以是“人”,也可以是“机器”。

    (3)RoleBinding: 定义了 subject 和 role 间的绑定关系。

    Role 的定义示例如下:

    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      namespace: mynamespace  # 定义了 examle-role 这个 Role 的作用域
      name: example-role  # Role 的名称
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "watch", "list"]

    注: rules 是 Role 定义的权限。此例中这个Role 的含义就是: 允许 Subject 对 mynamespace 下面的 Pod 对象进行 get,watch, list 操作。

    使用 RoleBinding 把 Role 和 Subject 进行绑定:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: example-rolebinding
      namespace: mynamespace 
    subjects:
    - kind: User
      name: example-user
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: example-role
      apiGroup: rbac.authorization.k8s.io
    

    这里的“被作用者”的类型是 User(即k8s 里的用户,只是授权系统的一个逻辑概念),这个用户的名字是 example-user。

    Role 和 RoleBinding 都是 Namespace 对象,所以它们对权限的限制规则仅在它们自己的 Namespace 内有效, roleRef 也只能引用当前Namespace 里的 Role 对象。如果想要作用于所有的 Namespace,则需要使用 ClusterRole 和 ClusterRoleBinding。

    大多数时候,我们不太使用 User 这个功能,而是直接使用 k8s 里的 “内置用户”,即 ServiceAccount

    --- 
    # 定义一个名为 example-sa 的 ServiceAccount
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      namespace: mynamespace
      name: example-sa
    -- 
    # SeviceAccount 和 Role 进行绑定
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: sa-rb
    subjects:
    - kind: ServiceAccount
      name: example-sa
      namespace: mynamespace
    roleRef:
      kind: Role
      name: example-role
      apiGroup: rbac.authorization.k8s.io
    ---
    #声明使用 ServiceAccount
    apiVersion: v1
    kind: Pod
    metadata:
      namespace: mynamespace
      name: sa-token-test
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
      serviceAccountName: example-sa
    

    运行上面的 yaml 后,运行下面的命令

    kubectl get sa -n mynamespace -o yaml

    可以看到 k8s 自动为 ServiceAccount 创建并分配了一个 Secret 对象。

    当 Pod 运行起来之后,该 ServiceAccount 的 Token,被 k8s 自动挂载到了容器的 /var/run/secrets/kubernetes.io/serviceaccount 目录下。

  • 相关阅读:
    day84
    模型层之单表操作
    Django的模板层
    Django框架导读
    创建Django项目
    名称空间2.0path
    js基础之BOM和DOM
    LG5003 跳舞的线
    20191003 「HZOJ NOIP2019 Round #8」20191003模拟
    LG3092 「USACO2013NOV」No Change 状压DP
  • 原文地址:https://www.cnblogs.com/langfanyun/p/15838368.html
Copyright © 2020-2023  润新知