MseIngressConfig は、Microservices Engine(MSE)Ingress Controller によって提供される CustomResourceDefinition(CRD)です。 MseIngressConfig は、MSE クラウドネイティブ ゲートウェイのライフサイクルの管理、および Ingress リスニングオプションとグローバル設定の構成に使用されます。 このトピックでは、MseIngressConfig を使用して MSE クラウドネイティブ ゲートウェイを作成、再利用、および削除する方法について説明します。 また、MseIngressConfig を使用して、ゲートウェイレベルでのアクセス制御のためのグローバル IP アドレスのブラックリストとホワイトリストを構成し、Simple Log Service および Managed Service for OpenTelemetry をアクティブ化する方法についても説明します。
背景情報
MSE Ingress Controller は、クラスター内の MseIngressConfig によって定義されたリソースをリッスンし、リソースに対応するクラウドネイティブ ゲートウェイのライフサイクルと、ゲートウェイとクラスター間の関連付けをリアルタイムで動的に維持します。 クラスターは、Container Service for Kubernetes(ACK)マネージド クラスター、ACK Serverless クラスター、または ACS クラスターです。
クラウドネイティブ ゲートウェイがクラスターの API サーバーに関連付けられると、MSE クラウドネイティブ ゲートウェイの制御プレーンは Ingress リソースの変更を取得し、MSE クラウドネイティブ ゲートウェイのルーティングルールを動的に更新できます。 MSE クラウドネイティブ ゲートウェイはリクエストを受信すると、Ingress ルーティングルールとリクエストを照合し、ルーティングルールに基づいてバックエンド サービスに対応するポッドにリクエストをルーティングします。
Kubernetes クラスターにおけるサービス、Ingress リソース、IngressClass リソース、MseIngressConfig、および MSE Ingress Controller 間の関係を以下に示します。
サービス: サービスはバックエンド サービスの抽象化です。 サービスは、複製されたバックエンド サービスのグループを表すことができます。
Ingress: Ingress にはリバース プロキシ ルールが含まれています。 Ingress は、HTTP または HTTPS リクエストのルーティング先となるサービスを指定します。 たとえば、Ingress は、リクエスト内のホスト名と URL に基づいて、リクエストを異なるサービスにルーティングします。
IngressClass: IngressClass リソースは、Ingress コントローラーの説明を提供します。 IngressClass リソースは、Kubernetes クラスター内の Ingress コントローラーの実装を宣言するために使用されます。 IngressClass リソースに関連付けられている Ingress リソースは、IngressClass リソースで宣言されている Ingress コントローラーによって解析できます。 解析された Ingress リソース記述で指定されたトラフィック管理ルールを実装するには、MseIngressConfig を IngressClass の パラメーター フィールドに関連付ける必要があります。
MseIngressConfig: MseIngressConfig は、MSE Ingress Controller によって提供される CRD です。 MseIngressConfig は、クラウドネイティブ ゲートウェイに関する基本情報を提供します。
MSE Ingress Controller: MSE Ingress Controller は、MSE クラウドネイティブ ゲートウェイとその構成を管理するために使用される制御プレーンとして機能します。 MSE Ingress Controller は、ネットワーク データ プレーンとしては機能しません。 MSE Ingress Controller は、クラスター内の MseIngressConfig によって定義された Ingress リソースをリッスンし、MSE クラウドネイティブ ゲートウェイを調整して、解析された Ingress リソース記述で指定されたトラフィック管理ルールを実装するために使用されます。
次の図は、MSE Ingress Controller のしくみを示しています。
MseIngressConfig の概要
説明
MseIngressConfig は、MSE Ingress Controller によって提供される CRD です。 MSE Ingress Controller は、MseIngressConfig を使用して、MSE クラウドネイティブ ゲートウェイのライフサイクルとグローバル設定を管理します。
1 つの MseIngressConfig は 1 つの MSE クラウドネイティブ ゲートウェイに対応します。 複数の MSE クラウドネイティブ ゲートウェイを使用する場合は、複数の MseIngressConfig を作成する必要があります。再利用シナリオ以外のシナリオでは、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:
tls:
enableHardwareAcceleration: true
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.2.XX.XX
monitor:
logging:
sls:
reuseProject: "xxx" # このパラメーターを空のままにすると、デフォルト設定が使用されます。
tracing:
openTelemetry:
sampleRate: "100"
ingress:
local:
ingressClass: mse
watchNamespace: "" # このパラメーターを空のままにすると、クラウドネイティブ ゲートウェイはすべての名前空間の Ingress リソースをリッスンします。
パラメーター | 説明 | 必須 | デフォルト値 |
name | ゲートウェイの名前。 | いいえ | mse-ingress |
common.pay.payType | 課金方法。 従量課金制のみがサポートされています。 | いいえ このパラメーターを構成しない場合、システムは自動的に従量課金制を使用します。 | POSTPAY |
common.instance.spec | ゲートウェイの仕様。 有効な値:
| いいえ | 4c8g |
common.instance.replicas | ゲートウェイのレプリカ数。 有効な値: 0 ~ 30。 | いいえ | 3 |
common.network.vSwitches | プライマリ vSwitch とセカンダリ vSwitch。最初にプライマリ vSwitch を指定します。 少なくとも 1 つ、最大 2 つの vSwitch を指定する必要があります。 このパラメーターを指定しない場合、MSE Ingress Controller のポッドがデプロイされているノード上の vSwitch が使用されます。 | いいえ | なし |
common.network.publicSLBSpec | クラウドネイティブ ゲートウェイ用に購入するインターネット向け Server Load Balancer(SLB)インスタンスの仕様。 有効な値:
| いいえ | slb.s2.small |
common.network.privateSLBSpec | クラウドネイティブ ゲートウェイ用に購入する内部向け SLB インスタンスの仕様。 有効な値:
| いいえ | slb.s2.small |
common.securityGroupType | セキュリティ グループのタイプ。 有効な値:
| いいえ | normal |
global.tls.enableHardwareAcceleration | Transport Layer Security (TLS) ハードウェア アクセラレーションを有効にするかどうかを指定します。 TLS ハードウェア アクセラレーションは、HTTPS トラフィックの処理パフォーマンスを大幅に向上させることができます。 | いいえ | true |
global.ipAccessControl.whitelist | グローバル IP アドレス ホワイトリスト。 | いいえ | 未構成 |
global.ipAccessControl.blacklist | グローバル IP アドレス ブラックリスト。 | いいえ | 未構成 |
monitor.logging.sls | Simple Log Service をアクティブにするかどうかを指定します。 Simple Log Service をアクティブにするには、Simple Log Service に対する権限を MSE Ingress Controller に付与する必要があります。 | いいえ | false |
monitor.logging.sls.reuseProject | アクセス ログの配信先となる Simple Log Service プロジェクト。 有効な値:
| いいえ | 空のままにします |
monitor.tracing.xTrace.sampleRate | Managed Service for OpenTelemetry のサンプリングレートです。 | いいえ | 0 |
monitor.tracing.openTelemetry | Managed Service for OpenTelemetry を有効にするかどうかを指定します。 | いいえ | デフォルトでは、Managed Service for OpenTelemetry は無効になっています。 Managed Service for OpenTelemetry とオープンソースの OpenTelemetry を同時に有効にすることはできません。 |
monitor.tracing.openTelemetry.sampleRate | Managed Service for OpenTelemetry のサンプリング レート。 | いいえ | 100 |
ingress.local.ingressClass | クラウドネイティブ ゲートウェイがリッスンする Ingress リソースに関連付けられている IngressClass リソース。 有効な値:
説明 MseIngressConfig に関連付けるために使用する IngressClass リソースは、このパラメーターで指定された IngressClass リソースよりも優先されます。 | いいえ | 未構成 |
ingress.local.watchNamespace | クラウドネイティブ ゲートウェイによって Ingress リソースがリッスンされるクラスター名前空間。 有効な値:
| いいえ | 空のまま |
ステータス説明
MseIngressConfig を作成した後、kubectl get mseingressconfig
コマンドを使用して MseIngressConfig のステータスを表示できます。 MseIngressConfig のステータスは、Pending > Running > Listening の順序で変化します。 ステータス説明:
Pending: クラウドネイティブ ゲートウェイが作成中であることを示します。 作成プロセスには約 3 分かかります。
Running: クラウドネイティブ ゲートウェイが作成され、実行中であることを示します。
Listening: クラウドネイティブ ゲートウェイが実行中で、クラスター内の Ingress リソースをリッスンしていることを示します。
Failed: クラウドネイティブ ゲートウェイが無効であることを示します。 原因を特定するには、ステータス フィールドのメッセージを確認できます。
タグの説明
リソース タグは、MseIngressConfig を使用して作成または再利用された MSE クラウドネイティブ ゲートウェイに追加されます。 MSE コンソールの MSE クラウドネイティブ ゲートウェイの基本情報セクションでタグを表示できます。
ゲートウェイへの悪影響を防ぐため、MSE コンソールで次の表に記載されているタグを編集しないでください。
タグ名 | 説明 |
ack.aliyun.com | MSE クラウドネイティブ ゲートウェイによって管理される ACK クラスターのイングレス トラフィックを識別します。 |
ingress.k8s.alibaba/MseIngressConfig | MSE クラウドネイティブ ゲートウェイに関連付けられている MseIngressConfig を識別します。 |
kubernetes.reused.by.user | MSE クラウドネイティブ ゲートウェイが再利用されているかどうかを識別します。 再利用シナリオで MSE クラウドネイティブ ゲートウェイに関連付けられている MseIngressConfig を削除しても、MSE クラウドネイティブ ゲートウェイは削除されません。 |
MSE クラウドネイティブ ゲートウェイの作成
MseIngressConfig を構成します。
次のサンプル コードは、mse-ingress という名前の MSE クラウドネイティブ ゲートウェイを作成する方法の例を示しています。 ゲートウェイには 3 つのレプリカがあり、2 vCPU と 4 GB のメモリの仕様を使用します。 ビジネス要件に基づいて、MseIngressConfig のその他の構成を変更できます。
apiVersion: mse.alibabacloud.com/v1alpha1 kind: MseIngressConfig metadata: name: test spec: name: mse-ingress common: instance: spec: 2c4g replicas: 3
ACK クラスターに IngressClass リソースを作成し、IngressClass リソースを MseIngressConfig に関連付けます。
ACK クラスターに IngressClass リソースを作成し、spec.parameters を使用して IngressClass リソースを作成した MseIngressConfig に関連付けることで、ACK クラスターで MSE Ingress Controller を宣言します。 これにより、クラスター内の 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 クラウドネイティブ ゲートウェイを再利用する場合は、spec.id
を gw-xxx 形式の MSE クラウドネイティブ ゲートウェイの一意の ID に設定し、spec.override
を使用して、MseIngressConfig の作成時に MseIngressConfig に基づいて MSE クラウドネイティブ ゲートウェイの関連構成を上書きするかどうかを制御できます。
次のサンプル コードでは、MseIngressConfig を使用して既存の MSE クラウドネイティブ ゲートウェイを再利用しています。 この場合、システムはゲートウェイを ACK クラスターに関連付け、ゲートウェイが ACK クラスター内の IngressClass が mse である Ingress リソースをリッスンできるようにします。
次のコードでは、
spec.override
がfalse
に設定されています。 これは、既存の MSE クラウドネイティブ ゲートウェイの Ingress リスニング オプションとグローバル構成が上書きされないことを示します。 既存の MSE クラウドネイティブ ゲートウェイが ACK クラスターに関連付けられていない場合、システムは自動的にゲートウェイを ACK クラスターに関連付け、Ingress リスニング オプションを構成して、IngressClass がspec.ingress.local.ingressClass
の値と同じである Ingress リソースを ACK クラスターでリッスンします。 この例では、spec.ingress.local.ingressClass の値は mse です。 既存のゲートウェイが ACK クラスターに関連付けられている場合、元の Ingress リスニング オプションは上書きされません。既存の MSE クラウドネイティブ ゲートウェイの Ingress リスニング オプションとグローバル構成を上書きする場合は、MseIngressConfig のゲートウェイ パラメーター設定が有効であることを確認する必要があります。 パラメーターは、Ingress リスニング オプション、ハードウェア アクセラレーション、グローバル IP アドレスのホワイトリストとブラックリスト、および可観測性に関連しています。 その後、
spec.override
を true に設定します。 パラメーターが 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。 ID は gw- で始まる必要があります。 |
spec.override | MseIngressConfig の構成に基づいて MSE クラウドネイティブ ゲートウェイの関連構成を上書きするかどうかを指定します。
|
MSE クラウドネイティブ ゲートウェイの削除
1 つの MseIngressConfig は 1 つの MSE クラウドネイティブ ゲートウェイに対応します。 再利用シナリオ以外のシナリオでは、MseIngressConfig を削除すると、MseIngressConfig に対応する MSE クラウドネイティブ ゲートウェイも削除されます。
次の表に、削除ポリシーを示します。
ゲートウェイの課金方法 | MSE Ingress Controller によって自動的に作成されたゲートウェイ | コンソールで再利用されたゲートウェイ |
従量課金制 | MseIngressConfig が削除されると、関連付けられたゲートウェイも削除されます。 | MseIngressConfig が削除されても、関連付けられたゲートウェイは保持されます。 |
サブスクリプション | 該当なし。 | MseIngressConfig が削除されても、関連付けられたゲートウェイは保持されます。 |
MseIngressConfig を削除するには、次のコマンドを実行します。
kubectl delete mseingressconfig your-config-name
ゲートウェイの IP アドレスのホワイトリストとブラックリストの構成
IP アドレス ホワイトリストの構成
MSE Ingress ゲートウェイのグローバル IP アドレス ホワイトリストを構成して、ホワイトリスト内の送信元 IP アドレスのみがゲートウェイにアクセスできるようにすることができます。
次のサンプル コードでは、送信元 IP アドレスが 1.1.XX.XX または CIDR ブロックが 2.0.XX.XX/8 の場合にのみ、MSE Ingress ゲートウェイにアクセスできます。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
global:
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.0.XX.XX/8
...
IP アドレス ブラックリストの構成
MSE Ingress ゲートウェイのグローバル IP アドレス ブラックリストを構成します。 これにより、ブラックリスト内の送信元 IP アドレスからの MSE Ingress ゲートウェイへのアクセスを拒否できます。
次のサンプル コードでは、送信元 IP アドレス 1.1.XX.XX または CIDR ブロック 2.0.XX.XX/8 からの MSE Ingress ゲートウェイへのアクセスを拒否します。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
global:
ipAccessControl:
blacklist:
- 1.1.XX.XX
- 2.0.XX.XX/8
...
Simple Log Service のアクティブ化
Simple Log Service をアクティブ化する前に、Simple Log Service に対する権限を MSE Ingress Controller に付与していることを確認する必要があります。
ACK マネージド クラスターまたは ACK 専用クラスターで Simple Log Service に対する権限を MSE Ingress Controller に付与する方法については、「MSE Ingress Controller への権限の付与」の「ACK 専用クラスターで MSE Ingress Controller に権限を付与する」セクションをご参照ください。
ACK Serverless クラスターで Simple Log Service に対する権限を MSE Ingress Controller に付与する方法については、「MSE Ingress Controller への権限の付与」の「ACK Serverless クラスターで MSE Ingress Controller に権限を付与する」セクションをご参照ください。
ACS クラスターで Simple Log Service に対する権限を MSE Ingress Controller に付与する方法については、「MSE Ingress Controller への権限の付与」の「ACS クラスターで MSE Ingress Controller に権限を付与する」セクションをご参照ください。
次のサンプル コードは、demo
という名前のプロジェクトにアクセス ログを配信するように MSE Ingress ゲートウェイを構成する方法の例を示しています。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
monitor:
logging:
sls:
# パラメーターを空のままにすると、アクセス ログはデフォルト プロジェクトに自動的に配信されます。
reuseProject: "demo"
...
Simple Log Service をアクティブにするには、reuseProject パラメーターを構成する必要があります。 デフォルト プロジェクトを使用する場合は、reuseProjectを空のままにすることができます。
Managed Service for OpenTelemetry のアクティブ化
ゲートウェイに Alibaba Cloud Managed Service for OpenTelemetry サービスを構成すると、オンラインの問題の診断と特定に役立つエンドツーエンドのトレースおよび監視システムを構築できます。
次のサンプル コードは、MSE Ingress ゲートウェイに Managed Service for OpenTelemetry を構成し、サンプリング レートを 100% に設定する方法の例を示しています。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
monitor:
tracing:
openTelemetry:
sampleRate: "100"
...