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

Container Service for Kubernetes:ALB Ingress を使用したサービスの公開

最終更新日:Jun 23, 2026

デフォルトでは、ACK クラスター内のサービスは外部ネットワークから分離されています。ALB Ingress は、Application Load Balancer (ALB) を外部トラフィックのエントリポイントとして使用することで、これらのサービスを公開します。ALB は、ドメインベースのルーティング、セキュリティ、および高可用性を提供します。

仕組み

  1. リソースの関連付け

    AlbConfig オブジェクトは、機能エディションやリスナーなど、ALB インスタンスの特定の設定を定義します。各 AlbConfig オブジェクトは、ALB インスタンスと 1 対 1 でマッピングされます。Ingress で定義されたパスマッピングと関連する Service は、ALB インスタンスのルーティングルールとサーバーグループに自動的に変換されます。

  2. 動的な同期

    ALB Ingress Controller は、API サーバーで Ingress および AlbConfig リソースの変更を継続的に監視し、関連する ALB インスタンスを動的に更新します。

  3. トラフィック転送

    Nginx Ingress Controller とは異なり、ALB Ingress Controller は、ALB インスタンスのコントロールプレーンとして機能するマネージドコンポーネントです。データプレーントラフィックを直接処理しません。ALB インスタンスは、ユーザートラフィックを処理し、Service のバックエンド Pod に転送します。

サービスタイプの制限事項

Flannel ネットワークプラグインを使用する場合、ALB Ingress のバックエンドサービスは NodePort および LoadBalancer タイプに制限されます。

ALB Ingress Controller のインストール

クラスター作成時

  1. ACK コンソールにログインし、Kubernetes クラスターの作成 をクリックします。

  2. コンポーネント設定 ステップで、Ingress セクションに移動し、ALB Ingress を選択します。

  3. この例では、[新規作成] オプションを使用します。画面の指示に従ってクラスターを作成します。

    ALB Application Load Balancer インスタンス

    説明

    新しく作成する

    ALB インスタンス、AlbConfig、および IngressClass を自動的に作成します。

    • ALB インスタンス:クラスターの VPC 内に標準の従量課金制のパブリックまたはプライベート ALB インスタンスを自動的に作成し、HTTP:80 リスナーを設定します。

    • AlbConfig と IngressClass:クラスター内に対応する AlbConfig と IngressClass リソースを自動的に作成し、ALB インスタンスに関連付けます。

    既存を使用

    このオプションは、クラスターが既存の Virtual Private Cloud (VPC) を使用するように設定されている場合にのみ利用可能です。

    既存の ALB インスタンスを使用し、AlbConfig と IngressClass を自動的に作成します。指定された ALB インスタンスは、Standard または WAF-enhanced エディションであり、クラスターと同じ VPC 内にあり、別のクラスターに関連付けられていない必要があります。

    今は作成しない

    ALB Ingress Controller コンポーネントのみをインストールします。後で 手動で AlbConfig と IngressClass を作成する必要があります。これは、ALB インスタンスの設定をカスタマイズする必要があるシナリオに適しています。

既存のクラスターの場合

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[コンポーネントとアドオン] をクリックします。

  3. 検索ボックスを使用するか、ネットワーク タブをクリックしてコンポーネントを見つけます。[ALB Ingress Controller] コンポーネントカードの右下隅にある インストール をクリックします。

  4. この例では、[新規作成] オプションを使用します。OK をクリックします。

    ALB Application Load Balancer インスタンス

    説明

    新しく作成する

    ALB インスタンス、AlbConfig、および IngressClass を自動的に作成します。

    • ALB インスタンス:クラスターの VPC 内に標準の従量課金制のパブリックまたはプライベート ALB インスタンスを自動的に作成し、HTTP:80 リスナーを設定します。

    • AlbConfig と IngressClass:クラスター内に対応する AlbConfig と IngressClass リソースを自動的に作成し、ALB インスタンスに関連付けます。

    既存のものを使用する

    既存の ALB インスタンスを使用し、AlbConfig と IngressClass を自動的に作成します。指定された ALB インスタンスは、Standard または WAF-enhanced エディションであり、クラスターと同じ VPC 内にあり、別のクラスターに関連付けられていない必要があります。

    今は作成しない

    ALB Ingress Controller コンポーネントのみをインストールします。後で 手動で AlbConfig と IngressClass を作成する必要があります。これは、ALB インスタンスの設定をカスタマイズする必要があるシナリオに適しています。

