すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:MSE Ingress を使用した ACK クラスター内のアプリケーションへのアクセス

最終更新日:Mar 01, 2026

標準の NGINX Ingress Controller は、複雑なトラフィックルーティング、Dubbo や QUIC などの複数のアプリケーション層プロトコル、またはレイヤー 7 のトラフィックバランシングをサポートしていません。MSE Ingress は、Alibaba Cloud Microservices Engine (MSE) のクラウドネイティブゲートウェイ上に構築された Ingress の実装です。NGINX Ingress および NGINX Ingress アノテーションと互換性があり、以下の機能によってこれらのギャップを解消します。

  • プロトコルサポート:HTTP/HTTPS に加えて、Dubbo、QUIC、その他のアプリケーション層プロトコルを処理します。

  • トラフィックガバナンス:複数のサービスバージョンに対するカナリアリリースと、柔軟なトラフィックルーティングルールを提供します。

  • セキュリティ保護:ゲートウェイレベルで組み込みのセキュリティ機能が含まれています。

  • 高可用性:フルマネージドのマルチレプリカゲートウェイとして実行されます。

このトピックでは、MSE Ingress を設定して、外部トラフィックを Container Service for Kubernetes (ACK) クラスター内のアプリケーションにルーティングする方法について説明します。MSE Ingress とその仕組みの詳細については、「MSE Ingress の管理」をご参照ください。

前提条件

開始する前に、以下を確認してください。

ステップ 1:MSE クラウドネイティブゲートウェイの作成

MseIngressConfig は、MSE Ingress Controller によって提供されるカスタムリソース定義 (CRD) です。MSE クラウドネイティブゲートウェイのライフサイクルとグローバル設定を管理します。

重要

1 つの MseIngressConfig は 1 つのクラウドネイティブゲートウェイにマッピングされます。複数のゲートウェイが必要な場合は、複数の MseIngressConfig を作成してください。MseIngressConfig を削除すると、再利用シナリオを除き、マッピングされたクラウドネイティブゲートウェイも削除されます。

次のコマンドを実行して、3 つのレプリカを持つ mse-ingress という名前のゲートウェイを作成します。各レプリカは 2 vCPU と 4 GB のメモリを使用します。

cat << EOF | kubectl apply -f -
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
  name: test
spec:
  name: mse-ingress                # クラウドネイティブゲートウェイの名前
  common:
    instance:
      spec: 2c4g                   # レプリカあたりの仕様 (デフォルト: 4c8g)。2 vCPU、4 GB メモリを意味します
      replicas: 3                  # ゲートウェイのレプリカ数 (デフォルト: 3)
EOF
説明

オプションの設定を省略すると、システムはデフォルト値を適用します。

  1. vSwitch:MSE Ingress Controller によってスケジュールされた Kubernetes ノードの vSwitch を自動的に選択します。vSwitch は 1 つだけ設定されます。本番環境では、手動で 2 つの vSwitch を設定してください。

  2. SLB:slb.s2.small 仕様のインターネット向け Server Load Balancer (SLB) インスタンスを自動的に作成します。

  3. セキュリティグループ:基本セキュリティグループを自動的に作成します。

spec のパラメーターを次の表に示します。

パラメーター

必須

デフォルト

説明

spec.name

いいえ

-

クラウドネイティブゲートウェイの名前。

spec.common.instance.spec

いいえ

4c8g

レプリカあたりの仕様。例えば、2c4g は 2 vCPU と 4 GB のメモリを意味します。

spec.common.instance.replicas

いいえ

3

ゲートウェイのレプリカ数。

完全なパラメーターリファレンスについては、「MseIngressConfig の設定」をご参照ください。

ステップ 2:IngressClass リソースの作成

IngressClass リソースは、どの Ingress コントローラーが一連の Ingress リソースを処理するかを宣言します。IngressClass をステップ 1 で作成した MseIngressConfig に関連付けることで、クラウドネイティブゲートウェイが一致する Ingress ルールを処理するようになります。

シナリオに応じて、次のいずれかの方法を選択してください。

方法 1:Kubernetes IngressClass リソースの使用 (推奨)

この方法は、MSE Ingress にアクセスする新しいサービスに使用します。クラスターの Kubernetes バージョンに基づいて、次のいずれかのコマンドを実行します。

Kubernetes バージョンが v1.19 より前のクラスター

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: mse
spec:
  controller: mse.alibabacloud.com/ingress
  parameters:
    apiGroup: mse.alibabacloud.com       # MseIngressConfig の API グループ
    kind: MseIngressConfig               # リソースの種類
    name: test                           # ステップ 1 で作成した MseIngressConfig の名前
EOF

Kubernetes v1.19 以降を実行するクラスター

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: mse
spec:
  controller: mse.alibabacloud.com/ingress
  parameters:
    apiGroup: mse.alibabacloud.com       # MseIngressConfig の API グループ
    kind: MseIngressConfig               # リソースの種類
    name: test                           # ステップ 1 で作成した MseIngressConfig の名前
EOF

方法 2:MseIngressConfig リソースの使用 (移行用)

