Как перенаправить URL-адрес в URL-адрес без www, используя nginx-ingress-controller? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь получить URL www.example.com на , перенаправить на example.com , сохраняя при этом все об исходном запросе в k8s 1.11.1

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

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/permanent-redirect: https://example.com
    nginx.ingress.kubernetes.io/ssl-redirect: "True"
  name: example-redirect
spec:
  tls:
  - hosts:
    - www.example.com
    secretName: example-tls
  rules:
  - host: www.example.com
    http:
      paths:
      - backend:
          serviceName: example
          servicePort: http

Проблема здесь в том, что я не хочу иметь никаких правил / бэкэнда.Я просто хочу перенаправить www.example.com на example.com с помощью Ingress, но k8s Ingresses требуют от меня наличия правил.Есть ли обходные пути здесь?

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Следующие должны сделать:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($host = 'www.example.com' ) {
        rewrite ^ https://example.com$request_uri permanent;
      }
  name: example-redirect
spec:
  tls:
  - hosts:
    - www.example.com
    secretName: example-tls
  rules:
  - host: www.example.com
    http:
      paths:
      - backend:
          serviceName: example
          servicePort: http
0 голосов
/ 30 мая 2019

На самом деле ресурс Ingress имеет строго определенные предпосылки для соответствующей спецификации API . Вы можете исключить поле rules: из общей конфигурации, однако следует обязательно указать backend:, чтобы Контроллер входа Nginx мог направлять сетевой трафик к целевой конечной точке, если правила не объявлены или не соответствуют.

Всякий раз, когда вы создаете какие-либо конкретные настройки для контроллера Nginx Ingress либо через Аннотации или ConfigMaps , оба варианта выполняют одну и ту же работу по применению некоторой конкретной конфигурации к базовому nginx.conf файл, который находится на nginx-ingress-controller Pod. Это означает, что контроллер Ingress применяет блоки server {} и location {} к соответствующему модулю веб-сервера Nginx для определенного хоста:

server {
        server_name www.example.com ;

        listen 80;

        listen [::]:80;

        set $proxy_upstream_name "-";

        listen 443  ssl http2;

        listen [::]:443  ssl http2;

        .............

        location / {

            set $namespace      "default";
            set $ingress_name   "example-redirect";
            set $service_name   "example";
            set $service_port   "http";
            set $location_path  "/";
            ......................
                   }
       }

Поэтому я полагаю, что вы можете захватить файл nginx.conf на основе конфигурации ресурса Ingress и затем применить его независимо внутри модуля контроллера Ingress.

Я предполагаю, что вы также можете рассмотреть возможность использования nginx.ingress.kubernetes.io/from-to-www-redirect: "true" аннотации для достижения цели в текущем сценарии.

...