サンプルアプリケーションの作成

このサンプルアプリケーションは、coffee という名前の Deployment と、coffee-svc という名前の対応する Service をデプロイします。

コンソール

  1. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、ワークロード > デプロイメント をクリックします。

  2. YAML のリソースの作成 をクリックします。サンプルテンプレート ドロップダウンリストから カスタム を選択します。次に、以下の内容をテンプレートエディターにコピーし、デプロイ をクリックします。

    サンプルアプリケーションの YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP  # flannel ネットワークプラグインを使用する場合、ALB Ingress のバックエンド Service は NodePort および LoadBalancer タイプのみをサポートします。
  3. 確認ダイアログボックスで ビュー をクリックし、Pod のステータスが Running であることを確認します。

kubectl

  1. kubectl を使用してクラスターに接続します

  2. 次の内容を含む coffee-deployment-service.yaml という名前のファイルを作成します。

    サンプルアプリケーションの YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP  # flannel ネットワークプラグインを使用する場合、ALB Ingress のバックエンド Service は NodePort および LoadBalancer タイプのみをサポートします。
  3. サンプルアプリケーションの Deployment と Service を作成します。

    kubectl apply -f coffee-deployment-service.yaml
  4. Pod のステータスが Running であることを確認します。

     kubectl get pod -l app=coffee

    期待される出力:

    NAME                      READY   STATUS    RESTARTS   AGE
    coffee-84bd6*****-*****   1/1     Running   0          4m22s
    coffee-84bd6*****-*****   1/1     Running   0          4m22s

ALB Ingress の作成

ALB Ingress のドメイン名とパスマッピングを設定して、ingress-demo.com/coffee へのリクエストをクラスター内の coffee-svc Service にルーティングします。

ACK 専用クラスターで ALB Ingress を使用するには、ALB Ingress Controller にアクセス権限を付与する必要があります。

コンソール

  1. 左側のナビゲーションウィンドウで、ネットワーク > Ingress を選択します。default 名前空間を選択し、Ingress の作成 をクリックします。

  2. 次の Ingress パラメーターを指定し、OK をクリックします。

    • 名前coffee-ingress

    • ドメイン名: ingress-demo.com

    • マッピングパス/coffee一致ルールPrefixサービス名coffee-svcポート80

      マッチングルール (pathType)

      説明

      Prefix

      リクエストパスのプレフィックスに基づいて一致します。たとえば、/coffee/1 または /coffee/buy/1 へのリクエストは一致しますが、/cof または /coffeebuy/1 へのリクエストは一致しません。

      Exact

      リクエストパスと完全に一致します。/coffee へのリクエストのみが一致します。

      ImplementationSpecific

      マッチング動作は Ingress Controller の実装に依存します。ALB Ingress Controller の場合、このタイプは完全一致と同等です。

  3. エンドポイント アドレスを取得します。

    ALB Ingress が有効になるまで約 10 秒かかります。更新ボタンをクリックしてエンドポイント情報を取得できます。エンドポイントが長時間更新されない場合は、Ingress 名をクリックして イベント タブに移動し、問題をトラブルシューティングしてください。

    Ingress リストの [エンドポイント] 列で、ALB エンドポイントアドレスを見つけます。これは alb-<instance_id>.cn-wulanchabu.alb.aliyuncsslb.com のような形式です。

  4. ドメインとエンドポイントへのアクセスをテストします。HTTP ステータスコード 200 は、ALB Ingress が正常に機能していることを示します。

    curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"

