我的情况是,我在EKS 1.14中有一个分支明智的部署,我想使用“ regex”和Nginx ingress来处理。
场景:-假设我有一个分支B1,带有service_A(apache服务),同样在B2下,带有service_A((apache服务),依此类推,等等),并希望通过URL访问该服务,例如:-apache- {branch_name} .example .com 注意:-分支B1 / B2只是运行相同服务的唯一名称空间。
我需要一个可以控制所有不同分支URL的单一入口
我的示例文件:-
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: regex-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- '*.k8s.example.com'
secretName: prod-crt
rules:
- host: {service_A-b1}.k8s.acko.in
http:
paths:
- backend:
serviceName: {service_A-b1}
servicePort: 80
- host: {service_A-b2}.k8s.acko.in
http:
paths:
- backend:
serviceName: {service_A-b2}
servicePort: 80
答案 0 :(得分:0)
Nginx入口不能以这种方式工作,serviceName
和host
都不能有正则表达式。
来自NGINX docs:
spec.rules.host
字段中不支持正则表达式和通配符。必须使用完整的主机名。
您只能在path
字段中使用正则表达式 :
入口控制器在
spec.rules.http.paths.path
字段中支持不区分大小写正则表达式。可以通过将nginx.ingress.kubernetes.io/use-regex
批注设置为true
(默认值为false)来启用此功能。
如果您需要动态地控制serviceName
和host
,我强烈建议您使用某种自动化方式(可以是jenkins,bash脚本等)或HELM的模板,将在部署时进行修改。
参考文献:
https://kubernetes.github.io/ingress-nginx/user-guide/ingress-path-matching/