DirectResponse外掛程式支援對發往指定服務的指定路徑的HTTP請求,不再向服務轉寄請求,而是立即返回固定的響應內容。此外掛程式可以選擇生效至網關或注入Sidecar的工作負載。當綁定至網關時,將對請求的網域名稱、連接埠、路徑進行匹配;當綁定至注入Sidecar的工作負載時,將對請求發往的連接埠和路徑進行匹配。
前提條件
已部署入口網關。具體操作,請參見建立入口網關。
已在資料面叢集部署httpbin服務。具體操作,請參見部署httpbin應用。
配置欄位
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
patch_context | string | 必填 | - | 指定外掛程式的生效情境,根據外掛程式的具體生效範圍指定, 有兩個取值:
|
host | string | 選填 | - | 該參數指定需要直接響應的網域名稱。
重要 該參數指定的網域名稱必須在應用於網關的 |
port | string | 必填 | - | 該參數指定請求發往的服務連接埠。
|
path | string | 必填 | - | 該參數指定請求發往的路徑,比如 |
response | string | 必填 | - | 該參數指定直接響應返回的響應體內容。 |
response_status | string | 必填 | - | 該參數指定直接響應返回的響應狀態代碼。 |
配置樣本
為網關配置直接響應
可以直接在網關上啟用DirectResponse外掛程式、配置直接響應,當網關匹配到發往指定的host及path的內容時,將直接返回指定的響應內容,而不再將請求轉寄至具體服務。
對於樣本中的httpbin應用來說,應用於網關的VirtualService如下:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: httpbin
spec:
hosts:
"*"
gateways:
httpbin-gateway
http:
route:
destination:
host: httpbin
port:
number: 8000
VirtualServicehttpbin在hosts欄位中指定匹配網域名稱為*,因此可以配置外掛程式參數如下:
patch_context: GATEWAY #在此樣本中,外掛程式生效於網關,需指定patch_context為GATEWAY
host: "*" #VirtualService httpbin中僅指定了host "*",因此外掛程式中匹配的host也只能填寫"*"
port: "80" #填寫網關的監聽連接埠80
path: /get #匹配一個指定路徑 /get進行直接響應
response: test #可填寫任一字元串作為直接響應的內容,樣本中使用"test"
response_status: "200" #可填寫有效狀態代碼,作為直接響應的響應狀態代碼
選擇外掛程式的生效範圍為網關生效,並選擇生效至網關ingressgateway。測試如下:
$ curl {網關ip地址}/get
test
當訪問網關且路徑為/get時,可以看到網關直接返回了指定的響應內容“test”,而沒有進一步將請求轉寄給httpbin服務。
為httpbin服務配置直接響應
也可以在httpbin服務上啟用DirectResponse外掛程式、配置直接響應,當請求發送到httpbin服務的指定path時,將直接返回指定的響應內容,而不再將請求交給工作負載處理。
在樣本中使用的httpbin服務定義如下,其服務連接埠為8000:
apiVersion: v1
kind: Service
metadata:
name: httpbin
labels:
app: httpbin
service: httpbin
spec:
ports:
name: http
port: 8000
targetPort: 80
selector:
app: httpbin
由於外掛程式生效於具體工作負載,因此不再需要為外掛程式配置host參數指定匹配網域名稱。配置外掛程式參數如下:
patch_context: SIDECAR_INBOUND #在此樣本中,外掛程式生效於httpbin服務,需要將patch_context指定為SIDECAR_INBOUND
port: "8000" #填寫httpbin的服務連接埠:8000
path: /get #匹配一個指定路徑 /get進行直接響應
response: test #可填寫任一字元串作為直接響應的內容,樣本中使用"test"
response_status: "200" #可填寫有效狀態代碼,作為直接響應的響應狀態代碼
選擇外掛程式的生效範圍為工作負載生效,並選擇生效至httpbinService。測試如下:
$ curl {網關ip地址}/get
test測試效果與網關的直接響應相同,但此樣本中是網關轉寄給httpbin服務的Sidecar後,由Sidecar進行的直接響應。