Kubernetes只读上下文
我拥有对GKE集群的完全管理权限,但我希望能够使用只读权限创建kubernetes上下文。这样我就可以防止自己不小心弄乱集群。但是,当我需要进行更改时,我仍然希望能够临时切换到具有完全管理权限的模式(我可能会使用cloud shell来完全区分这两者) 我没有太多关于这方面的文档-似乎我可以根据我的电子邮件设置角色,但不能为一个用户设置两个角色Kubernetes只读上下文,kubernetes,google-kubernetes-engine,kubectl,Kubernetes,Google Kubernetes Engine,Kubectl,我拥有对GKE集群的完全管理权限,但我希望能够使用只读权限创建kubernetes上下文。这样我就可以防止自己不小心弄乱集群。但是,当我需要进行更改时,我仍然希望能够临时切换到具有完全管理权限的模式(我可能会使用cloud shell来完全区分这两者) 我没有太多关于这方面的文档-似乎我可以根据我的电子邮件设置角色,但不能为一个用户设置两个角色 有没有办法做到这一点?或者有没有其他方法来防止胖手指删除产品 使用GKE有几种方法可以做到这一点。KUBECONFIG中的上下文由集群和用户组成。由于您
有没有办法做到这一点?或者有没有其他方法来防止胖手指删除产品 使用GKE有几种方法可以做到这一点。KUBECONFIG中的
上下文
由集群
和用户
组成。由于您希望指向相同的集群
,因此需要更改的是用户
。用户可以对各种资源执行哪些操作的权限可以通过两种方式进行控制,即通过或通过。前者适用于项目范围,因此,除非您希望创建一个对项目中的所有集群(而不是特定集群)具有只读访问权限的主题,否则最好使用范围更窄的Kubernetes RBAC
以下类型的主体可以通过GKE集群进行身份验证,并对其应用Kubernetes RBAC策略(请参阅):
gcloud
配置,以避免干扰默认配置。正如您希望创建一个新的KUBECONFIG上下文
而不是修改当前上下文
的用户
,这做了相同的事情,但对gcloud
本身,而不是kubectl
。运行命令gcloud config configurations create
GCloud auth activate服务帐户--密钥文件=
上下文
和用户
添加到您的KUBECONFIG文件中,以便您可以作为此GCloud IAM服务帐户向GKE群集进行身份验证,如下所示:
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}'
$ kubectl use-context <cluster-name>-read-only
$ kubectl get all --all-namespaces
# see all the pods and stuff
$ kubectl create namespace foo
Error from server (Forbidden): namespaces is forbidden: User "<service-account-email>" cannot create resource "namespaces" in API group "" at the cluster scope: Required "container.namespaces.create" permission.
$ kubectl use-context <original-namespace>
$ kubectl get all --all-namespaces
# see all the pods and stuff
$ kubectl create namespace foo
namespace/foo created
$kubectl使用上下文-只读
$kubectl获取全部--所有名称空间
#看到所有的豆荚和东西了吗
$kubectl创建命名空间foo
来自服务器的错误(禁止):名称空间被禁止:用户“”无法在群集作用域中的API组“”中创建资源“名称空间”:必需的“container.namespaces.create”权限。
$kubectl使用上下文
$kubectl获取全部--所有名称空间
#看到所有的豆荚和东西了吗
$kubectl创建命名空间foo
创建名称空间/foo
$ kubectl use-context <cluster-name>-read-only
$ kubectl get all --all-namespaces
# see all the pods and stuff
$ kubectl create namespace foo
Error from server (Forbidden): namespaces is forbidden: User "<service-account-email>" cannot create resource "namespaces" in API group "" at the cluster scope: Required "container.namespaces.create" permission.
$ kubectl use-context <original-namespace>
$ kubectl get all --all-namespaces
# see all the pods and stuff
$ kubectl create namespace foo
namespace/foo created