[英]re-route of traffic is not working with ingress controller. I feel i mis-understood the re-write annotation?
重寫注釋的問題。
嘗試使用重寫注釋。 無法得到那個工作。
apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
kind: Ingress
metadata:
name: hello-whale-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: hello.whale.info
http:
paths:
- path: /blue|/(.+)
backend:
serviceName: hello-blue-whale-svc
servicePort: 80
- path: /green|/(.+)
backend:
serviceName: hello-green-whale-svc
servicePort: 80
/Green 顯示出完美的結果,但為什么不是 /blue。
您應該在日志中看到入口總是命中相同的后端。 也許這個文檔可以幫助你。
我用兩台 nginx 服務器作為后端對自己進行了測試,一台返回藍色,另一台返回綠色:
apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
kind: Ingress
metadata:
name: hello-whale-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.org/rewrites: "serviceName=green rewrite=/;serviceName=blue rewrite=/"
spec:
rules:
- host: stardust
http:
paths:
- path: /green
backend:
serviceName: green
servicePort: 80
- path: /blue
backend:
serviceName: blue
servicePort: 80
然后,使用 curl 我可以達到正確的目標:
$ curl stardust/green
green
$ curl stardust/blue
blue
以下是入口 controller 的日志:
10.32.0.1 - - [12/Oct/2019:14:56:12 +0000] "GET /green HTTP/1.1" 200 6 "-" "curl/7.64.1" 132 0.008 [default-green-80] [] 10.32.0.28:80 6 0.008 200 b5ac38db9dd6a7e53d316dc48e9401aa
10.32.0.1 - - [12/Oct/2019:14:56:16 +0000] "GET /blue HTTP/1.1" 200 5 "-" "curl/7.64.1" 131 0.011 [default-blue-80] [] 10.32.0.12:80 5 0.012 200 c438d22db0e80a5206ca8885a48d72f9
我希望它可以幫助你。
你可以這樣嘗試嗎:路徑:/blue/(.*) – Vasily Angapov 2 天前
我想為Vasily Angapov 在問題評論中發布的正確答案添加一些解釋性的話,以便每個人都能理解為什么/blue/(.*)
實際有效以及為什么/blue|/(.+)
不起作用並且不應該在這種情況下使用。
讓我們使用正則表達式在線解釋器,它包含對表達式中使用的每個字符的詳細解釋,並讓我們嘗試將不同的字符串與給定的正則表達式匹配:
/blue|/(.+)
基本上意味着我們要匹配字符串/blue
或任何其他非零字符串。 .
表示除行終止符之外的任何字符, +
號是一個量詞,它告訴我們前一個字符在我們的字符串中可能出現多少次。 +
表示出現一個或多個前面的字符,因此表達式.+
匹配由一個或多個不同字符組成的字符串(不包括換行符)。
如果您構建一個與特定字符串匹配的入口路徑,您通常不想使用|
. 在這個特定的上下文中,這意味着您想要匹配/blue
或anything else
例如/green
、 /yellow
、 /red
...這在這種情況下沒有多大意義。 您很感興趣只匹配從/blue
開始的路徑,例如/blue/index.html
、 /blue/second.html
或blue/third.php
或只是/blue
本身您的路徑可能如下所示:
/blue/(.+)
它將匹配/blue/index.html
, /blue/1
但不單獨匹配/blue
因為.+
匹配一個或多個任意字符。
.*
另一方面匹配零個或多個任意字符,因此表達式/blue/(.*)
將匹配:
/blue
, /blue/index.html
, /blue/
, /blue/1
等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.