ASM支持在HTTP請求發往具體的服務主機前,重寫請求的Authority和Host標頭。如果通過虛擬服務將請求重定向到其它服務,還需要配置重寫Host與Authority標頭使目標服務接受請求。本文介紹如何配置重寫請求的Authority和Host標頭。
前提條件
已完成準備工作,并部署httpbin服務、sleep服務和nginx服務。具體操作,請參見準備工作。
操作步驟
使用istioctl工具,執行以下命令,為nginx服務部署Waypoint代理。
istioctl x waypoint apply --service-account nginx
預期輸出:
waypoint default/nginx applied
為nginx服務配置虛擬服務,將發往nginx服務的請求轉發至httpbin服務,同時配置重寫Host和Authority標頭為
httpbin:8000
。登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 ,然后單擊創建。
在創建頁面,進行如下配置,單擊預覽,確認YAML內容無誤后,單擊確認,然后單擊創建。
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: nginx namespace: default spec: hosts: - nginx.default.svc.cluster.local http: - rewrite: authority: 'httpbin:8000' route: - destination: host: httpbin.default.svc.cluster.local
執行以下命令,驗證標頭重寫是否生效。
kubectl exec -it deploy/sleep -- curl nginx:8000/headers
預期輸出:
{ "headers": { "Accept": "*/*", "Host": "httpbin:8000", "User-Agent": "curl/8.1.2" } }
可以看到在sleep容器內部訪問nginx服務的
/headers
路徑,請求被轉發到httpbin服務的/headers
路徑上(即請求發往http://httpbin:8000/headers
)。該路徑會返回接收到的請求標頭,您可以看到請求的Host標頭被修改為httpbin:8000
。重要在Ambient模式下,若您需要重寫請求的Authority和Host標頭,將發往目標服務1的請求轉發到目標服務2,則目標服務2不能部署Waypoint代理。
文檔內容是否對您有幫助?