У меня есть проблема в моем кластере Kubernetes, которая неожиданно появилась через две недели go. Созданные ClusterRoles не видны, когда разрешены значения RBA C для заданного ServiceAccount. Вот минимальный набор для воспроизведения проблемы.
Создайте соответствующие ClusterRole, ClusterRoleBinding и ServiceAccount в пространстве имен default
, чтобы иметь права на просмотр конечных точек с этим SA.
# test.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: test-sa
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: test-cr
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: test-crb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: test-cr
subjects:
- kind: ServiceAccount
name: test-sa
namespace: default
$ kubectl apply -f test.yaml
serviceaccount/test-sa created
clusterrole.rbac.authorization.k8s.io/test-cr created
clusterrolebinding.rbac.authorization.k8s.io/test-crb created
Все объекты, в частности ClusterRole, видны при прямом запросе.
$ kubectl get serviceaccount test-sa
NAME SECRETS AGE
test-sa 1 57s
$ kubectl get clusterrolebinding test-crb
NAME AGE
test-crb 115s
$ kubectl get clusterrole test-cr
NAME AGE
test-cr 2m19s
Однако, когда я пытаюсь разрешить действующие права для этого ServiceAccount, я получаю сообщение об ошибке:
$ kubectl auth can-i get endpoints --as=system:serviceaccount:default:test-sa
no - RBAC: clusterrole.rbac.authorization.k8s.io "test-cr" not found
Правила RBA C, созданные до поломки, работают правильно. Например, здесь для ServiceAccount моего etcd-оператора, который я развернул с Helm несколько месяцев: go:
$ kubectl auth can-i get endpoints --as=system:serviceaccount:etcd:etcd-etcd-operator-etcd-operator
yes
Версия Kubernetes в этом кластере - 1.17.0-0
.
В последнее время я также вижу очень медленные развертывания новых модулей, которые могут начать развертываться после 5 минут после того, как они были созданы StatefulSet или Deployment, если это может помочь.
Do у вас есть понимание того, что происходит, или даже что я могу с этим поделать? Обратите внимание, что мой кластер Kubernetes управляется, поэтому я не имею никакого контроля над базовой системой, у меня просто есть привилегии cluster-admin
в качестве клиента. Но все равно было бы очень полезно, если бы я мог дать какое-либо указание администраторам.
Заранее спасибо!