多命名空间安装Ambassador Agent流量管理器遇ClusterRole冲突问题
问题描述
我有一个包含多个命名空间的大型K8s集群:
+------------------------ test-cluster ---------------------+ | | | +---------+ +---------+ +---------+ +---------+ | | | default | | alpha | | beta | | ... | | | +---------+ +---------+ +---------+ +---------+ | | | +-----------------------------------------------------------+
尝试为每个命名空间单独安装Telepresence Helm Chart,在alpha命名空间安装成功:
$ helm install traffic-manager datawire/telepresence -n alpha -f values.yml
可通过以下命令确认安装状态:
$ helm list -n alpha | grep traffic | awk '{ print $1 }' traffic-manager
但在beta命名空间执行安装时出现错误:
$ helm install traffic-manager datawire/telepresence -n beta -f values.yml Error: INSTALLATION FAILED: Unable to continue with install: ClusterRole "traffic-manager-ambassador-agent" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: key "meta.helm.sh/release-namespace" must equal "beta": current value is "alpha"
发现ClusterRole是集群级共享资源,被alpha命名空间的安装实例拥有,并非按命名空间创建。当前使用的values.yml内容如下:
clientRbac: create: true namespaced: true namespaces: - beta subjects: - kind: Group name: eks-user apiGroup: rbac.authorization.k8s.io managerRbac: create: true namespaced: true namespaces: - beta
解决方法
方法1:复用已有集群级资源,禁止新实例创建集群RBAC
修改values.yml,让beta命名空间的安装不再生成集群级RBAC资源,复用alpha实例已创建的资源:
managerRbac: create: false clientRbac: create: true namespaced: true namespaces: - beta subjects: - kind: Group name: eks-user apiGroup: rbac.authorization.k8s.io
重新执行安装命令:
helm install traffic-manager datawire/telepresence -n beta -f values.yml
方法2:为不同命名空间实例设置唯一资源前缀
如果需要每个命名空间的实例拥有独立的集群级资源,可通过Helm的fullnameOverride参数修改资源名称前缀,避免冲突:
helm install traffic-manager datawire/telepresence -n beta -f values.yml \ --set fullnameOverride=beta-traffic-manager
此命令会创建名为beta-traffic-manager-ambassador-agent的ClusterRole,不会和alpha实例的资源产生冲突。
方法3:单实例多命名空间管理(推荐)
Telepresence的Traffic Manager原生支持管理多个命名空间,无需在每个命名空间单独安装实例:
- 保留
alpha命名空间的Manager实例 - 修改beta的
values.yml,仅创建客户端RBAC,不安装Manager组件:
manager: enabled: false clientRbac: create: true namespaced: true namespaces: - beta subjects: - kind: Group name: eks-user apiGroup: rbac.authorization.k8s.io
在beta命名空间执行安装:
helm install traffic-manager datawire/telepresence -n beta -f values.yml
内容的提问来源于stack exchange,提问作者user2490003
相关产品推荐
相关产品推荐

