MseIngressConfig は、MSE Ingress Controller によって提供されるカスタムリソース定義 (CRD) であり、MSE クラウドネイティブゲートウェイインスタンスのライフサイクルを管理し、Ingress リスナーオプションとグローバル設定を構成します。このトピックでは、MSE クラウドネイティブゲートウェイインスタンスの作成、再利用、削除、アクセス制御のためのグローバルなインスタンスレベルの IP ブラックリストとホワイトリストの構成、Simple Log Service (SLS) ログの有効化、OpenTelemetry トレースの有効化など、MseIngressConfig の一般的な使用方法について説明します。
背景情報
MSE Ingress Controller は、クラスターで作成された MseIngressConfig リソースをリッスンします。対応するクラウドネイティブゲートウェイインスタンスのライフサイクルと、ACK マネージドクラスター、Serverless Kubernetes クラスター、または ACS クラスターとの関連付けを動的に維持します。
MSE クラウドネイティブゲートウェイのコントロールプレーンは、ACK マネージドクラスター、Serverless Kubernetes クラスター、または ACS クラスターの API サーバーと関連付けることで、Ingress リソースの変更を検出し、ゲートウェイのルーティングルールを動的に更新できます。リクエストを受信すると、MSE クラウドネイティブゲートウェイは Ingress 転送ルールに一致させ、リクエストをバックエンド Service に対応する Pod に転送します。
次のリストは、Kubernetes における Service、Ingress、IngressClass、MseIngressConfig、および MSE Ingress Controller の関係を説明しています。
Service: 実際のバックエンドサービスの抽象化です。Service は、複数の同一のバックエンドサービスを表すことができます。
Ingress: HTTP または HTTPS リクエストをどの Service に転送すべきかを指定するリバースプロキシルールです。たとえば、リクエストのホストと URL パスに基づいて、リクエストを異なる Service に転送できます。
IngressClass: Kubernetes クラスターで Ingress プロセッサーの実装を宣言するために使用される Ingress プロセッサーの説明です。この IngressClass に関連付けられた Ingress リソースは、宣言された Ingress プロセッサーによって解析されます。解析された Ingress リソースで定義されたトラフィック管理ルールを適用するには、IngressClass の Parameter フィールドを介して MseIngressConfig (MSE クラウドネイティブゲートウェイ) を関連付ける必要もあります。
MseIngressConfig: MSE Ingress Controller によって提供される CRD で、クラウドネイティブゲートウェイインスタンスの基本情報を記述します。
MSE Ingress Controller: MSE クラウドネイティブゲートウェイインスタンスと構成を管理するコントロールプレーンです。これはネットワークデータプレーンではありません。クラスター内の MseIngressConfig リソースをリッスンし、MSE クラウドネイティブゲートウェイインスタンスを調整して、Ingress リソースで定義されたトラフィック管理ルールを適用します。
次の図は、MSE Ingress Controller の仕組みを示しています。
MseIngressConfig の説明
構成の説明
MseIngressConfig は、MSE Ingress Controller によって提供される CRD であり、MSE クラウドネイティブゲートウェイインスタンスのライフサイクルとグローバル構成を管理します。
1 つの MseIngressConfig は 1 つの MSE クラウドネイティブゲートウェイインスタンスに対応します。複数の MSE クラウドネイティブゲートウェイインスタンスを使用するには、複数の MseIngressConfig 構成を作成する必要があります。再利用シナリオを除き、MseIngressConfig 構成を削除すると、カスケード削除によって対応する MSE クラウドネイティブゲートウェイインスタンスも削除されます。
次のサンプルコードは、完全な MseIngressConfig 構成を示しています。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
name: mse-ingress
common:
pay:
payType: POSTPAY
instance:
spec: 4c8g
replicas: 3
network:
vSwitches:
- "vsw-1"
- "vsw-2"
publicSLBSpec: slb.s2.small
securityGroupType: normal
global:
downstreamIdleTimeout: 15
enableHttp2: true
enableXffTrustedCidrs: |-
{"enable":true,"ipListContent":"x.x.x.x/24
x.x.x.x"}
preserveHeaderFormat: true
upstreamIdleTimeout: 30
tls:
enableHardwareAcceleration: true
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.2.XX.XX
monitor:
logging:
sls:
reuseProject: "xxx" # 空の値は、デフォルトのプロジェクトが使用されることを示します。
compatibleNginx: false
tracing:
openTelemetry:
sampleRate: "100"
ingress:
local:
ingressClass: mse
watchNamespace: "" # 空の値は、すべての名前空間を示します。パラメーター | 説明 | オプション | デフォルト値 |
name | ゲートウェイの名前。 | オプション | mse-ingress |
common.pay.payType | 課金方法。 現在、従量課金のみがサポートされています。 | オプション 構成されていない場合、システムはデフォルトで従量課金になります。 | POSTPAY |
common.instance.spec | ゲートウェイインスタンスタイプ。 有効な値:
| オプション | 4c8g |
common.instance.replicas | ゲートウェイインスタンスのレプリカ数。 レプリカ数の有効範囲は 0 から 30 です。 | オプション | 3 |
common.network.vSwitches | プライマリおよびスタンバイ vSwitch。プライマリ vSwitch が最初にリストされ、次にスタンバイがリストされます。 少なくとも 1 つ、最大で 2 つの vSwitch を指定します。指定しない場合、vSwitch はコントローラー Pod が配置されているノードから取得されます。 | オプション | なし |
common.network.publicSLBSpec | ゲートウェイによって購入されたインターネット向け SLB インスタンスの仕様。 有効な値:
| オプション | slb.s2.small |
common.network.privateSLBSpec | ゲートウェイによって購入されたイントラネット SLB インスタンスの仕様。 有効な値:
| オプション | slb.s2.small |
common.securityGroupType | セキュリティグループのタイプ。 有効な値:
| オプション | normal |
global.tls.enableHardwareAcceleration | TLS ハードウェアアクセラレーションのスイッチ。 これにより、HTTPS トラフィックのパフォーマンスが大幅に向上します。 | オプション | 有効 |
global.ipAccessControl.whitelist | グローバル IP アクセスホワイトリスト。 | オプション | 未構成 |
global.ipAccessControl.blacklist | グローバル IP アクセスブラックリスト。 | オプション | 未構成 |
global.downstreamIdleTimeout | ダウンストリームクライアントとゲートウェイ間の接続のアイドルタイムアウト。この期間内に読み取りまたは書き込みアクティビティがない場合、ゲートウェイは接続をアクティブに閉じます。単位: 秒。 | オプション | 15 |
global.enableHttp2 | ゲートウェイの HTTP/2 プロトコルサポートを有効にするかどうかを指定します。 | オプション | false |
global.enableXffTrustedCidrs | Alibaba Cloud WAF や CDN などの信頼できる中間プロキシ IP アドレス範囲を CIDR 形式で構成します。この構成により、ゲートウェイは | オプション | 未構成 |
global.preserveHeaderFormat | クライアントリクエストヘッダーの元の大文字と小文字の形式を保持するかどうかを指定します。 | オプション | false |
global.upstreamIdleTimeout | ゲートウェイとアップストリームバックエンドサービス間の接続のアイドルタイムアウト。この期間内にアクティビティがない場合、ゲートウェイはアクティブに接続を閉じます。単位: 秒。 | オプション | 30 |
monitor.logging.sls | SLS ログサービスのスイッチ。 これを有効にするには、コントローラーに SLS 関連の権限を付与します。 | オプション | 無効 |
monitor.logging.sls.reuseProject | SLS ログサービスでアクセスログを配信する先のプロジェクト。 有効な値:
| オプション | Empty |
monitor.tracing.xTrace.sampleRate | OpenTelemetry トレースのサンプルレート。 | オプション | 0 |
monitor.tracing.openTelemetry | OpenTelemetry トレースのスイッチ。 | オプション | デフォルトでは無効です。これは OpenTelemetry と相互排他的です。 |
monitor.tracing.openTelemetry.sampleRate | OpenTelemetry トレースのサンプルレート。 | オプション | 100 |
ingress.local.ingressClass | クラウドネイティブゲートウェイは、クラスター内の特定の IngressClass の下にある Ingress リソースをリッスンします。 有効な値:
説明 この構成は、IngressClass リソースを介して MseIngressConfig を関連付けるよりも優先度が低くなります。 | オプション | 未構成 |
ingress.local.watchNamespace | クラウドネイティブゲートウェイが Ingress リソースをリッスンするクラスター内の名前空間。 有効な値:
| オプション | Empty |
ステータスの説明
MseIngressConfig リソースを作成した後、kubectl get mseingressconfig コマンドを実行してそのステータスを表示できます。MseIngressConfig のステータスは、Pending > Running > Listening の順に変化します。ステータスは次のように説明されます。
Pending: クラウドネイティブゲートウェイが作成中です。このプロセスには約 3 分かかります。
Running: クラウドネイティブゲートウェイが作成され、実行中です。
Listening: クラウドネイティブゲートウェイが実行中で、クラスター内の Ingress リソースをリッスンしています。
Failed: クラウドネイティブゲートウェイが無効な状態です。失敗の原因については、Status フィールドの Message を確認してください。
タグの説明
MseIngressConfig を介して作成または再利用される MSE クラウドネイティブゲートウェイインスタンスには、リソースタグが自動的に割り当てられます。MSE コンソールの基本情報セクションでゲートウェイのタグを表示できます。
MSE クラウドネイティブゲートウェイコンソールで次の表のタグを編集しないでください。これらのタグを編集すると、ゲートウェイインスタンスに問題が発生する可能性があります。
タグ名 | 説明 |
ack.aliyun.com | MSE クラウドネイティブゲートウェイによって管理される Container Service for Kubernetes (ACK) クラスターの Ingress トラフィック。 |
ingress.k8s.alibaba/MseIngressConfig | MSE クラウドネイティブゲートウェイを MseIngressConfig に関連付けます。 |
kubernetes.reused.by.user | MSE クラウドネイティブゲートウェイが再利用されているかどうかを示します。再利用されている場合、関連付けられた MseIngressConfig が削除されても、MSE クラウドネイティブゲートウェイインスタンスは削除されません。 |
MSE クラウドネイティブゲートウェイインスタンスの作成
MseIngressConfig を構成します。
次のサンプルコードを使用して、3 つのレプリカと 2 コア 4 GB のインスタンスタイプを持つ mse-ingress という名前の MSE クラウドネイティブゲートウェイインスタンスを作成します。必要に応じて、他の MseIngressConfig 設定を変更します。
apiVersion: mse.alibabacloud.com/v1alpha1 kind: MseIngressConfig metadata: name: test spec: name: mse-ingress common: instance: spec: 2c4g replicas: 3ACK クラスターに IngressClass リソースを作成し、それを MseIngressConfig に関連付けます。
ACK クラスターに IngressClass リソースを作成し、spec.parameters を使用して前のステップの MseIngressConfig に関連付けます。これにより、ACK クラスターに Ingress プロセッサーが宣言されます。その結果、この IngressClass に関連付けられたクラスター内の Ingress リソースは、MseIngressConfig に関連付けられた MSE クラウドネイティブゲートウェイインスタンスによって処理されます。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: mse spec: controller: mse.alibabacloud.com/ingress parameters: apiGroup: mse.alibabacloud.com kind: MseIngressConfig name: test
既存の MSE クラウドネイティブゲートウェイインスタンスの再利用
既存の MSE クラウドネイティブゲートウェイインスタンスを再利用したい場合は、MseIngressConfig を作成する際に、spec.id に `gw-xxx` 形式でその一意の ID を指定します。spec.override パラメーターを使用して、再利用される MSE クラウドネイティブゲートウェイインスタンスの構成を MseIngressConfig の構成で上書きするかどうかを制御できます。
次のサンプルコードは、MseIngressConfig を使用して既存の MSE クラウドネイティブゲートウェイインスタンスを再利用します。ゲートウェイインスタンスをコンテナークラスターに関連付け、そのクラスター内で `ingressClass` が `mse` に設定されている Ingress リソースをリッスンするように構成します。
次の構成では、
spec.overrideはfalseに設定されています。これは、MSE クラウドネイティブゲートウェイの既存の Ingress リスナーオプションとグローバル構成が上書きされないことを意味します。既存のゲートウェイインスタンスがこのコンテナークラスターに関連付けられていない場合、インスタンスは自動的にクラスターに関連付けられます。その後、その Ingress リスナーオプションは、`ingressClass` がspec.ingress.local.ingressClassの値 (この場合は `mse`) と一致する Ingress リソースをリッスンするように設定されます。既存のゲートウェイインスタンスがすでにコンテナークラスターに関連付けられている場合、元の Ingress リスナーオプションは上書きされません。MSE クラウドネイティブゲートウェイの既存の Ingress リスナーオプションとグローバル構成を上書きしたい場合は、
spec.overrideを `true` に設定する前に、MseIngressConfig のゲートウェイパラメーター構成が正しいことを確認する必要があります。これらの構成には、Ingress リスナーオプション、ハードウェアアクセラレーション、グローバルブラックリストとホワイトリスト、および可観測性が含まれます。これらの構成が MseIngressConfig で指定されていない場合、spec.overrideを `true` に設定すると、ゲートウェイの元のパラメーター構成が空の値で上書きされ、トラフィックが中断される可能性があります。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: reuse
spec:
id: gw-xxxx
override: false
ingress:
local:
ingressClass: mseパラメーター | 説明 |
spec.id | 再利用するターゲット MSE クラウドネイティブゲートウェイインスタンスの ID。gw- で始まります。 |
spec.override | MseIngressConfig に基づいて、再利用される MSE クラウドネイティブゲートウェイインスタンスの構成を上書きするかどうかを指定します。
|
MSE クラウドネイティブゲートウェイインスタンスの削除
1 つの MseIngressConfig は 1 つの MSE クラウドネイティブゲートウェイインスタンスに対応します。再利用シナリオを除き、MseIngressConfig 構成を削除すると、カスケード削除によって対応する MSE クラウドネイティブゲートウェイインスタンスも削除されます。
削除ポリシーは次の表に示されています。
ゲートウェイの課金方法 | MSE Ingress Controller によって自動的に作成 | コンソールで購入した再利用ゲートウェイ |
従量課金 | MseIngressConfig を削除すると、ゲートウェイインスタンスが自動的に削除されます。 | MseIngressConfig を削除しても、ゲートウェイインスタンスは保持されます。 |
サブスクリプション | 該当なし。 | MseIngressConfig を削除しても、ゲートウェイインスタンスは保持されます。 |
次のコマンドを実行して、MseIngressConfig 構成を削除します。
kubectl delete mseingressconfig your-config-nameグローバルなインスタンスレベルの IP アクセス制御の構成
IP ホワイトリストの構成
グローバルなインスタンスレベルの IP ホワイトリストを構成して、指定された送信元 IP アドレスのみが MSE Ingress にアクセスできるようにすることができます。
次のサンプルコードは、MSE Ingress ゲートウェイインスタンスを構成して、送信元 IP アドレス 1.1.XX.XX または IP 範囲 2.0.XX.XX からのアクセスのみを許可します。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
global:
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.0.XX.XX/8
...IP ブラックリストの構成
グローバルなインスタンスレベルの IP ブラックリストを構成して、指定された送信元 IP アドレスから MSE Ingress へのアクセスを拒否することができます。
次のサンプルコードは、MSE Ingress ゲートウェイインスタンスを構成して、送信元 IP アドレス 1.1.XX.XX または IP 範囲 2.0.XX.XX からのアクセスを拒否します。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
global:
ipAccessControl:
blacklist:
- 1.1.XX.XX
- 2.0.XX.XX/8
...SLS ログの有効化
SLS ログを有効にする前に、必要な SLS 権限を MSE Ingress Controller に付与する必要があります。
マネージドまたは専用の ACK クラスターを使用している場合、詳細については、「専用 ACK クラスターで MSE Ingress Controller に権限を付与する」をご参照ください。
クラスターが Serverless Kubernetes クラスターである場合、詳細については、「MSE Ingress Controller に権限を付与する」をご参照ください。
クラスターが ACS クラスターである場合、詳細については、「ACS クラスターで MSE Ingress Controller に権限を付与する」をご参照ください。
次のサンプルコードは、MSE Ingress ゲートウェイを構成して、アクセスログを demo という名前のプロジェクトに配信します。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
monitor:
logging:
sls:
# 空の値は、デフォルトのプロジェクトが使用されることを示します。
reuseProject: "demo"
...reuseProject フィールドを構成して SLS ログを有効にできます。デフォルトのプロジェクトを使用したい場合は、reuseProject フィールドを空のままにします。
OpenTelemetry トレースの有効化
ゲートウェイに Alibaba Cloud OpenTelemetry トレースサービスを構成して、エンドツーエンドのトレースおよび監視システムを構築できます。これにより、オンラインの問題を迅速に診断し、特定するのに役立ちます。
次のサンプルコードは、MSE Ingress ゲートウェイの OpenTelemetry トレースをサンプルレート 100% で構成します。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
monitor:
tracing:
openTelemetry:
sampleRate: "100"
...その他の構成
MSE Ingress が使用するクラウドネイティブゲートウェイインスタンスは、追加の構成をサポートしています。
これらの設定を構成するには、MSE ゲートウェイ管理コンソールにログインします。 ページで、MSE Ingress Controller が使用するゲートウェイインスタンスを見つけます。インスタンス ID は `mse_ingresspost-*****` の形式です。インスタンス ID をクリックし、左側のナビゲーションウィンドウで [パラメーター設定] をクリックします。
構成項目 | タイプ | 説明 |
EnableGenerateRequestId | Bool | リクエストスコープに適用されます。有効にすると、リクエストをトレースするためにリクエストヘッダーに requestId を生成します。 |
EnableGzip | Bool | リクエストおよびレスポンスステージに適用されます。gzip を有効にすると、リクエストとレスポンスが圧縮され、ゲートウェイのトラフィックは減少しますが、ゲートウェイの CPU 消費量が増加します。 |
EnableSlashMerge | Bool | リクエストステージに適用されます。リクエスト内の余分なスラッシュ ('/') をマージするかどうかを指定します。有効にすると、`www.a.com//b` 内の余分なスラッシュがマージされ、`www.a.com/b` と同一になります。 |
DownstreamConnectionBufferLimits | Int 有効値: [0, 2147483647] | ゲートウェイ接続に適用されます。単一接続のバッファーサイズ。この設定は、スループットとゲートウェイのメモリ使用量に影響します。 |
XffTrustedNum | Int 有効値: [0, 10] | リクエストステージに適用されます。ゲートウェイの前にある信頼できるプロキシの数。これは、ゲートウェイが x-forwarded-for や x-request-id などのクライアント生成ヘッダーを使用するかどうかに影響します。 |
DownstreamHttp2MaxConcurrentStream | Int 有効値: [0, 2147483647] (バイト) | リクエストステージに適用されます。クライアントが HTTP/2 を使用する場合の単一接続での同時ストリームの最大数。 |
InitialStreamWindowSize | Int 有効値: [65535, 2147483647] (バイト) | リクエストステージに適用されます。HTTP/2 を使用する際にゲートウェイとクライアント間でネゴシエートされる初期ストリームウィンドウサイズ。 |
InitialConnectionWindowSize | Int 有効値: [65535, 2147483647] (バイト) | リクエストステージに適用されます。ゲートウェイとクライアントが HTTP/2 を使用する場合の接続レベルの初期ウィンドウサイズ。 |
EnableHttp3 | Bool | HTTP/3 プロトコルをサポートするかどうかを指定します。(HTTP/3 はハードウェアアクセラレーション機能と互換性がありません。HTTP/3 サポートを有効にする前にハードウェアアクセラレーションを無効にしてください。) |
PathWithEscapedSlashes | String 有効値: [KEEP_UNCHANGED, REJECT_REQUEST, UNESCAPE_AND_REDIRECT, UNESCAPE_AND_FORWARD] | URI パスに %2F、%2f、%5C、%5c などのエスケープ文字が含まれるリクエストに対するアクションを決定します。デフォルトは KEEP_UNCHANGED (そのまま維持) です。 |
ZipAlgorithm | List<String> 有効値: [brotli, gzip] | 圧縮が有効な場合に使用するアルゴリズム。brotli または gzip を選択できます。この時点で EnableGzip が有効でない場合、自動的に有効になります。 |
EnableProxyProtocol | Bool | Proxy Protocol を有効にするかどうかを指定します。ゲートウェイのイングレストラフィックが NLB を使用する場合、これを有効にしないとクライアントの送信元 IP アドレスを取得できません。有効にしても、Proxy Protocol 以外のリクエストには影響しません。 |
EnableCustomAuthConfigPush | Bool | 自己構築の権限付与サービスを使用するシナリオに適用されます。有効にすると、権限付与ルールの変更が接続の中断を引き起こさなくなり、WebSocket やオンラインビジネスのシナリオに適しています。 |
KeepaliveHeaderTimeout | Int 有効値: [0, 600] (s) | 接続のキープアライブ時間をクライアントに通知するための Keep-Alive レスポンスヘッダーを生成するために使用されます。たとえば、値が 10 の場合、レスポンスヘッダー: `keep-alive: timeout=10` を返します。値が 0 の場合、このレスポンスヘッダーは返されません。 |
WebsocketTermGracePeriod | Int 有効値: [20, 900] (s) | ゲートウェイインスタンスのアップグレードや再起動など、接続を閉じる必要がある場合に WebSocket 接続に対して維持されるキープアライブ時間。 |
EnableGzipHardwareAccelerate | Bool | 専用ハードウェアに基づいて Gzip 圧縮を実行します。有効にすると、リクエストとレスポンスを圧縮し、ソフトウェア Gzip よりも高いパフォーマンスと低い CPU 消費量でゲートウェイのトラフィックを大幅に削減します。サポートされていないリージョンや、購入時に Gzip ハードウェアアクセラレーションが指定されていなかった場合は有効にできません。有効にすると、EnableGzip と ZipAlgorithm は効果がありません。 |
EnableK8sSourceWorkloadFilter | Bool | サービスソースを追加する際に、指定されたラベルに基づいて Ingress、Service、および Pod リソースをフィルターします。逆フィルターをサポートします。 |