Kubernetes nginx ingress: как перенаправить foo.example.org на example.org?
Мой вход сейчас выглядит так:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- example.org
- app.example.org
secretName: prod-tls
rules:
- host: example.org
http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 80
- host: app.example.org
http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 80
Но теперь я хочу перенаправить
app.example.org
к
example.org
вместо. Как я могу это сделать?
Я нашел этот пример, используя
ingress.kubernetes.io/configuration-snippet
но я не знаю, к каким доменам это относится?
Я использую Helm
nginx-ingress-1.37.0
; версия приложения 0.32.0.
3 ответа
Для Kubernetes 1.19 и более поздних версий этот вход перенаправит весь трафик с app.example.org на example.org:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
return 301 $scheme://example.org$request_uri;
name: ingress-redirect
spec:
ingressClassName: nginx
tls:
- hosts:
- app.example.org
secretName: prod-tls
rules:
- host: app.example.org
Входящий контроллер версии 0.22.0 или выше используетnginx.ingress.kubernetes.io/rewrite-target
вместоingress.kubernetes.io/configuration-snippet
. Итак, это будет новый ответ @mdaniel:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- example.org
secretName: prod-tls
rules:
- host: example.org
http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-redirect
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: "https://example.org/$1"
spec:
tls:
- hosts:
- app.example.org
secretName: prod-tls
rules:
- host: app.example.org
http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 80
Я нашел этот пример, используя
ingress.kubernetes.io/configuration-snippet:
но я не знаю, к каким доменам это относится?
Об этой конфигурации легче рассуждать, когда у вас есть два Ingress, один только для "размещения"
configuration-snippet:
а другой для выполнения настоящей работы:
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- example.org
secretName: prod-tls
rules:
- host: example.org
http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-redirect
annotations:
kubernetes.io/ingress.class: nginx
# this should be covered by the annotation on the other ingress
# since it will renew the same certificate
# cert-manager.io/cluster-issuer: letsencrypt-prod
ingress.kubernetes.io/configuration-snippet: |
rewrite ^/(.*)$ https://example.org/$1 permanent;
spec:
tls:
- hosts:
- app.example.org
secretName: prod-tls
rules:
- host: app.example.org
http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 80