Kubernetes只读上下文

时间:2019-07-27 22:44:57

标签: kubernetes google-kubernetes-engine kubectl

我具有对GKE集群的完全管理员访问权限,但是我希望能够使用只读权限创建kubernetes上下文。这样,我可以防止自己不小心弄乱集群。但是,当我需要进行更改时,我仍然希望能够暂时切换到具有完全管理员访问权限的模式(我可能会使用云外壳来完全区分两者)

我没有太多有关此的文档-看来我可以根据电子邮件设置角色,但一个用户没有两个角色。

有没有办法做到这一点?或其他任何方法来防止胖手指删除产品?

1 个答案:

答案 0 :(得分:2)

有几种使用GKE进行此操作的方法。 KUBECONFIG中的contextclusteruser组成。由于您要指向相同的cluster,因此需要更改useruser可以在各种资源上执行的操作的权限可以通过两种方式控制,即通过Cloud IAM policies或通过Kubernetes RBAC。前者适用于整个项目,因此除非您要创建对项目中的所有群集具有只读访问权限的主题,而不是特定的群集,否则最好使用范围较窄的对象Kubernetes RBAC。

以下类型的主题可以通过GKE集群进行身份验证,并对其应用Kubernetes RBAC策略(请参见here

  1. GCP注册(人类)用户
  2. 一个Kubernetes ServiceAccount
  3. GCloud IAM服务帐户
  4. G Suite Google网上论坛的成员

由于您不打算注册另一个人来完成这种只读访问模式,并且G Suite Google网上论坛可能是过分的,因此您可以选择使用Kubernetes ServiceAccount或GCloud IAM服务帐户。对于这个答案,我们将选择后者。

以下是步骤:

  1. 在与Kubernetes集群相同的项目中创建GCloud IAM服务帐户。
  2. 创建本地gcloud配置以避免混乱默认配置。正如您要创建新的KUBECONFIG context而不是修改当前user的{​​{1}}一样,这等效于context本身而不是{{1 }}。运行命令gcloud
  3. 将此配置与您的GCloud IAM服务帐户kubectl关联。
  4. 向您的KUBECONFIG文件中添加一个gcloud config configurations create <configuration-name>gcloud auth activate-service-account <service_account_email> --key-file=</path/to/service/key.json>,以便您可以通过以下方式作为该GCloud IAM服务帐户向GKE集群进行身份验证:

    context
  5. 添加一个user,以便此主题对集群具有只读访问权限:

    contexts:
    - ...
    - ...
    - name: <cluster-name>-read-only
      context:
        cluster: <cluster-name>
        user: <service-account-name>
    users:
    - ...
    - ...
    - name: <service-account-name>
      user:
        auth-provider:
          name: gcp
          config:
            cmd-args: config config-helper --format=json --configuration=<configuration-name>
            cmd-path: </path/to/gcloud/cli>
            expiry-key: '{.credential.token_expiry}'
            token-key: '{.credential.access_token}'
    

尝试一下:

ClusterRoleBinding