gpt4 book ai didi

kubernetes - Kubernetes 中用户或角色的命名空间

转载 作者:行者123 更新时间:2023-12-04 16:59:05 28 4
gpt4 key购买 nike

我知道角色用于授予用户或服务帐户在特定命名空间中执行操作的权限。
一个典型的角色定义可能是这样的

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: mynamespace
name: my-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]

但是在service account的定义中,我们也可以看到namespace字段
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceac
namespace: mynamespace

我的问题是:
1. 命名空间范围是否适用于用户/服务帐户或角色?
2. service account和role中的namespace不同怎么办

角色绑定(bind)定义供引用
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: my-rolingbinding
namespace: mynamespace
subjects:
- kind: ServiceAccount
name: my-serviceac
namespace: mynamespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: my-role

最佳答案

  • 命名空间应用于角色、服务帐户和角色绑定(bind)的所有三个。
  • 命名空间在角色和服务帐户上是否不同都没有关系。您仍然可以创建角色绑定(bind),但服务帐户将只能在角色中定义的命名空间中获得对资源执行动词的访问权限,并且需要在与角色相同的命名空间中创建角色绑定(bind)。

  • kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    namespace: mynamespace
    name: my-role
    rules:
    - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "watch", "list"]

    ---

    apiVersion: v1
    kind: ServiceAccount
    metadata:
    name: my-serviceac
    namespace: default
    kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=default:myserviceac -n mynamespace

    然后检查服务帐号的权限
    kubectl auth can-i get pods -n mynamespace --as=system:serviceaccount:default:myserviceac
    yes
    kubectl auth can-i watch pods -n mynamespace --as=system:serviceaccount:default:myserviceac
    yes

    kubectl auth can-i list pods -n mynamespace --as=system:serviceaccount:default:myserviceac
    yes
    kubectl auth can-i get pods -n default --as=system:serviceaccount:default:myserviceac
    no
    kubectl auth can-i list pods -n default --as=system:serviceaccount:default:myserviceac
    no
    kubectl auth can-i watch pods -n default --as=system:serviceaccount:default:myserviceac
    no

    正如我们所看到的,服务帐户在 mynamespace 中具有获取、监视、列出 pod 的权限,但在默认命名空间中没有相同的权限,尽管服务帐户位于默认命名空间中。

    现在,如果我删除角色绑定(bind)并在默认命名空间而不是 mynamespace 中创建它。
    kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=default:myserviceac -n default
    kubectl auth can-i get pods -n default --as=system:serviceaccount:default:myserviceac
    no
    kubectl auth can-i list pods -n default --as=system:serviceaccount:default:myserviceac
    no
    kubectl auth can-i watch pods -n default --as=system:serviceaccount:default:myserviceac
    no
    kubectl auth can-i get pods -n mynamespace --as=system:serviceaccount:default:myserviceac
    no
    kubectl auth can-i list pods -n mynamespace --as=system:serviceaccount:default:myserviceac
    no
    kubectl auth can-i watch pods -n mynamespace --as=system:serviceaccount:default:myserviceac
    no

    可以看出,不再应用该权限。

    关于kubernetes - Kubernetes 中用户或角色的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60388489/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com