如何将角色与服务帐户绑定-Kubernetes

时间:2019-12-16 09:32:37

标签: kubernetes dashboard rbac

我知道有很多类似的问题,但就我所浏览的而言,没有一个解决方案。 谈到这个问题,我创建了一个服务帐户(使用命令),角色(使用.yaml文件),角色绑定(使用.yaml文件)。该角色仅授予对Pod的访问权限。但是,当我使用角色附加到的SA登录到仪表板(令牌方法)时,我可以不受限制地查看所有资源。这是我使用的文件和命令。

Role.yaml:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: assembly-prod
  name: testreadrole
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

RoleBinding.yaml

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: testrolebinding
  namespace: assembly-prod
subjects:
- kind: ServiceAccount
  name: testsa
  apiGroup: ""
roleRef:
  kind: Role
  name: testreadrole
  apiGroup: rbac.authorization.k8s.io

用于创建服务帐户的命令: kubectl create serviceaccount <saname> --namespace <namespacename>

更新:我创建了一个服务帐户,但没有为其添加任何角色。当我尝试使用此SA登录时,它让我通过,并且能够执行包括删除“秘密”在内的各种活动。因此,默认情况下,所有SA都假定具有管理员访问权限,这就是我上述角色不起作用的原因。这是预期的行为吗,如果可以,我该如何更改?

3 个答案:

答案 0 :(得分:0)

我发现您提供的library(tidyverse) dfoo %>% group_by(eye) %>% mutate( phak = na_if(status, "pseudo"), pseudo = na_if(status, "phak") ) %>% fill(phak, .direction = "up") %>% fill(pseudo, .direction = "down") %>% transmute(status = coalesce(phak, pseudo)) %>% ungroup() #> # A tibble: 15 x 2 #> eye status #> <chr> <chr> #> 1 a phak #> 2 a phak #> 3 a <NA> #> 4 a pseudo #> 5 a pseudo #> 6 b <NA> #> 7 b pseudo #> 8 b pseudo #> 9 b pseudo #> 10 b pseudo #> 11 c phak #> 12 c phak #> 13 c <NA> #> 14 c <NA> #> 15 c <NA> 需要一些调整。

dfoo <- structure(list(eye = c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c", "c", "c"), status = c(NA, "phak", NA, "pseudo", NA, NA, "pseudo", NA, NA, NA, "phak", "phak", NA, NA, NA)), row.names = c(NA, -15L), class = "data.frame") .yamls部分之后的格式错误。

Rolerules之后缺少RoleBinding,并且格式错误。

尝试这样的事情:

namespace:

有一本关于Non-Privileged RBAC User Administration in Kubernetes的非常有用的指南,您可以在其中找到有关此特定主题的更多详细信息。

请让我知道是否有帮助。

答案 1 :(得分:0)

尝试以下步骤

# create service account
kubectl create serviceaccount pod-viewer

# Create cluster role/role
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: pod-viewer
rules:
- apiGroups: [""] # core API group
  resources: ["pods", "namespaces"]
  verbs: ["get", "watch", "list"]
---

# create cluster role binding
kubectl create clusterrolebinding pod-viewer \
  --clusterrole=pod-viewer \
  --serviceaccount=default:pod-viewer

# get service account secret
kubectl get secret | grep pod-viewer
pod-viewer-token-6fdcn   kubernetes.io/service-account-token   3      2m58s

# get token
kubectl describe secret pod-viewer-token-6fdcn
Name:         pod-viewer-token-6fdcn
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: pod-viewer
              kubernetes.io/service-account.uid: bbfb3c4e-2254-11ea-a26c-0242ac110009

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InBvZC12aWV3ZXItdG9rZW4tNmZkY24iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicG9kLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImJiZmIzYzRlLTIyNTQtMTFlYS1hMjZjLTAyNDJhYzExMDAwOSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OnBvZC12aWV3ZXIifQ.Pgco_4UwTCiOfYYS4QLwqgWnG8nry6JxoGiJCDuO4ZVDWUOkGJ3w6-8K1gGRSzWFOSB8E0l2YSQR4PB9jlc_9GYCFQ0-XNgkuiZBPvsTmKXdDvCNFz7bmg_Cua7HnACkKDbISKKyK4HMH-ShgVXDoMG5KmQQ_TCWs2E_a88COGMA543QL_BxckFowQZk19Iq8yEgSEfI9m8qfz4n6G7dQu9IpUSmVNUVB5GaEsaCIg6h_AXxDds5Ot6ngWUawvhYrPRv79zVKfAxYKwetjC291-qiIM92XZ63-YJJ3xbxPAsnCEwL_hG3P95-CNzoxJHKEfs_qa7a4hfe0k6HtHTWA
ca.crt:     1025 bytes
namespace:  7 bytes
```

Login to dashboard using the above token. you should see only pods and namespaces

[![Refer the below link][1]][1]


  [1]: https://i.stack.imgur.com/D9bDi.png

答案 2 :(得分:0)

好的,我已经找到解决方案。主要问题是我在Azure AKS上运行群集,我应该在问题中提到它,但没有这样做。是我的错在Azure AKS中,如果在创建AKS时未启用rbac,则根本不使用角色和角色绑定。对api服务器的所有请求都将被视为来自Admin的请求。 Azure支持也证实了这一点。因此,这就是我的群集角色绑定和角色不适用的原因。