我有一个Jenkins构建过程,它将我们的代码部署到几个Kubernetes环境中。目前,它在已知/核心分支(开发、发布、主分支(等方面的工作非常出色,但我们也想制作所有的功能分支和bug修复分支。为了做到这一点,我们目前让它部署了一个带有分支子域的入口,比如"入口";{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
有没有办法进入这样一个齐纳式的入口?
我看到的关于这类事情的所有内容都是关于使用regex作为捕获和路由到已知、定义的服务的路径的建议。我希望这个路由到可变服务名称。
据我所知,Ingress对象不允许您尝试执行的操作。但如果您每次部署新分支时都能修改Ingress对象,则可能会有一个解决方法
每当部署新分支时,请更新您的";dynamic_ ingress";以包括新分支的额外路径。这可以使用一个小型实用程序来实现,该实用程序可以读取和写入YAML,然后可以将其应用于更新现有Ingress,或者您可以在部署时使用kubectl patch
来更新现有Ingess
通过这种方式,Ingress定义具有静态路径,但既不必手动设置路径,也不需要多个Ingress对象
所以你会有这样的东西。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dynamic_ingress
annotations:
{...stuff here}
spec:
rules:
- host: branch.domain.tld
http:
paths:
- path: /bug_fix_nasty/
pathType: Prefix
backend:
serviceName: bug_fix_nasty
servicePort: 80
- path: /feat_cool/
pathType: Prefix
backend:
serviceName: feat_cool
servicePort: 80
查看Ingress文档中的所有示例,看看哪一个最适合你。