Kubernetes NGINX Ingress configmap 301 редирект

Используя NGINX Ingresss в Kubernetes, я не вижу способа перенаправить свой трафик с не www на www или на другой домен и т. Д. Для каждого хоста.

Я пробовал искать в документации configmap, но не вижу, что мне нужно. Может может в сам ингресс зайти?

Я также видел пример с использованием аннотаций, но он, похоже, распространяется на весь вход, поэтому у меня не может быть конкретных перенаправлений для каждого хоста.


person Ben Gannaway    schedule 28.11.2018    source источник


Ответы (2)


Действительно, перенаправление возможно с помощью простой аннотации:

Но, как вы упомянули, это "Ingress" широкий и не настраивается для каждого хоста, для домена или даже для каждого пути. Поэтому вам придется сделать это самостоятельно через ingress.kubernetes.io/configuration-snippet, которая дает вам большие возможности благодаря регулярным выражениям:

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: self-made-redirect
  annotations:
    ingress.kubernetes.io/configuration-snippet: |
      if ($host = 'blog.yourdomain.com') {
        return 301 https://yournewblogurl.com;
      }
      if ($host ~ ^(.+)\.yourdomain\.com$) {
        return 301 https://$1.anotherdomain.com$request_uri;
      }
spec:
  rules:
  - host: ...

Если вы не совсем привыкли к NGINX, вы узнаете больше о возможностях этого фрагмента, особенно о переменной $host прямо в документацию NGINX.

person Clorichel    schedule 28.11.2018
comment
Я только что развернул это, и он отлично работает, спасибо! - person Ben Gannaway; 28.11.2018
comment
Не знаю, было ли раньше иначе, но теперь было довольно сложно найти рабочее решение. Этот ответ помог больше всего, но некоторые вещи нужно изменить: это не ingress.kubernetes.io/configuration-snippet, это nginx.ingress.kubernetes.io/configuration-snippet - person Boyko Karadzhov; 23.04.2020

Для перенаправления всего трафика независимо от использования HTTP или HTTPS с example.com и www.example.com на newdomain.example .com Я пришел к следующему решению.

В этом примере я также использую cert-manager.io для запроса сертификатов для www.example.com и example.com.

Перенаправление выполняется с использованием аннотации nginx. ingress.kubernetes.io/permanent-redirect

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: redirect-example-to-newdomain
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/permanent-redirect: https://newdomain.example.com
spec:
  tls:
    - hosts:
      - example.com
      - www.example.com
      secretName: example.com-tls
  rules:
    - host: example.com
    - host: www.example.com
person 0xC0DEBA5E    schedule 12.01.2021