0

我正在与 GKE 集群交互并试图了解我的权限是什么

➢  kubectl get roles --all-namespaces
NAMESPACE      NAME                                             AGE
istio-system   istio-ingressgateway-sds                         38d
kube-public    system:controller:bootstrap-signer               38d
kube-system    cloud-provider                                   38d
kube-system    extension-apiserver-authentication-reader        38d
kube-system    gce:cloud-provider                               38d
kube-system    sealed-secrets-key-admin                         38d
kube-system    system::leader-locking-kube-controller-manager   38d
kube-system    system::leader-locking-kube-scheduler            38d
kube-system    system:controller:bootstrap-signer               38d
kube-system    system:controller:cloud-provider                 38d
kube-system    system:controller:token-cleaner                  38d
kube-system    system:fluentd-gcp-scaler                        38d
kube-system    system:pod-nanny                                 38d

但是我看不到任何与我相关的角色。

我如何与k8s集群交互?

我如何查看 whoami 以及我的权限是什么?

4

1 回答 1

1

您共享的命令和输出指的是 Kubernetes RBAC 授权(不排除 GKE)。您可以在此处找到每个角色的定义

如果您想特定于 GKE,您可以同时使用 Cloud Identity and Access Management 和 Kubernetes RBAC 来控制对 GKE 集群的访问。

Cloud IAM 并非特定于 Kubernetes;它为多个 Google Cloud Platform 产品提供身份管理,主要在 GCP 项目级别运行。

Kubernetes RBAC 是 Kubernetes 的核心组件,允许您为集群中的任何对象或对象类型创建和授予角色(权限集)。您可以在此处找到有关 RBAC 如何与 GKE 集成的更多信息

您看不到任何与您关联的角色,因为正在查询所有名称空间的角色,并且很可能您没有定义一个角色。

您正在从云外壳与您的集群进行交互。在连接到您的集群之前,您必须运行以下命令。

gcloud container clusters get-credentials CLUSTER_NAME --zone ZONE --project PROJECT_ID

您使用与登录 GCP 进行身份验证的用户相同的用户对集群进行身份验证。有关 kubectl 身份验证的更多信息这里

您可以根据我的示例命令中的命名空间或资源获取角色绑定和集群角色。

kubectl get rolebinding POD_NAME -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"rbac.authorization.k8s.io/v1","kind":"RoleBinding","metadata":{"annotations":{},"name":"pod-reader-binding","namespace":"default"},"roleRef":{"apiGroup":"rbac.authorization.k8s.io","kind":"Role","name":"pod-reader"},"subjects":[{"kind":"User","name":"example@foo.com"},{"kind":"ServiceAccount","name":"johndoe"},{"kind":"User","name":"test-account@example.google.com.iam.gserviceaccount.com"},{"kind":"Group","name":"accounting-group@example.com"}]}
  creationTimestamp: xxxx-xx-xxxx:xx:xxZ
  name: pod-reader-binding
  namespace: default
  resourceVersion: "1502640"
  selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/default/rolebindings/pod-reader-binding
  uid: de1775dc-cd85-11e9-a07d-42010aa800c2
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pod-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: example@foo.com

在上面的示例中,我的用户 [example@foo.com] 是 APIGroup [rbac.authorization.k8s.io] 的成员,因此他对 pod 的操作将受到他授予 RBAC 的权限的限制,例如,如果您想授予此用户读取权限,您需要在 YAML 中指定以下行

verbs: ["get", "watch", "list"]

最后,有许多预定义的 GKE 角色向 GCP 用户或服务帐户授予不同的权限。您可以在此处找到每个角色和权限

于 2019-09-02T13:58:14.500 回答