marcus
marcus

Reputation: 10086

Map Kubernetes ingress subdomain host to path in service

I have the following ingress controller and the host that contains api answers to this url https://api.example.com/docs.

Now I would like to configure this nginx ingress access the /docs endpoint using https://docs.example.com. I have tried to use the annotation rewrite-target but I can't figure out how to accomplish this.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/acme-challenge-type: dns01
    certmanager.k8s.io/cluster-issuer: letsencrypt
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            backend:
              serviceName: web-service
              servicePort: 80
    - host: api.example.com
      http:
        paths:
          - path: /
            backend:
              serviceName: api-service
              servicePort: 80
  tls:
  - hosts:
    - example.com
    secretName: example.com

Upvotes: 4

Views: 1875

Answers (1)

Wytrzymały Wiktor
Wytrzymały Wiktor

Reputation: 13878

What you need here is the app-root annotation. If you use something like this:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    annotations:
        nginx.ingress.kubernetes.io/app-root: /docs

incoming requests at example.com/ will be rewritten internally to example.com/docs.

Please let me know if that helped.

Upvotes: 1

Related Questions