kubectl

  1. 次の内容で coffee-ingress.yaml という名前のファイルを作成します。次に、kubectl apply -f coffee-ingress.yaml コマンドを実行して ALB Ingress を作成します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: coffee-ingress
      namespace: default
    spec:
      ingressClassName: alb
      rules:
      - host: ingress-demo.com
        http:
          paths:
          - path: /coffee
            backend:
              service: 
                name: coffee-svc
                port:
                  number: 80
            pathType: Prefix

    マッチングルール (pathType)

    説明

    Prefix

    リクエストパスのプレフィックスに基づいて一致します。たとえば、/coffee/1 または /coffee/buy/1 へのリクエストは一致しますが、/cof または /coffeebuy/1 へのリクエストは一致しません。

    Exact

    リクエストパスと完全に一致します。/coffee へのリクエストのみが一致します。

    ImplementationSpecific

    マッチング動作は Ingress Controller の実装に依存します。ALB Ingress Controller の場合、このタイプは完全一致と同等です。

  2. Ingress を表示し、ADDRESS フィールドからエンドポイントアドレスを取得します。

    kubectl get ingress coffee-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'

    期待される出力:

    alb-******************.cn-wulanchabu.alb.aliyuncsslb.com
  3. ドメインとエンドポイントへのアクセスをテストします。HTTP ステータスコード 200 は、ALB Ingress が正常に機能していることを示します。

    curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"

課金

  • ALB Ingress Controller:これはマネージド ACK コンポーネントであり、無料です。

  • ALB インスタンス:各 AlbConfig リソースオブジェクトは、対応する ALB インスタンスを作成します。ALB インスタンスは 従量課金制です。

本番環境へのデプロイ

  • DNS の設定:CNAME レコードを作成して、サービスドメインを ALB インスタンスのパブリックエンドポイントにマッピングします。これにより、ドメインがインスタンスエンドポイントから分離され、可用性が高く柔軟なサービスエントリポイントが確保されます。

  • HTTPS の有効化Certificate Management Service を使用して証明書を一元管理し、Ingress リソースの tls フィールドで宣言的に参照して、HTTPS でサービストラフィックを保護します。

クォータと制限事項

  • AlbConfig、Ingress、Service、および名前空間のリソース名は aliyun で始めることはできません。

  • ALB Ingress のクォータ制限については、「ALB クォータの計算」をご参照ください。

  • ALB Ingress がサポートするリージョンとアベイラビリティーゾーンについては、「ALB がサポートするリージョンとゾーン」をご参照ください。

よくある質問

Ingress が HTTP エラーコードを返すのはなぜですか?

原因

  • 503 (Service Temporarily Unavailable) エラー

    • 一致するルーティングルールがない:リクエストパスが Ingress で設定されたどのルーティングルールにも一致しません。

    • 正常なバックエンド Pod がない:関連付けられた Service に準備完了状態の Pod がなく、endpoints オブジェクトが空になります。

  • 502 (Bad Gateway) エラー

    HTTP または HTTPS リスナーがクライアント接続リクエストを受信した後、ALB はリクエストを Pod に転送できないか、Pod からの応答を受信できないため、クライアントに HTTP 502 Bad Gateway ステータスコードを送信します。

  • 404 (Not Found) エラー

    これは通常、リクエストが Ingress のルーティングルールに一致するものの、その URL がバックエンド Pod 内のアプリケーションのサービスパスと一致しない場合に発生します。

  • 400 (Bad Request) エラー

    これは、HTTPS リスナーに HTTP リクエストを送信するなど、いくつかの理由で発生する可能性があります。

HTTP エラーコードの詳細については、「ALB のステータスコード」をご参照ください。

