Service Mesh (ASM) インスタンスバージョン 1.16.4 以降では、ASMEgressTrafficPolicy カスタムリソース定義 (CRD) を使用できます。この CRD は、エグレスゲートウェイが外部トラフィックへのアクセスを管理する方法を定義します。サイドカープロキシと権限付与ポリシーを組み合わせて使用することで、トラフィックシェーピングを強化できます。このトピックでは、YAML の例を示し、ASMEgressTrafficPolicy CRD のフィールドについて説明します。
YAML の例
例 1: エグレスゲートウェイを介した特定の外部サービスへのアクセスを許可する
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 によって同じ IP アドレスに解決される必要があります。
- httpbin.org # 複数のドメイン名は、DNS によって同じ IP アドレスに解決される必要があります。
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80 # サイドカー → 80 ゲートウェイ → 80 サービス (httpbin.org)例 2: 一部のサービスがエグレス ゲートウェイを介して特定の外部サービスにアクセスし、HTTP リクエストを HTTPS リクエストにアップグレードできるようにする
mytest 名前空間の sleep-a サービスは、egressgateway-a という名前のエグレスゲートウェイのポート 80 で http://www.httpbin.org にアクセスできます。エグレスゲートウェイは 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 によって同じ IP アドレスに解決される必要があります。
- httpbin.org # 複数のドメイン名は、DNS によって同じ IP アドレスに解決される必要があります。
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80 # サイドカー → 80 ゲートウェイ → 80 サービス (httpbin.org)
httpsUpgrade:
enabled: true # enabled が false に設定されている場合、httpsUpgrade で指定されたポートは有効になりません。
port: 443 # サイドカー → 80 ゲートウェイ → 443 サービス (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例 3: HTTP および TCP を介して外部サービスにアクセスし、エグレスゲートウェイポートを自動的に割り当てる
バージョン 1.24.6.45 以降、ASMEgressTrafficPolicy を使用して TCP を使用する外部サービスを構成できます。TCP サービスごとに異なるエグレスゲートウェイポートが必要なため、ASM はエグレスゲートウェイのリダイレクトポートの自動割り当てをサポートしています。割り当てのデフォルトのポート範囲は 10000 から 20000 です。これらのポートを手動で変更する必要はありません。これらのポートはサービスに影響しません。次のサンプルコードに例を示します。
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: default
workloadSelector:
app: sleep
to:
- name: aliyun-com-http # http ルート
hosts:
- aliyun.com
port:
name: http
number: 80
protocol: HTTP
- name: aliyun-https # https ルート
hosts:
- aliyun.com
port:
name: https
number: 443
protocol: HTTPS
- name: https-upgrade # http から https へのスペックアップ
hosts:
- taobao.com
port:
name: http
protocol: HTTP
number: 80
httpsUpgrade:
enabled: true
port: 443
- name: tcp-svc1 # tcp svc 1
hosts:
- 1.1.1.1
port:
name: tcp
protocol: TCP
number: 44
- name: tcp-svc2 # tcp svc 2
hosts:
- test-tcp.com
port:
name: tcp
protocol: TCP
number: 444ドメイン名を使用して外部 TCP サービスにアクセスするには、ASM DNS プロキシ機能が有効になっていることを確認してください。詳細については、「ASM で DNS プロキシを使用する」をご参照ください。
フィールドの説明
Spec
フィールド | タイプ | 必須 | 説明 |
byEgressGateway | はい | 外部サービスへのアクセスに使用されるエグレスゲートウェイ。 | |
egressRules | はい | エグレストラフィックルール。 |
ByEgressGateway
フィールド | タイプ | 必須 | 説明 |
name | string | はい | エグレスゲートウェイの名前。ゲートウェイ名は 32 文字を超えないようにすることをお勧めします。
|
port | uint32 | いいえ | エグレスゲートウェイのポート。
|
EgressRule
フィールド | タイプ | 必須 | 説明 |
name | string | いいえ | ルールの名前。 |
from | From[] | はい | エグレス トラフィックの送信元 (リクエストの開始者)。 |
to | To[] | はい | エグレス トラフィックの宛先 (リクエストの外部ターゲット サービス)。 |
From
フィールド | タイプ | 必須 | 説明 |
namespace | string | はい | リクエストを開始するサービスが存在するネームスペース。 |
workloadSelector | map[string]string | いいえ | ラベルに基づいてエグレストラフィックのソースサービスを選択するために使用されるフィルター。 |
To
フィールド | タイプ | 必須 | 説明 |
name | string | はい | 外部サービスの名前。 |
hosts | string[] | はい | 外部サービスのドメイン名。複数のドメイン名を設定できますが、それらは同じサイトを指している必要があります。 |
port | はい | 外部サービスのポート。 | |
byEgressGateway | はい | エグレスゲートウェイの特定のポートを介して外部サービスにアクセスします。
| |
httpsUpgrade | いいえ | リクエストを HTTPS にスペックアップするかどうかを指定します。サービスが外部サービスにアクセスするために開始した HTTP リクエストは、エグレスゲートウェイによって HTTPS リクエストにスペックアップされます。 |
HttpsUpgrade
フィールド | タイプ | 必須 | 説明 |
enabled | bool | はい | リクエストを HTTPS にスペックアップするかどうかを指定します。 |
port | uint32 | はい | 外部サービスの HTTPS ポート。 |