Настройте Kubernetes Traefik Ingress с различными переписями путей для каждой службы

Я выполняю миграцию нашего приложения из конфигурации одного экземпляра Docker-compose в Kubernetes. В настоящее время у меня есть следующая конфигурация NGINX, работающая как обратный прокси моего приложения:

server {
  server_name             example.com;
  ssl_certificate         /etc/nginx/certs/${CERT_NAME};
  ssl_certificate_key     /etc/nginx/certs/${KEY_NAME};

  listen                  443 ssl;
  keepalive_timeout       70;

  access_log              /var/log/nginx/access.log mtail;

  ssl_protocols           xxxxxx
  ssl_ciphers             xxxxxx
  ssl_session_cache       shared:SSL:10m;
  ssl_session_timeout     10m;

  rewrite_log             on;
  resolver                127.0.0.11 ipv6=off;

  location /push/ {
        auth_basic                    "Restricted";
        auth_basic_user_file          /etc/nginx/htpasswd;
        rewrite /push/(.*)        /index.php/$1 break;
        proxy_pass                    pushinterface:3080;
  }

  location /flights/ {
        rewrite /flights/(.*)         /$1 break;
        proxy_pass                    flightstats:3090;
  }

  location /api/ {
        proxy_pass                    $api;
  }

  location /grafana/ {
        access_log                    off;
        log_not_found                 off;
        proxy_pass                    http://grafana:3000;
        rewrite ^/grafana/(.*)        /$1 break;
  }

}

Мои первоначальные планы для обратной прокси-части выполняли вход с NGINX но я видел, что моя конфигурация может быть создана как Ingress только с NGINX Plus. Вот почему я решил попробовать с Traefik, но я не уверен, что все еще возможно иметь разные перезаписи пути для каждой службы.

Я пробовал следующую конфигурацию Ingress, но кажется, что она не работает:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-traefik 
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: ReplacePathRegex
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: pushinterface
          servicePort: 80
        path: /push/(.*) /index/$1
      - backend:
          serviceName: flights
          servicePort: 80
        path: /flights/(.*) /$1
       - backend:
          serviceName: api
          servicePort: 80
        path: /api
      - backend:
          serviceName: grafana
          servicePort: 80
        path: /grafana/(.*) /$1

Буду признателен за любую помощь в решении этой задачи

0
задан 13 August 2018 в 15:43

1 ответ

Использование типа правила ReplacePathRegex в вашем примере не гарантирует, что входящие запросы будут перенаправлены на целевые серверы, как указано в документации Traefik.

Чтобы направлять запросы к конечным точкам, используйте Документация вместо правил Modifiers, поскольку они предназначены для этой цели.

Найдите отдельное обсуждение этой проблемы здесь.

0
ответ дан 15 August 2018 в 17:00
  • 1
    Большое спасибо. Не могли бы вы привести пример кода для Ingress, потому что я не могу найти подходящий пример использования Matches in Ingresses? – Alessandro Kopeldaci 14 August 2018 в 17:22

Другие вопросы по тегам:

Похожие вопросы: