NGINX Ingress Controller for multiple service for branch wise deployment

3/19/2020

I my case, I have a branch wise deployment in EKS 1.14 and I want to handle this with "regex" & Nginx ingress.

Scenario:- Let's say I have Branch B1 with service_A(apache service), Similarly under B2 with service_A((apache service) and so on and want to access the service via URL like:- apache-{branch_name}.example.com Note :- Branch B1/B2 is nothing but unique namespaces where same kind of service is running.

I need single ingress from where I can control all different branch URL

My example file:-

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
-- me25
eks
kubernetes
kubernetes-ingress
nginx-ingress
regex

1 Answer

3/23/2020

Nginx ingress don't work in this way, is not possible to have regex in serviceName neither host.

From NGINX docs:

Regular expressions and wild cards are not supported in the spec.rules.host field. Full hostnames must be used.

You can use regex only in path field:

The ingress controller supports case insensitive regular expressions in the spec.rules.http.paths.path field. This can be enabled by setting the nginx.ingress.kubernetes.io/use-regex annotation to true (the default is false).

If you need to control your serviceName and host dinamically I strong recommend use some kind of automation (could be jenkins, bash script etc...) or templates by HELM which will modify at deployment time.

References:

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

-- KoopaKiller
Source: StackOverflow