我具有对GKE集群的完全管理员访问权限,但是我希望能够使用只读权限创建kubernetes上下文。这样,我可以防止自己不小心弄乱集群。但是,当我需要进行更改时,我仍然希望能够暂时切换到具有完全管理员访问权限的模式(我可能会使用云外壳来完全区分两者)
我没有太多有关此的文档-看来我可以根据电子邮件设置角色,但一个用户没有两个角色。
有没有办法做到这一点?或其他任何方法来防止胖手指删除产品?
答案 0 :(得分:2)
有几种使用GKE进行此操作的方法。 KUBECONFIG中的context
由cluster
和user
组成。由于您要指向相同的cluster
,因此需要更改user
。 user
可以在各种资源上执行的操作的权限可以通过两种方式控制,即通过Cloud IAM policies或通过Kubernetes RBAC。前者适用于整个项目,因此除非您要创建对项目中的所有群集具有只读访问权限的主题,而不是特定的群集,否则最好使用范围较窄的对象Kubernetes RBAC。
以下类型的主题可以通过GKE集群进行身份验证,并对其应用Kubernetes RBAC策略(请参见here)
由于您不打算注册另一个人来完成这种只读访问模式,并且G Suite Google网上论坛可能是过分的,因此您可以选择使用Kubernetes ServiceAccount或GCloud IAM服务帐户。对于这个答案,我们将选择后者。
以下是步骤:
gcloud
配置以避免混乱默认配置。正如您要创建新的KUBECONFIG context
而不是修改当前user
的{{1}}一样,这等效于context
本身而不是{{1 }}。运行命令gcloud
。kubectl
关联。向您的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
添加一个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