全部產品
Search
文件中心

Alibaba Cloud Service Mesh:DirectResponse外掛程式

更新時間:Oct 31, 2024

DirectResponse外掛程式支援對發往指定服務的指定路徑的HTTP請求,不再向服務轉寄請求,而是立即返回固定的響應內容。此外掛程式可以選擇生效至網關或注入Sidecar的工作負載。當綁定至網關時,將對請求的網域名稱、連接埠、路徑進行匹配;當綁定至注入Sidecar的工作負載時,將對請求發往的連接埠和路徑進行匹配。

前提條件

配置欄位

名稱

資料類型

填寫要求

預設值

描述

patch_context

string

必填

-

指定外掛程式的生效情境,根據外掛程式的具體生效範圍指定, 有兩個取值:

  • SIDECAR_INBOUND:在具體工作負載中生效。

  • GATEWAY: 在網關中生效。

host

string

選填

-

該參數指定需要直接響應的網域名稱。

  • 當外掛程式生效至網關時,必須填寫此參數。

  • 當外掛程式生效至工作負載時則不需要。

重要

該參數指定的網域名稱必須在應用於網關的VirtualService的hosts欄位中同樣進行指定。

port

string

必填

-

該參數指定請求發往的服務連接埠。

  • 當外掛程式生效至網關時,此參數為網關監聽連接埠。

  • 當外掛程式生效至具體工作負載時,此參數為工作負載對應的服務連接埠

path

string

必填

-

該參數指定請求發往的路徑,比如/productpage

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

VirtualServicehttpbinhosts欄位中指定匹配網域名稱為*,因此可以配置外掛程式參數如下:

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進行的直接響應。