【发布时间】:2021-06-20 12:55:49
【问题描述】:
我有一个 Jenkins 构建流程,可以将我们的代码部署到多个 Kubernetes 环境中。目前,它适用于已知/核心分支(开发、发布、主)等,但我们也希望制作我们所有的功能分支和错误修复分支。为了做到这一点,我们目前让它部署一个带有分支子域的入口,比如“{branchName}.domain.tld”。这里的问题是每个分支都有大量的入口等。
我想做一些类似“branch.domain.tld/{branchName}”的事情,并让入口根据“branchName”路径动态路由。不幸的是,我似乎每个子域/主机分配只有一个入口(branch.domain.tld/bugfix_nasty 没有路由,因为 branch.domain.tld/feat_cool 已经定义)。
我希望看到一个看起来像这样的单个入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dynamic_ingress
annotations:
{...stuff here}
spec:
rules:
- host: branch.domain.tld
http:
paths:
- path: /{branchName}/*
backend:
serviceName: {branchName}
servicePort: 80
有没有办法达到这样的禅宗入口?
我看到的关于这类事情的所有内容都是关于使用正则表达式作为路径来捕获和路由到已知的、已定义的服务的建议。我希望它路由到可变服务名称。
【问题讨论】:
-
我不明白你到底想做什么,但这听起来像是 Istio VirtualService 的一些功能。这可能对你没有帮助,只是注意到相似之处。
-
如果您使用 helm,您可以动态执行此操作。例如通过设置一个值。请记住,服务名称是唯一的,应该使用相同的值。
-
问题是,re: helm 解决方案,如果我创建一个使用来自另一个入口的主机的入口,它们不会很好,只有 1 个入口有效
-
我在生产中使用这样的解决方案,但我没有使用 Kubernetes Ingress,而是使用 vanilla nginx 部署解决了这个问题。我们有一个关于专用服务器数量的状态集。当我们的客户端匹配到一个时,它会被赋予它想要的服务器的名称,然后我们会路由到与 statefulset 名称匹配的主机名。 nginx 部署位于其前面,并映射到主机名中给出的无头服务。综上所述:这是可能的,但普通 Ingress 对象还不够复杂,无法提供这种逻辑。
标签: jenkins kubernetes kubernetes-ingress