この方法は、NGINX Ingress から MSE Ingress に移行する場合、または IngressClass リソースを作成できないシナリオで使用します。移行中、NGINX Ingress と MSE Ingress の両方が同じ IngressClass リソースをリッスンする必要があります。この方法では、IngressClass を MseIngressConfig 内で直接設定できるため、IngressClass 名の競合を回避できます。

ステップ 1 で作成した MseIngressConfig に ingressClass フィールドを追加します。

apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
  name: test
spec:
  name: mse-ingress
  common:
    instance:
      spec: 2c4g
      replicas: 3
  ingress:
    local:
      ingressClass: mse                  # リッスンする IngressClass 名

ingress.local.ingressClass の値を次の表に示します。

動作

未設定

ゲートウェイはどの Ingress リソースもリッスンしません。

mse

ゲートウェイは mse という名前の IngressClass に関連付けられた Ingress リソースをリッスンします。

"" (空文字列)

ゲートウェイはすべての Ingress リソースをリッスンします。

nginx

ゲートウェイは nginx という名前の IngressClass に関連付けられた Ingress リソース、およびどの IngressClass にも関連付けられていない Ingress リソースをリッスンします。

その他の値

ゲートウェイは指定された IngressClass に関連付けられた Ingress リソースをリッスンします。

説明

Kubernetes IngressClass リソース (方法 1) とこのパラメーターの両方が設定されている場合、Kubernetes IngressClass リソースが優先されます。

ゲートウェイのステータスの確認

次のコマンドを実行して、MseIngressConfig のステータスを確認します。

kubectl get MseIngressConfig test

期待される出力:

NAME   STATUS      AGE
test   Listening   3m15s

Listening ステータスは、クラウドネイティブゲートウェイが実行中であり、mse IngressClass に関連付けられた Ingress リソースを監視していることを示します。

ステータスは次の順序で遷移します。

ステータス説明
Pendingゲートウェイは作成中です。このプロセスには約 3 分かかります。
Runningゲートウェイが作成され、実行中です。
Listeningゲートウェイは実行中であり、クラスター内の Ingress リソースをリッスンしています。
Failedゲートウェイは無効です。kubectl describe MseIngressConfig test を実行し、StatusMessage フィールドを確認して原因を特定してください。

ステップ 3:アプリケーションへのトラフィックのルーティング

サンプルのバックエンドサービスのデプロイ

次のコマンドを実行して、go-httpbin サービスをデプロイします。

cat << EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-httpbin
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: go-httpbin
  template:
    metadata:
      labels:
        app: go-httpbin
        version: v1
    spec:
      containers:
        - image: specialyang/go-httpbin:v3
          args:
            - "--port=8090"            # アプリケーションがリッスンするポート 8090
            - "--version=v1"           # バージョン v1 を報告
          imagePullPolicy: Always
          name: go-httpbin
          ports:
            - containerPort: 8090
---
apiVersion: v1
kind: Service
metadata:
  name: go-httpbin
  namespace: default
spec:
  ports:
    - port: 80                         # Ingress に公開されるサービスポート
      targetPort: 8090                 # コンテナーポート 8090 に転送
      protocol: TCP
  selector:
    app: go-httpbin
EOF

Ingress リソースの作成

次のいずれかのコマンドを実行して Ingress リソースを作成します。この Ingress は example.com/version へのリクエストを go-httpbin サービスにルーティングします。

Kubernetes バージョンが v1.19 より前のクラスター

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
  namespace: default
spec:
  ingressClassName: mse                  # MSE IngressClass に関連付け
  rules:
   - host: example.com
     http:
      paths:
      - path: /version
        backend:
          serviceName: go-httpbin
          servicePort: 80
EOF

Kubernetes v1.19 以降を実行するクラスター

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  namespace: default
spec:
  ingressClassName: mse                  # MSE IngressClass に関連付け
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          service:
            name: go-httpbin
            port:
              number: 80
        path: /version
        pathType: Prefix
EOF

結果の確認

  1. Ingress に割り当てられたアドレスを取得します。期待される出力:

       kubectl get ingress ingress
       NAME      CLASS   HOSTS            ADDRESS         PORTS   AGE
       ingress   mse     example.com      114.55.XX.XX   80      12m
  2. Ingress アドレスを使用してテストリクエストを送信します。期待される出力:version:v1 のレスポンスは、トラフィックが MSE Ingress を経由して go-httpbin バックエンドサービスにルーティングされたことを示します。

       curl -H "host: example.com" <ADDRESS>/version
       version:v1
説明

ADDRESS フィールドが空の場合、クラウドネイティブゲートウェイがまだプロビジョニング中の可能性があります。数分待ってから kubectl get ingress ingress を再度実行してください。問題が解決しない場合は、kubectl describe MseIngressConfig test で MseIngressConfig のステータスを確認してください。

リソースのクリーンアップ

このチュートリアルで作成したサンプルリソースを削除するには、次のコマンドを実行します。

kubectl delete ingress ingress
kubectl delete service go-httpbin
kubectl delete deployment go-httpbin
警告

MseIngressConfig を削除すると、関連付けられた MSE クラウドネイティブゲートウェイも削除されます。ゲートウェイが不要になった場合にのみ削除してください。

kubectl delete MseIngressConfig test

次のステップ