MseIngressConfig は、MSE Ingress Controller によって提供されるカスタムリソース定義 (CRD) です。MSE クラウドネイティブゲートウェイのライフサイクルを管理し、Ingress のリッスンオプションとグローバルなゲートウェイ設定を制御します。このトピックでは、MseIngressConfig を使用して MSE クラウドネイティブゲートウェイを作成、再利用、削除する方法、およびグローバルな IP アクセス制御、Simple Log Service、OpenTelemetry 向けマネージドサービスを設定する方法について説明します。
仕組み
MSE Ingress Controller は、クラスター内の MseIngressConfig リソースを監視し、対応するクラウドネイティブゲートウェイのライフサイクルとクラスターとの関連付けを動的に維持します。サポートされているクラスタータイプ:Container Service for Kubernetes (ACK) マネージドクラスター、ACK サーバーレスクラスター、および ACS クラスター。
クラウドネイティブゲートウェイがクラスターの API サーバーに関連付けられると、MSE クラウドネイティブゲートウェイのコントロールプレーンが Ingress リソースの変更を検出し、それに応じてルーティングルールを更新します。リクエストが到着すると、ゲートウェイはそれを Ingress のルーティングルールと照合し、バックエンドサービスを実行している Pod にルーティングします。
以下のリソースは、Kubernetes クラスター内で連携して動作します。
Service:バックエンドサービスの抽象化であり、複製されたバックエンドサービスインスタンスのグループを表します。
Ingress:ホスト名と URL に基づいて HTTP または HTTPS リクエストをサービスにルーティングするリバースプロキシのルールを含みます。
IngressClass:どの Ingress コントローラーの実装が一連の Ingress リソースを処理するかを宣言します。MseIngressConfig を IngressClass の
parametersフィールドに関連付けて、一致する Ingress リソースで定義されたトラフィック管理ルールを適用します。MseIngressConfig:MSE クラウドネイティブゲートウェイの設定を提供する CRD です。
MSE Ingress Controller:MSE クラウドネイティブゲートウェイとその設定を管理するコントロールプレーンです。ネットワークのデータプレーンではありません。
次の図は、MSE Ingress Controller の仕組みを示しています。
基本概念
1 つの MseIngressConfig は 1 つの MSE クラウドネイティブゲートウェイに対応します。複数のゲートウェイを使用するには、ゲートウェイごとに 1 つの MseIngressConfig を作成します。
すべての MseIngressConfig リソースの apiVersion と kind は次のとおりです。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfigリソースタグ
MseIngressConfig を介して作成または再利用された MSE クラウドネイティブゲートウェイには、自動的にタグが付けられます。タグは、MSE コンソールのゲートウェイの基本情報セクションで確認できます。
MSE コンソールでこれらのタグを編集しないでください。変更すると、ゲートウェイに影響が及ぶ可能性があります。
| タグ | 説明 |
|---|---|
ack.aliyun.com | このゲートウェイが Ingress トラフィックを管理する ACK クラスターを識別します |
ingress.k8s.alibaba/MseIngressConfig | このゲートウェイに関連付けられている MseIngressConfig を識別します |
kubernetes.reused.by.user | ゲートウェイが再利用されたことを示します。関連付けられた MseIngressConfig が削除されても、ゲートウェイは削除されません |
ゲートウェイのステータス
MseIngressConfig を作成した後、次のコマンドでゲートウェイのステータスを確認します。
kubectl get mseingressconfigステータスの遷移:Pending → Running → Listening
| ステータス | 意味 |
|---|---|
| Pending | ゲートウェイを作成中です (約 3 分かかります) |
| Running | ゲートウェイが作成され、実行中です |
| Listening | ゲートウェイは実行中で、クラスター内の Ingress リソースをリッスンしています |
| Failed | ゲートウェイは無効です。Status の Message フィールドを確認して原因を特定してください |
パラメーターリファレンス
以下は、サポートされているすべてのパラメーターを含む完全な 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:
tls:
enableHardwareAcceleration: true
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.2.XX.XX
monitor:
logging:
sls:
reuseProject: "xxx" # デフォルトのプロジェクトを使用する場合は空のままにします
tracing:
xTrace:
sampleRate: "100"
ingress:
local:
ingressClass: mse
watchNamespace: "" # すべての名前空間をリッスンする場合は空のままにしますmonitor.tracing.xTraceとmonitor.tracing.openTelemetryは同時に有効にできません。MseIngressConfig ごとに 1 つのトレースバックエンドのみを設定してください。
| パラメーター | タイプ | 説明 | 必須 | デフォルト |
|---|---|---|---|---|
name | 文字列 | ゲートウェイの名前 | いいえ | mse-ingress |
common.pay.payType | 文字列 | POSTPAY課金方法。`POSTPAY` (従量課金) のみがサポートされています | いいえ | POSTPAY |
common.instance.spec | 文字列 | ゲートウェイの仕様。有効な値:2c4g、4c8g、8c16g、16c32g | いいえ | 4c8g |
common.instance.replicas | 整数 | ゲートウェイのレプリカ数。有効な値:0~30 | いいえ | 3 |
common.network.vSwitches | 文字列配列 | プライマリおよびセカンダリの vSwitch。プライマリ vSwitch を最初に指定します。少なくとも 1 つ、最大 2 つの vSwitch が必要です。指定しない場合、MSE Ingress Controller の Pod が実行されているノードの vSwitch が使用されます | いいえ | なし |
common.network.publicSLBSpec | 文字列 | パブリック Server Load Balancer (SLB) インスタンスの仕様。有効な値:slb.s1.small、slb.s2.small、slb.s2.medium、slb.s3.small、slb.s3.medium、slb.s3.large | いいえ | slb.s2.small |
common.network.privateSLBSpec | 文字列 | イントラネット SLB インスタンスの仕様。有効な値:slb.s1.small、slb.s2.small、slb.s2.medium、slb.s3.small、slb.s3.medium、slb.s3.large | いいえ | slb.s2.small |
common.securityGroupType | 文字列 | セキュリティグループのタイプ。有効な値:enterprise (高度セキュリティグループ)、normal (基本セキュリティグループ) | いいえ | normal |
global.tls.enableHardwareAcceleration | ブール値 | Transport Layer Security (TLS) ハードウェアアクセラレーションを有効にして HTTPS トラフィック処理性能を向上させるかどうかを指定します | いいえ | true |
global.ipAccessControl.whitelist | 文字列配列 | グローバル IP アドレスホワイトリスト。リスト内のソース IP のみがゲートウェイにアクセスできます | いいえ | 未設定 |
global.ipAccessControl.blacklist | 文字列配列 | グローバル IP アドレスブラックリスト。リスト内のソース IP はゲートウェイへのアクセスを拒否されます | いいえ | 未設定 |
monitor.logging.sls | オブジェクト | アクセスログ配信のために Simple Log Service を有効化します。有効にする前に、MSE Ingress Controller に Simple Log Service の権限を付与してください | いいえ | 無効 |
monitor.logging.sls.reuseProject | 文字列 | アクセスログ配信用の Simple Log Service プロジェクト。デフォルトのプロジェクトを使用する場合は空のままにし、既存のプロジェクトを使用する場合はその名前を指定します | いいえ | 空 (デフォルトのプロジェクト) |
monitor.tracing.xTrace | オブジェクト | xTrace トレース分析を有効にします。monitor.tracing.openTelemetry | いいえ | 無効 |
monitor.tracing.xTrace.sampleRate | 文字列 | xTrace のサンプリングレート。例:100% の場合は "100" | いいえ | "0" |
monitor.tracing.openTelemetry | オブジェクト | OpenTelemetry トレース分析を有効にします。次のコードと共に有効にすることはできません: monitor.tracing.xTrace | いいえ | 無効 |
monitor.tracing.openTelemetry.sampleRate | 整数 | OpenTelemetry のサンプリングレート (パーセンテージ) | いいえ | 100 |
ingress.local.ingressClass | 文字列 | ゲートウェイがリッスンする Ingress リソースに関連付けられた IngressClass。有効な値:未設定 (Ingress リソースをリッスンしない)、mse (IngressClass が mse の Ingress リソース)、"" (すべての Ingress リソース)、nginx (IngressClass が nginx または IngressClass がない Ingress リソース)、またはその他の IngressClass 名。spec.parameters を介して MseIngressConfig にリンクされた IngressClass は、このフィールドよりも優先されます | いいえ | 未設定 |
ingress.local.watchNamespace | 文字列 | ゲートウェイがリッスンする Ingress リソースの名前空間。すべての名前空間をリッスンする場合は空のままにし、特定の名前に限定する場合はその名前空間を指定します | いいえ | 空 (すべての名前空間) |
MSE クラウドネイティブゲートウェイの作成
MseIngressConfig を適用します。次の例では、3 つのレプリカと 2 vCPU、4 GB メモリ仕様の
mse-ingressという名前のゲートウェイを作成します。# シナリオ:最小限の設定で新しいゲートウェイを作成する apiVersion: mse.alibabacloud.com/v1alpha1 kind: MseIngressConfig metadata: name: test spec: name: mse-ingress common: instance: spec: 2c4g replicas: 3IngressClass リソースを作成し、
spec.parametersを介して MseIngressConfig に関連付けます。これにより、MSE Ingress Controller がその IngressClass の実装として宣言され、ゲートウェイはそれに関連付けられたすべての Ingress リソースを処理します。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ゲートウェイのステータスを確認します。
kubectl get mseingressconfigステータスが Listening になると、ゲートウェイは準備完了です。
既存の MSE クラウドネイティブゲートウェイの再利用
既存の MSE クラウドネイティブゲートウェイを再利用するには、spec.id をゲートウェイの ID (フォーマットは gw-xxx) に設定し、spec.override を使用して MseIngressConfig がゲートウェイの既存の設定を上書きするかどうかを制御します。
| パラメーター | タイプ | 説明 |
|---|---|---|
spec.id | 文字列 | 再利用する MSE クラウドネイティブゲートウェイの ID。gw- |
spec.override | ブール値 | MseIngressConfig がゲートウェイの既存の Ingress リッスンオプション、TLS ハードウェアアクセラレーション、IP アクセス制御、および可観測性の設定を上書きするかどうかを指定します |
`spec.override` の動作:
`false` — 既存のゲートウェイ設定は上書きされません。ゲートウェイがまだ ACK クラスターに関連付けられていない場合、システムは自動的にそれを関連付け、
spec.ingress.local.ingressClassに基づいて Ingress リッスンを設定します。ゲートウェイが既に関連付けられている場合、元の Ingress リッスンオプションは保持されます。`true` — ゲートウェイ設定は MseIngressConfig の値で上書きされます。MseIngressConfig でパラメーターが指定されていない場合、ゲートウェイの元のパラメーター設定が上書きされ、トラフィックに悪影響が及ぶ可能性があります。トラフィックの中断を避けるために、
override: trueを適用する前に、関連するすべてのパラメーターが明示的に設定されていることを確認してください。
次の例では、既存のゲートウェイ (ID: gw-xxxx) を再利用し、他の設定を上書きせずに IngressClass が mse の Ingress リソースをリッスンするように設定します。
# シナリオ:既存のゲートウェイをその設定を上書きせずに再利用する
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: reuse
spec:
id: gw-xxxx
override: false
ingress:
local:
ingressClass: mseoverride: true を設定すると、ゲートウェイの Ingress リッスンオプション、TLS ハードウェアアクセラレーション、IP アクセス制御、および可観測性の設定が上書きされます。これらのパラメーターのいずれかが MseIngressConfig に存在しない場合、ゲートウェイの元のパラメーター設定が上書きされ、トラフィックに悪影響が及ぶ可能性があります。適用する前に、必要なすべてのパラメーターが設定されていることを確認してください。
MSE クラウドネイティブゲートウェイの削除
削除の動作は、ゲートウェイが MSE Ingress Controller によって作成されたか、コンソールから再利用されたかによって異なります。
| 課金方法 | MSE Ingress Controller による自動作成 | コンソールからの再利用 |
|---|---|---|
| 従量課金 | MseIngressConfig を削除すると、ゲートウェイも削除されます | MseIngressConfig を削除しても、ゲートウェイは保持されます |
| サブスクリプション | N/A | MseIngressConfig を削除しても、ゲートウェイは保持されます |
MseIngressConfig を削除するには:
kubectl delete mseingressconfig <your-config-name>IP アドレスアクセス制御の設定
IP アドレスホワイトリストの設定
global.ipAccessControl.whitelist を設定して、特定のソース IP アドレスまたは CIDR ブロックのみがゲートウェイにアクセスできるようにします。次の例では、1.1.XX.XX と CIDR ブロック 2.0.XX.XX/8 からのアクセスのみを許可します。
# シナリオ:特定の IP アドレスへのゲートウェイアクセスを制限する
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
global:
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.0.XX.XX/8IP アドレスブラックリストの設定
global.ipAccessControl.blacklist を設定して、特定のソース IP アドレスまたは CIDR ブロックからのアクセスを拒否します。次の例では、1.1.XX.XX と CIDR ブロック 2.0.XX.XX/8 からのアクセスをブロックします。
# シナリオ:特定の IP アドレスからのゲートウェイアクセスをブロックする
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
global:
ipAccessControl:
blacklist:
- 1.1.XX.XX
- 2.0.XX.XX/8Simple Log Service の有効化
Simple Log Service を有効にする前に、MSE Ingress Controller に Simple Log Service の権限を付与してください。
ACK マネージドクラスターまたは ACK 専用クラスター:詳細については、「MSE Ingress Controller への権限付与」の「ACK 専用クラスターで MSE Ingress Controller に権限を付与する」セクションをご参照ください。
ACK サーバーレスクラスター:詳細については、「MSE Ingress Controller への権限付与」の「ACK サーバーレスクラスターで MSE Ingress Controller に権限を付与する」セクションをご参照ください。
ACS クラスター:詳細については、「MSE Ingress Controller への権限付与」の「ACS クラスターで MSE Ingress Controller に権限を付与する」セクションをご参照ください。
次の例では、demo という名前の既存の Simple Log Service プロジェクトにアクセスログを配信します。代わりにデフォルトのプロジェクトを使用するには、reuseProject を空のままにします。
# シナリオ:Simple Log Service プロジェクトにアクセスログを配信する
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
monitor:
logging:
sls:
reuseProject: "demo" # デフォルトのプロジェクトを使用する場合は空のままにしますSimple Log Service を有効にするには、reuseProject フィールドが存在する必要があります。デフォルトのプロジェクトを使用する場合は空のままにするか、既存のプロジェクト名を指定します。OpenTelemetry 向けマネージドサービスの有効化
ゲートウェイで OpenTelemetry 向けマネージドサービスを設定すると、エンドツーエンドのトレースとモニタリングが可能になり、本番環境の問題の診断と特定に役立ちます。
次の例では、100% のサンプリングレートで OpenTelemetry トレースを有効にします。
# シナリオ:完全なサンプリングで OpenTelemetry トレースを有効にする
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
monitor:
tracing:
xTrace:
sampleRate: "100"xTrace と OpenTelemetry は同時に有効にできません。MseIngressConfig ごとに 1 つのトレースバックエンドのみを設定してください。