解決策

  1. Ingress のステータスを確認する:kubectl describe ingress <ingress-name> -n <namespace> コマンドを実行し、Events セクションでエラーメッセージを確認します。listener is not exist in alb のようなイベントが表示された場合は、必要なリスナー設定を AlbConfig に追加します

    ...
    Events:
      Type     Reason                  Age     From     Message
      ----     ------                  ----    ----     -------
      Warning  FailedBuildModel        ****    ingress  listener is not exist in alb, port: 443, protocol: HTTPS
      Warning  FailedBuildModel        ****    ingress  listener not found for (443/HTTPS), with ingresses 1
    ...
  2. バックエンドエンドポイントを確認する:kubectl get endpoints <service-name> -n <namespace> コマンドを実行して、ENDPOINTS フィールドに少なくとも 1 つの正常な Pod の IP アドレスとポートがリストされていることを確認します。空の場合は、Service の selector が Pod の labels と一致していること、および Pod が Running 状態であることを確認します。

  3. Pod のステータスとログを確認する:kubectl get pod -l <app=your-app> -n <namespace> を実行して Pod のステータスを表示します。次に、Pod 名を使用して kubectl logs <pod-name> -n <namespace> を実行し、アプリケーションログで起動の失敗やリクエスト処理のエラーを確認します。

  4. ネットワーク接続のテスト: Pod 内またはノードから、curl を使用してバックエンドサービスの ClusterIP または Pod IP にアクセスし、サービスがクラスター内で到達可能であることを確認します。

TLS 設定後に HTTPS にアクセスできないのはなぜですか?

原因

  • ALB インスタンスがポート 443 をリッスンしていない:Ingress に TLS を設定しましたが、対応する HTTPS:443 リスナーが作成されていません。

  • 証明書の設定が正しくない:Secret タイプが kubernetes.io/tls または IngressTLS ではない、または data フィールドの tls.crttls.key の内容が正しくないか、一致していません。

  • 古い証明書:ALB インスタンスが古い証明書を使用している可能性があります。これは、Alibaba Cloud Certificate Management Service で証明書を更新したものの、AlbConfig で証明書 ID を更新しなかった場合、または自動検出と調整がトリガーされなかった場合に発生します。

解決策

  1. リスナーポートを確認する:kubectl describe albconfig <alb-name> -n <namespace> コマンドを実行して、spec.listeners.port: 443 および spec.listeners.protocol: HTTPS の設定が存在することを確認します。

  2. Ingress 設定を確認する:Ingress 設定に alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}] アノテーションが含まれていることを確認します。このアノテーションは、Ingress を HTTP および HTTPS リスナーに関連付けます。

  3. Secret 設定を確認する:Ingress 設定で、spec.tlssecretName フィールドを確認し、正しい Secret が参照されていることを確認します。kubectl get secret <secret-name> -n <namespace> -o yaml コマンドを実行して、Secret のタイプとデータ整合性を確認します。

Ingress ドメインの名前解決を設定する方法

  1. ドメイン名を登録

  2. CNAME レコードを追加します

    たとえば、レコードタイプ CNAME、ホストレコード @ (ルートドメイン、たとえば ingress-demo.com を表す)、およびレコード値を Ingress エンドポイントアドレスとして DNS レコードを追加します
  3. ブラウザで http://ingress-demo.com/coffee にアクセスし、ドメイン名の名前解決が機能していることを確認します。

    アクセスが成功すると、NGINX テストページが返され、バックエンド Pod の Server addressServer nameDate、および URI (値は /coffee) などの情報が表示されます。これは、Ingress がリクエストをバックエンド Pod に正しくルーティングしたことを示します。

    検証には、例を登録済みのドメイン名に置き換えてください。ドメイン名の名前解決が失敗した場合は、「ドメイン名解決の失敗に関するクイックトラブルシューティング」をご参照ください。

