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端口。 |