ASMEgressTrafficPolicy CRD说明

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

ByEgressGateway

通过哪个出口网关访问外部服务。

egressRules

EgressRule[]

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

Port

外部服务的端口。

byEgressGateway

ByEgressGateway

通过出口网关的某个端口号访问外部服务。

httpsUpgrade

HttpsUpgrade

是否升级为HTTPS请求。业务发起的HTTP外部请求将被出口网关升级为HTTPS请求。

HttpsUpgrade

字段

类型

是否必须

说明

enabled

bool

是否升级为HTTPS。

port

uint32

外部服务的HTTPS端口。

相关文档

使用ASMEgressTrafficPolicy管理出口流量