ASM網關或網格代理在特定情況下,可能直接向下遊返回帶有特定響應碼的HTTP響應,而不會將請求代理到上遊服務。CustomLocalReply
外掛程式可以自訂ASM網關或網格代理在直接向下遊響應時的響應體、響應碼以及響應內容。對於每種響應碼,可以分別定義不同的響應內容。
前提條件
已部署入口網關。具體操作,請參見建立入口網關。
已在資料面叢集部署httpbin服務。具體操作,請參見部署httpbin應用。
配置欄位
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
patch_context | string | 必填 | - | 指定外掛程式啟動並執行上下文環境,有兩種可選值:
需要根據您實際將外掛程式綁定到的工作負載類型(ASM網關或具體業務工作負載)來選擇。 |
custom_error_pages | CustomErrorPage[] | 必填 | - | 一個CustomErrorPage對象的列表,每個CustomErrorPage對象指定了匹配的直接返迴響應碼、以及匹配到響應碼後需要返回的響應內容。 |
CustomErrorPage欄位說明
當ASM網關無法找到能夠匹配請求的路由項時,將返回
404
響應碼當ASM網關或網格代理配置了授權策略,且請求被授權策略拒絕時,將返回
403
響應碼,響應內容固定為RBAC: Access Denied
當在虛擬服務中配置了
directResponse
時,ASM網關或網格代理會直接返回指定的響應碼及響應體。
名稱 | 資料類型 | 填寫要求 | 預設值 | 描述 |
match_status_code | int | 必填 | - | 匹配的直接返迴響應碼,當ASM網關或網格代理返回此處指定的響應碼時,將應用指定的配置來返回預定義的響應體。 |
return_status_code | int | 必填 | - | 實際向下遊返回的響應碼。 |
content_type | string | 必填 | - | 實際向下遊返回的 |
headers | map[string]string | 選填 | null | 自訂響應中的回應標頭。 |
body | string | 必填 | - | 自訂響應中的響應體。 |
配置樣本
在ASM執行個體中部署如下的虛擬服務:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: httpbin
namespace: default
spec:
gateways:
- httpbin-gateway
hosts:
- '*'
http:
- directResponse:
body:
string: not found
status: 404
上述的虛擬服務通過配置一個directResponse
來讓ASM網關直接返回一個404響應,而不將請求轉寄到上遊服務。
使用如下的配置資料開啟CustomLocalReply
外掛程式,並將外掛程式生效到名為ingressgateway的ASM入口網關上。
patch_context: GATEWAY
custom_error_pages:
- match_status_code: 404
return_status_code: 301
headers:
location: 'https://www.aliyun.com'
content_type: text/html; charset=UTF-8
body: moved
這個配置會在ASM網關直接返回404響應碼時,將響應修改為一個301(Moved Permanently)響應,並在回應標頭中設定location: https://www.aliyun.com
,讓瀏覽器跳轉到https://www.aliyun.com
。
使用瀏覽器訪問ASM網關IP地址,可以發現瀏覽器跳轉到了阿里雲官方網站https://www.aliyun.com
,說明外掛程式生效。