Ingress の HTTPS を設定する方法

  1. 公式証明書を購入する申請します。使用したい証明書が 発行済み 状態であることを確認してください。

  2. SSL 証明書をダウンロードします

    この例では、サーバータイプを [その他] に設定して、ingress-demo.com
  3. 証明書ファイルを保存するための Secret を作成します。

    1. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、設定 > シークレット をクリックします。

    2. シークレット ページで、default 名前空間を選択し、左側の 作成する をクリックします。次の構成を追加し、OK をクリックします。

      • 名前ingress-tls

      • タイプTLS 証明書

      • 証明書:ダウンロードして解凍した証明書ファイル (.pem) の全内容。

      • キー:ダウンロードして解凍した秘密鍵ファイル (.key) の全内容。

  4. AlbConfig を更新して、ALB インスタンスに HTTPS:443 リスナーを追加します。

    1. 左側のナビゲーションウィンドウで、ワークロード > カスタムリソース を選択します。リソースオブジェクト タブで AlbConfig を検索し、検索結果をクリックします。

    2. AlbConfig リソースオブジェクトのリストで、ターゲットリソース alb を見つけ、アクション 列の YAML の編集 をクリックします。

    3. spec.listeners.port: 443 および spec.listeners.protocol: HTTPS フィールドを追加し、OK をクリックします。

      spec:
          config:
            addressAllocatedMode: Fixed
            addressType: Internet
            zoneMappings:
              - vSwitchId: vsw-xxx
              - vSwitchId: vsw-xxx
          listeners:
            - port: 80
              protocol: HTTP
            - port: 443
              protocol: HTTPS
  5. Ingress を更新して TLS 設定を追加し、HTTPS:443 リスナーに関連付けます。

    1. 左側のナビゲーションウィンドウで、ネットワーク > Ingress を選択します。ターゲット Ingress の アクション 列で、更新 をクリックします。

    2. 次の設定を追加し、OK をクリックします。

      • TLS 設定:有効

      • ドメイン名ingress-demo.com

      • シークレットingress-tls

      • 注釈alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]

  6. ブラウザで https://ingress-demo.com/coffee にアクセスし、HTTPS アクセスを確認します。

    ページには NGINX のロゴとサーバーの応答情報が表示されます。Server addressServer name、および URI (値は /coffee) が期待どおりに返されます。これにより、HTTPS が正しく設定され、Ingress がリクエストを coffee バックエンド Pod にルーティングしていることが確認できます。

    検証には、例を登録済みのドメイン名に置き換えてください。

HTTPS 証明書の設定方法の詳細については、「暗号化通信のための HTTPS 証明書の設定」をご参照ください。

AlbConfig と IngressClass を手動で作成する方法

AlbConfig の作成

  1. VPC コンソールにログインし、クラスターがデプロイされている VPC 内の異なるアベイラビリティーゾーンにある少なくとも 2 つの vSwitch の ID を記録します。

    設定された vSwitch のアベイラビリティーゾーンは、ALB でサポートされている必要があります。詳細については、「ALB のリージョンとゾーン」をご参照ください。
  2. 次のコードの zoneMappings.vSwitchId を前のステップで取得した vSwitch ID に置き換えます。内容を albconfig.yaml という名前のファイルに保存し、kubectl apply -f albconfig.yaml を実行して AlbConfig を作成します。

    より詳細な手順については、「AlbConfig の作成」をご参照ください。
    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb # 同じ名前の別の AlbConfig リソースを作成しないでください。
    spec:
      config:
        name: alb-test
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-****cg2a9g71hx8go**** # 実際の vSwitch ID に置き換えてください。
        - vSwitchId: vsw-****un9tql5t8nh15**** # 実際の vSwitch ID に置き換えてください。
      listeners:
        - port: 80
          protocol: HTTP

IngressClass の作成

IngressClass リソースは、AlbConfig を Ingress リソースに関連付けます。Ingress で ingressClassName: alb を指定すると、alb IngressClass で定義された AlbConfig が使用されます。

次の内容を IngressClass.yaml という名前のファイルに保存し、kubectl apply -f IngressClass.yaml を実行して IngressClass を作成します。

spec.parameters.name フィールドは、AlbConfig の名前に設定する必要があります。コンポーネントをインストールするときに作成されるデフォルトの AlbConfig の名前は alb です。詳細については、「IngressClass を使用して AlbConfig を Ingress に関連付ける」をご参照ください。
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: alb
spec:
  controller: ingress.k8s.alibabacloud/alb
  parameters:
    apiGroup: alibabacloud.com
    kind: AlbConfig
    name: alb # これは AlbConfig リソースの名前と一致する必要があります。

関連ドキュメント

ALB Ingress の高度な使用方法

ALB Ingress 転送ルールのカスタマイズ

ALB Ingress を使用したカナリアリリースの実行