ASM自1.16.4版本起,支援使用ASMEgressTrafficPolicy CRD。ASMEgressTrafficPolicy定義了如何通過出口網關來管理和訪問外部流量。通過結合Sidecar和AuthorizationPolicy,您可以更全面地控制出口流量訪問。本文介紹ASMEgressTrafficPolicy CRD的YAML樣本和欄位說明。
YAML樣本
樣本一:允許通過出口網關訪問特定的外部服務
mytest命名空間下的sleep-a服務,可以通過出口網關egressgateway-a的80連接埠,訪問http://www.httpbin.org。
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a # 名稱約定:和出口網關對應。
namespace: istio-egress # 命名空間約定:固定到istio-egress命名空間。
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: mytest
workloadSelector:
app: sleep-a
to:
- name: httpbin-service-http
hosts:
- www.httpbin.org # 多個網域名稱對應DNS解析的地址一致。
- httpbin.org # 多個網域名稱對應DNS解析的地址一致。
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80 # Sidecar → 80 Gateway → 80 Service (httpbin.org)
樣本二:允許某些服務通過出口網關訪問特定的外部服務,並將HTTP請求升級為HTTPS請求
mytest命名空間下的sleep-a服務,可以通過出口網關egressgateway-a的80連接埠,訪問http://www.httpbin.org,並且發往該出口網關的80連接埠的HTTP請求將被出口網關升級為HTTPS請求。
mytest命名空間下的sleep-a服務,可以通過出口網關egressgateway-a的444連接埠,訪問https://www.httpbin.org。
mytest 命名空間下的sleep-b服務,可以通過出口網關egressgateway-a的445連接埠,訪問https://www.aliyun.com。
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a # 名稱約定:和出口網關對應。
namespace: istio-egress # 命名空間約定:固定到istio-egress命名空間。
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: mytest
workloadSelector:
app: sleep-a
to:
- name: httpbin-service-http
hosts:
- www.httpbin.org # 多個網域名稱對應DNS解析的地址一致。
- httpbin.org # 多個網域名稱對應DNS解析的地址是一致。
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80 # Sidecar → 80 Gateway → 80 Service (httpbin.org)
httpsUpgrade:
enabled: true # 若enabled為false,httpsUpgrade配置的port不生效。
port: 443 # Sidecar → 80 Gateway → 443 Service (httpbin.org)
- name: httpbin-service-https
hosts:
- www.httpbin.org
- httpbin.org
port:
name: https
number: 443
protocol: HTTPS
byEgressGateway:
port: 444
- from:
- namespace: mytest
workloadSelector:
app: sleep-b
to:
- name: aliyun-service-https
hosts:
- www.aliyun.com
port:
name: https
number: 443
protocol: HTTPS
byEgressGateway:
port: 445
欄位說明
Spec
欄位 | 類型 | 是否必須 | 說明 |
byEgressGateway | 是 | 通過哪個出口網關訪問外部服務。 | |
egressRules | 是 | Egress出口流量規則。 |
ByEgressGateway
欄位 | 類型 | 是否必須 | 說明 |
name | string | 是 | 出口網關的名稱。建議網關名稱不超過32個字元。 |
port | uint32 | 否 | 出口網關的某個連接埠。 |
EgressRule
欄位 | 類型 | 是否必須 | 說明 |
name | string | 否 | 規則名稱。 |
from | From[] | 是 | 出口流量的訪問來源,即請求發起者。 |
to | To[] | 是 | 出口流量的目標,即請求的外部目標服務。 |
From
欄位 | 類型 | 是否必須 | 說明 |
namespace | string | 是 | 請求來源(發起者)服務所在的命名空間。 |
workloadSelector | map[string]string | 否 | 出口流量的訪問來源服務的篩選器,通過Label匹配需要包含的服務。 |
To
欄位 | 類型 | 是否必須 | 說明 |
name | string | 是 | 外部服務的名稱。 |
hosts | string[] | 是 | 外部服務的網域名稱。支援配置多個網域名稱,但需指向同一個網站。 |
port | 是 | 外部服務的連接埠。 | |
byEgressGateway | 是 | 通過出口網關的某個連接埠號碼訪問外部服務。 | |
httpsUpgrade | 否 | 是否升級為HTTPS請求。業務發起的HTTP外部請求將被出口網關升級為HTTPS請求。 |
HttpsUpgrade
欄位 | 類型 | 是否必須 | 說明 |
enabled | bool | 是 | 是否升級為HTTPS。 |
port | uint32 | 是 | 外部服務的HTTPS連接埠。 |