NGINX Ingress Controller提供多种服务,用于分支式部署

时间:2020-03-19 08:22:50

标签: regex kubernetes kubernetes-ingress nginx-ingress eks

我的情况是,我在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



1 个答案:

答案 0 :(得分:0)

Nginx入口不能以这种方式工作,serviceNamehost都不能有正则表达式。

来自NGINX docs

spec.rules.host字段中不支持正则表达式和通配符。必须使用完整的主机名。

您只能在path字段中使用正则表达式

入口控制器在spec.rules.http.paths.path字段中支持不区分大小写正则表达式。可以通过将nginx.ingress.kubernetes.io/use-regex批注设置为true(默认值为false)来启用此功能。

如果您需要动态地控制serviceNamehost,我强烈建议您使用某种自动化方式(可以是jenkins,bash脚本等)或HELM的模板,将在部署时进行修改。

参考文献:

https://kubernetes.github.io/ingress-nginx/user-guide/ingress-path-matching/