【发布时间】:2021-05-31 16:59:43
【问题描述】:
我正在像这样使用 helm 部署我的图表:
helm upgrade --install --namespace newnamespace --create-namespace testing mychart
我的理解是一切都应该部署到newnamespace
我的图表中有这个:
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "mychart.serviceAccountName" . }}
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: {{ include "mychart.serviceAccountName" . }}
rules:
- apiGroups: [""]
resources: ["services","endpoints","pods"]
verbs: ["get","watch","list"]
- apiGroups: ["extensions","networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get","watch","list"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: {{ include "mychart.serviceAccountName" . }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "mychart.serviceAccountName" . }}
subjects:
- kind: ServiceAccount
name: {{ include "mychart.serviceAccountName" . }}
部署时出现此错误:
Error: ClusterRoleBinding.rbac.authorization.k8s.io "my-service-account" is invalid: subjects[0].namespace: Required value
然后我添加这个并且部署工作:
...
subjects:
- kind: ServiceAccount
name: {{ include "mychart.serviceAccountName" . }}
namespace: {{ .Release.Namespace }}
这是为什么? ClusterRoleBinding 的这个要求是什么?我看不到它正在部署的命名空间吗?
是不是因为 ClusterRoleBinding 是集群范围的,它必须在其定义中定义了命名空间? ClusterRoleBinding 资源不是在任何命名空间中创建的吗?如果是的话,他们住在哪里 kube-system?
这是否意味着如果我在卸载 helm 之前删除了包含我的 helm 版本的命名空间,ClusterRoleBinding 将被留下?
【问题讨论】:
标签: kubernetes kubernetes-helm