环境:我有一个 kubernetes 集群,其中设置了“dev”、“sit”和“prod”的命名空间。在这些命名空间中的每一个中,我都有多个类型的服务:LoadBalancer,它们针对 dockerised 应用程序的特定部署(我有多个应用程序),因此我可以通过使用我想要的任何命名空间的服务的公开 IP 地址来访问其中的每一个. 示例服务看起来像这样非常简单:
apiVersion: v1
kind: Service
metadata:
name: application1
spec:
ports:
- port: 80
targetPort: 3000
protocol: TCP
name: http
type: LoadBalancer
selector:
app: application1
问题:我现在希望能够支持所有应用程序的多个版本(ip:/v1/ 、ip:/v2/等),以允许用户在他们准备好并且我已经准备好时迁移到新版本尝试按照本指南实施基于路径的路由。我设法重组了我的架构,以便我拥有 ReplicationControllers 和一个入口,它查看路由到正确服务的路径规则。
如果我只有一个公开的服务和一个命名空间,这似乎可行,因为我只有生产环境的 DNS 主机名,并且想将服务的单个 IP 地址用于其他环境,我不知道如何为没有主机名的服务指定入口规则。
我可以为每个环境使用一个负载均衡器,并使用基于路径的路由来为 dev 和 sat 路由到每个不同的服务,这并不理想,因为要访问任何服务,我们现在必须使用类似 ip/application1 和 ip/application2 的东西而不是直接使用各个应用的服务ip地址。但我最大的问题是,当我按照指南在我的 SIT 命名空间中创建入口、replicationController 和服务时,它开始影响我其他两个环境中的负载均衡器服务(据我所知,kubernetes 有时会尝试使用来自我的 DEV 服务上的 SIT 环境,因此会失败,其他时候它会使用 GCE 默认配置并且可以工作)。
我尝试添加 arg "- --watch-namespace=sit" 以将入口控制器的范围限制为仅影响坐,但它似乎不起作用。