【问题标题】:GKE Kubernetes RBAC bind default role to my limited customGKE Kubernetes RBAC 将默认角色绑定到我的有限自定义
【发布时间】:2019-07-25 03:52:13
【问题描述】:

我正在使用 G 我想创建一个只能访问特定命名空间的自定义用户,我使用了这个 yaml:

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: develop-user
  namespace: develop

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: develop-user-full-access
  namespace: develop
rules:
- apiGroups: rbac.authorization.k8s.io
  resources:
  - services
  verbs: ["get"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: develop-user-view
  namespace: develop
subjects:
- kind: ServiceAccount
  name: develop-user
  namespace: develop
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: develop-user-full-access

所以在我将上下文切换到这个新服务帐户并发现我仍然可以访问所有内容之后,我获得了一个证书并添加到我的 kube 配置中:(
为什么会发生这种情况以及如何解决?

我的 kubeconfig(pastebin 副本:https://pastebin.com/s5Nd6Dnn):

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: %certificate-data%
    server: https://animeheaven.nyah
  name: anime-cluster-develop
contexts:
- context:
    cluster: anime-cluster-develop
    namespace: develop
    user: develop-user
  name: anime-develop
current-context: anime-develop
kind: Config
preferences: {}
users:
- name: develop-user
  user:
    client-key-data: %certdata%
    token: %tokenkey%

【问题讨论】:

  • 你想给这个develop-user一个命名空间的所有权限吗?或者,一些特定的权限?
  • @MarufTuhin 嘿,好问题,基于我提供的配置,我想让开发人员访问仅访问 develop 命名空间并只能在其中运行 get 命令

标签: kubernetes google-kubernetes-engine rbac


【解决方案1】:

https://medium.com/uptime-99/making-sense-of-kubernetes-rbac-and-iam-roles-on-gke-914131b01922
https://medium.com/@ManagedKube/kubernetes-rbac-port-forward-4c7eb3951e28

这两篇文章终于帮到了我!由于这些愚蠢的东西,我几乎感到沮丧,感谢 uptime-99 和 ManagedKube 我做到了!耶!

关键是在gcloud中创建kubernetes-viewer用户,然后给他创建一个角色 这是一个提示!

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: develop
  name: allow-developer-port-forward
rules:
- apiGroups: [""]
  resources: ["pods", "pods/portforward"]
  verbs: ["get", "list", "create"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: anime-developer-port-access
  namespace: develop
subjects:
- kind: User
  name: ANIMEDEVERLOP@gmail.com
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: allow-developer-port-forward
  apiGroup: ""

然后

kubectly 应用 -f accessconfig.yaml

就是这样!
祝你有美好的一天!

【讨论】:

    【解决方案2】:

    这是一篇关于如何设置的好文章:https://jeremievallee.com/2018/05/28/kubernetes-rbac-namespace-user.html

    总的来说,你的配置没问题,我改的是- apiGroups: rbac.authorization.k8s.io这一行改成:

    - apiGroups: ["", "extensions", "apps"]
    

    然后,应用以下步骤:

    1. 创建develop命名空间
    $ kubectl create namespace develop
    
    1. 根据您的配置创建 RBAC。
    $ kubectl apply -f rbac.yaml
    
    1. 读取集群 IP、令牌和 CA 证书。
    $ kubectl cluster-info
    $ kubectl get secret develop-user-token-2wsnb -o jsonpath={.data.token} -n develop | base64 --decode
    $ kubectl get secret develop-user-token-2wsnb -o "jsonpath={.data['ca\.crt']}" -n develop
    
    1. 填写~/.kube/config文件(如linked guide中所述)
    2. 将上下文更改为develop
    3. 用户只能访问 develop 命名空间中的检查服务。
    $ kubectl get service my-service -n mynamespace
    Error from server (Forbidden): services "my-service" is forbidden: User "system:serviceaccount:develop:develop-user" cannot get services in the namespace "mynamespace"
    $ kubectl get service my-service -n develop
    hError from server (NotFound): services "my-service" not found
    

    【讨论】:

    • 嘿,谢谢你的回答,很感激,但我仍然可以运行 kubectl get pods --namespace prod 并访问其他命名空间:\
    • 顺便说一句,我使用完全相同的文章来设置我的服务帐户
    • 这很奇怪,尤其是我昨天也在 GKE 上检查了它......你在 ~/.kube/config 的上下文配置中有 develop 命名空间吗?您还可以将添加的内容添加到问题描述中的config 文件中。也许这可能暗示出了什么问题。
    • 嘿,谢谢你的建议!但我在配置中指定了命名空间,将配置附加到我的问题
    • 我从另一个聊天中得到建议,它可能是绑定到每个新用户的默认角色绑定,但我不知道如何验证它
    猜你喜欢
    • 2021-07-24
    • 2018-06-13
    • 2020-05-23
    • 2019-06-26
    • 2020-07-07
    • 1970-01-01
    • 2015-11-05
    • 2012-01-14
    • 2016-03-27
    相关资源
    最近更新 更多