簡體   English   中英

為Kubernetes Traefik Ingress配置每個服務的不同路徑重寫

[英]Configure Kubernetes Traefik Ingress with different path rewrites for each service

我正在將我們的應用程序從單實例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入口控制器實現一個入口,但是我看到我的配置只能使用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

感謝您為解決此任務提供的幫助

使用ReplacePathRegex在你的榜樣規則類型並不保證傳入的請求將被轉發到目標后端,如Traefik提到的文檔

為了將請求路由到端點,請使用Matcher而不是Modifiers規則,因為它們是為此目的而設計的。

此處找到有關類似問題的單獨討論。

經過數小時未能成功解決我的問題的嘗試,我使用Nginx入口控制器完成了它,並且效果很好! 這是入口配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite /push/(.*) /index/$1 break;
      rewrite /flights/(.*) /$1 break;
      rewrite /grafana/(.*) /$1 break;

spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: pushinterface
          servicePort: 80
        path: /push
      - backend:
          serviceName: flights
          servicePort: 80
        path: /flights
       - backend:
          serviceName: api
          servicePort: 80
        path: /api
      - backend:
          serviceName: grafana
          servicePort: 80
        path: /grafana

感謝大家的答案! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM