簡體   English   中英

Kubernetes Nginx Ingress刪除部分URL

[英]Kubernetes Nginx Ingress removing part of URL

我正在Kubernetes中(在AKS上)部署一個簡單的應用程序,該應用程序位於使用Nginx的Ingress后面,並使用Nginx掌舵圖進行了部署。 我有一個問題,由於某種原因,Nginx似乎沒有將完整的URL傳遞給后端服務。

例如,我的Ingress是使用http://app.client.com的URL設置的,並且/ app1g的路徑為http://app.client.com/app1可以正常工作。 但是,如果我嘗試轉到http://app.client.com/app1/service1,而我最終只訪問了http://app.client.com/app1 ,則該路徑后似乎剝奪了所有內容。

我的入口看起來像這樣:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
  creationTimestamp: "2019-04-03T12:44:22Z"
  generation: 1
  labels:
    chart: app-1.1
    component: app
    hostName: app.client.com
    release: app
  name: app-ingress
  namespace: default
  resourceVersion: "1789269"
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/app-ingress
  uid: 34bb1a1d-560e-11e9-bd46-9a03420914b9
spec:
  rules:
  - host: app.client.com
    http:
      paths:
      - backend:
          serviceName: app-service
          servicePort: 8080
        path: /app1
  tls:
  - hosts:
    - app.client.com
    secretName: app-prod
status:
  loadBalancer:
    ingress:
    - {}

如果我移植到該服務並直接點擊該服務,它將起作用。

所以我找到了答案。 從Nginx v0.22.0開始,您似乎需要使用捕獲組來捕獲請求URI中的任何子字符串。 在0.22.0之前,僅使用nginx.ingress.kubernetes.io/rewrite-target: /用於任何子字符串。 現在沒有。 我需要修改入口才能使用此功能:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
  creationTimestamp: "2019-04-03T12:44:22Z"
  generation: 1
  labels:
    chart: app-1.1
    component: app
    hostName: app.client.com
    release: app
  name: app-ingress
  namespace: default
  resourceVersion: "1789269"
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/app-ingress
  uid: 34bb1a1d-560e-11e9-bd46-9a03420914b9
spec:
  rules:
  - host: app.client.com
    http:
      paths:
      - backend:
          serviceName: app-service
          servicePort: 8080
        path: /app1/?(.*)
  tls:
  - hosts:
    - app.client.com
    secretName: app-prod
status:
  loadBalancer:
    ingress:
    - {}

刪除此行應該可以解決您的問題:

nginx.ingress.kubernetes.io/rewrite-target: /

重寫目標注釋將完全按照其說明:重寫您的命中“ /”位置的請求。 有關重寫target,請參見nginx-ingress文檔

暫無
暫無

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

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