【发布时间】:2022-07-04 21:33:29
【问题描述】:
我有一个运行在裸机 kubernetes 集群上的微服务架构。我们主要有两个服务,其中一个是公开的,另一个是内部可用的。我正在使用 ingress nginx 在内部公开我的服务,但现在我还必须公开其他服务,所以我想为此使用另一个入口控制器。 当我尝试在不同的命名空间中部署另一个入口控制器时,我收到如下错误:
错误:无法观看 *v1.Endpoints:未能列出 *v1.Endpoints:端点被禁止:用户“system:serviceaccount:ingress-nginx:ingress-nginx”无法列出 API 组“”中的资源“endpoints”在集群范围内
我的第一个入口也停止正常工作。
我正在使用的入口部署 yaml 是:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml
然而,我在另一个命名空间中使用的第二个入口 yaml 是:https://github.com/wali97/second-ingress-controller.yaml/blob/main/ingress.yaml
【问题讨论】:
-
你不应该需要多个入口控制器。入口控制器的全部意义在于,单个应用程序将管理入口流量路由到所有面向外部的服务(即那些定义了入口资源的服务)。
-
@user31601 我想使用多入口概念,因为我不想路由来自同一个 IP 的所有请求。我希望为这两种服务保留单独的路线。
-
很公平。我预计该错误与您在两个文件中定义相同的集群角色(集群角色没有命名空间)这一事实有关。我不知道重新应用相同的角色定义是否会删除现有的绑定(我希望不会),或者也许在某些时候你做了
kubectl delete -f?无论如何,我认为首先要尝试的是确保集群角色只在一个地方定义。您可以将同一个角色绑定到多个服务帐户。如果每个命名空间有一个单独的控制器,则删除集群角色并改用角色可能更安全。
标签: kubernetes-ingress ingress-controller