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

Container Service for Kubernetes:ALB Ingress の作成

最終更新日:Jun 18, 2025

Application Load Balancer(ALB)Ingress を構成する場合は、ALB Ingress がバックエンド ポッドにトラフィックをルーティングできるように、クラスタ内に複数のリソースを作成する必要があります。このトピックでは、ALB Ingress を使用して外部サービスを提供するアプリケーションをデプロイする方法について説明します。

重要
  • Flannel ネットワークプラグインを使用する場合、ALB Ingress ゲートウェイのバックエンド サービスは、NodePort または LoadBalancer タイプである必要があります。

  • AlbConfig オブジェクト、名前空間、Ingress、およびサービスの名前は、aliyun で始めることはできません。

  • 以前の NGINX Ingress コントローラーバージョンは、Ingress リソースの spec : ingressClassName フィールドを認識できません。以前の NGINX Ingress コントローラーバージョンがインストールされており、ACK クラスタで NGINX Ingress と ALB Ingress の両方を使用している場合、ALB Ingress は NGINX Ingress コントローラーによって調整される可能性があります。この問題を回避するには、できるだけ早く NGINX Ingress コントローラーを更新するか、アノテーションを使用して ALB Ingress の IngressClass を指定します。詳細については、「NGINX Ingress コントローラーの更新」または「ALB Ingress の高度な構成」をご参照ください。

使用上の注意

ALB Ingress を作成する前に、ALB の原則と要件について理解しておくことをお勧めします。詳細については、「ALB Ingress の管理」をご参照ください。以下のリソース条件が満たされていることを確認してください。

説明

ACK 専用クラスタ で ALB Ingress を使用するには、最初にクラスタに ALB Ingress コントローラーにアクセスするための権限を付与する必要があります。詳細については、「ACK 専用クラスタに ALB Ingress コントローラーへのアクセスを承認する」をご参照ください。

  • ALB Ingress をインストールするときに、[ゲートウェイソース] パラメータを異なる値に設定できます。これにより、異なる操作結果が生じる可能性があります。

    • (推奨)[新規] または [既存] を選択します。

      コントローラーは、alb という名前の AlbConfig と対応する IngressClass リソースを自動的に作成します。デフォルトでは、AlbConfig はポート 80 の HTTP リスナーで構成されます。

    • (オプション)[なし] を選択します。

      ALB Ingress を作成する前に、AlbConfig を作成し、IngressClass を作成する必要があります。コントローラーは対応するリソースを作成しません。

  • AlbConfig と IngressClass

    • AlbConfig:

      AlbConfig は、ALB インスタンスを管理するために使用されます。AlbConfig のパラメータは、ALB インスタンスの構成を決定します。1 つの AlbConfig は 1 つの ALB インスタンスに対応します。詳細については、「AlbConfig を使用して ALB インスタンスを構成する」をご参照ください。

    • IngressClass:

      IngressClass は AlbConfig に関連付けられている必要があります。このようにして、IngressClass は ALB インスタンスに関連付けることができます。ALB Ingress を作成するときに、対応する AlbConfig 構成を使用するように IngressClass を構成できます。このようにして、特定のアプリケーションルーティング構成と負荷分散ポリシーを使用できます。

  • デプロイメントとサービスの作成

    サービスは、同じ機能を提供するポッドへの統一された入口です。ALB Ingress を作成するときは、外部トラフィックを対応するサービスに転送するルーティングルールを構成する必要があります。

このトピックでは、ALB Ingress コントローラーをインストールするときに ゲートウェイソース パラメータを 新規 に設定する方法について説明します。coffee および tea という名前のアプリケーションと、対応するサービスがデプロイされます。ドメイン名 demo.domain.ingress.top を持つ ALB Ingress がこれらのアプリケーション用に作成されます。DNS 解決が完了すると、アプリケーションにアクセスできます。

ALB Ingress コントローラーのインストール

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

  2. [クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のウィンドウで、[操作] > [アドオン] を選択します。

  3. [アドオン] ページで、[ネットワーキング] タブをクリックします。ネットワーク セクションで、[ALB Ingress Controller] カードを見つけて、右下隅にある インストール をクリックします。

  4. [コンポーネント ALB Ingress Controller のインストール] ダイアログボックスで、[ゲートウェイソース][新規] に設定し、[OK] をクリックします。

    インスタンスソース

    説明

    結果

    [新規](推奨)

    • [ネットワークタイプ]:必要に応じて、[インターネット] または [イントラネット] の ALB インスタンスを作成できます。課金については、「請求ルール」をご参照ください。

    • [VPC]:この値は、クラスタが存在する VPC と同じであり、変更できません。

    • [vSwitch]:この VPC の下で ALB によってサポートされているゾーンに対応する vSwitch が表示されます。異なるゾーンの 2 つの vSwitch を選択する必要があります。選択しない場合、使用可能な 2 つの vSwitch が自動的に選択されます。[vSwitch の作成] をクリックして、新しい vSwitch を作成することもできます。

    コントローラーは、alb という名前の AlbConfig と対応する IngressClass リソースを自動的に作成します。AlbConfig では、ポート 80 と HTTP を使用するリスナーがデフォルトで構成されます。リスナー拡張機能の詳細については、「HTTP リスナーの作成」をご参照ください。

    [既存](推奨)

    ドロップダウンメニューから既存の ALB インスタンスを選択して再利用できます。ベーシック ALB インスタンスはサポートされていません。詳細については、「既存の ALB インスタンスの再利用」をご参照ください。

    [なし](オプション)

    ALB Ingress コントローラーのみがインストールされます。ALB インスタンスは作成されません。

    重要

    コントローラーは対応するリソースを作成しません。AlbConfigIngressClass を手動で作成する必要があります。

デプロイメントとサービスの作成

ACK コンソールの使用

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

  2. [クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のウィンドウで、[ワークロード] > [デプロイメント] を選択します。

  3. [YAML から作成] をクリックします。

    1. [サンプルテンプレート][カスタム] を選択します。

    2. [テンプレート]:次のコードをコードエディターにコピーします。YAML 構成ファイルは、coffee および tea という名前の 2 つのデプロイメントと、coffee-svc および tea-svc という名前の 2 つのサービスをデプロイするために使用されます。

      YAML 構成ファイルの表示

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: coffee
      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
      spec:
        ports:
        - port: 80
          targetPort: 80
          protocol: TCP
        selector:
          app: coffee
        type: NodePort
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: tea
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: tea
        template:
          metadata:
            labels:
              app: tea
          spec:
            containers:
            - name: tea
              image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
              ports:
              - containerPort: 80
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: tea-svc
      spec:
        ports:
        - port: 80
          targetPort: 80
          protocol: TCP
        selector:
          app: tea
        type: NodePort
  4. 構成が完了したら、[作成] をクリックします。[作成済み] メッセージが表示されます。

  5. 次の手順を実行して、デプロイメントとサービスが作成されたかどうかを確認します。

    1. 左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。coffee および tea という名前のデプロイメントが表示されます。

    2. 左側のナビゲーションウィンドウで、[ネットワーク > サービス] を選択します。 coffee-svc と tea-svc という名前のサービスが表示されます。

kubectl の使用

  1. cafe-service.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。このファイルは、coffee および tea という名前の 2 つのデプロイメントと、coffee-svc および tea-svc という名前の 2 つのサービスをデプロイするために使用されます。

    YAML 構成ファイルの表示

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
    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
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: NodePort
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: tea
      type: NodePort
  2. 次のコマンドを実行して、デプロイメントとサービスをデプロイします。

    kubectl apply -f cafe-service.yaml

    予期される出力:

    deployment "coffee" created
    service "coffee-svc" created
    deployment "tea" created
    service "tea-svc" created
  3. デプロイメントとサービスのステータスを表示します。

    1. 次のコマンドを実行して、デプロイメントのステータスを表示します。

      kubectl get deployment

      予期される出力:

      NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
      coffee                           2/2     2            2           2m26s
      tea                              2/2     2            2           2m26s
    2. 次のコマンドを実行して、サービスのステータスを表示します。

      kubectl get svc

      予期される出力:

      NAME                          TYPE           CLUSTER-IP       EXTERNAL-IP           PORT(S)                 AGE
      coffee-svc                    NodePort       172.16.XX.XX     <none>                80:32056/TCP            9m38s
      tea-svc                       NodePort       172.16.XX.XX     <none>                80:31696/TCP            9m38s

ALB Ingress の作成

ACK コンソールの使用

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

  2. [クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のウィンドウで、[ネットワーク] > [Ingress] を選択します。

  3. [Ingress] ページで、[Ingress の作成] をクリックします。[Ingress の作成] ダイアログボックスで、Ingress を構成します。

    パラメータ

    説明

    [ゲートウェイタイプ]

    要件に基づいて、[ALB Ingress][MSE Ingress]、または [Nginx Ingress] を選択できます。

    3 つのゲートウェイタイプの相違点の詳細については、「NGINX Ingress、ALB Ingress、および MSE Ingress の比較」をご参照ください。

    ALB Ingress

    [名前]

    Ingress の名前を指定します。

    cafe-ingress

    [Ingress クラス]

    AlbConfig に関連付けられている Ingress のクラスを指定します。

    alb

    [ルール]

    [+ ルールの追加] をクリックして、Ingress ルールを追加します。

    • [ドメイン名]:カスタムドメイン名を指定します。

    • [マッピング]:次のパラメータを構成します。

      • [パス]:バックエンド サービスの URL パスを指定します。

      • [ルール]

        • [プレフィックス(プレフィックスベースのマッチ)]:リクエストされた URL パスのプレフィックスと一致します。

        • [完全一致(完全一致)]:リクエストされた URL パスと完全に一致します。

        • [実装固有(デフォルト値)]:ALB Ingress コントローラーによって実装されたロジックによって異なります。

        詳細については、「URL パスに基づいてリクエストを転送する」をご参照ください。

      • [サービス]:バックエンド サービスを選択します。

      • [ポート]:公開するサービスポートを指定します。

    • ドメイン名に複数のパスを構成できます。[+ 追加] をクリックしてパスを追加します。

    • [ドメイン名]:demo.domain.ingress.top

    • [マッピング]

      • [パス]:/tea

      • [ルール]:プレフィックス(プレフィックスベースのマッチ)

      • [サービス]:tea-svc

      • [ポート]:80

    • [マッピング]

      • [パス]:/coffee

      • [ルール]:プレフィックス(プレフィックスベースのマッチ)

      • [サービス]:coffee-svc

      • [ポート]:80

    その他のパラメータにはデフォルト値を使用します。詳細については、「(オプション)追加パラメータの構成」をご参照ください。

  4. 構成が完了したら、[Ingress の作成] パネルの左下隅にある [OK] をクリックします。

  5. Ingress が作成されたかどうかを確認し、エンドポイントをコピーします。

    1. 左側のナビゲーションウィンドウで、[ネットワーク > Ingress] を選択します。cafe-ingress という名前の Ingress が Ingress ページに表示されます。

    2. cafe-ingress[エンドポイント] 列で、ALB インスタンスのドメイン名をコピーします。

kubectl の使用

  1. cafe-ingress.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。このファイルは、Ingress を作成するために使用されます。

    YAML 構成ファイルの表示

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cafe-ingress 
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          # コンテキストパスを構成します。
          - path: /tea
            pathType: ImplementationSpecific
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          # コンテキストパスを構成します。
          - path: /coffee
            pathType: ImplementationSpecific
            backend:
              service:
                name: coffee-svc
                port: 
                  number: 80

    次の表は、指定できるパラメータについて説明しています。

    パラメータ

    必須

    説明

    metadata.name

    はい

    Ingress の名前。

    説明

    Ingress の名前は、クラスタ内で一意である必要があります。Ingress を作成するときは、名前の競合を防ぐために、Ingress 名が一意であることを確認してください。

    spec.ingressClassName

    はい

    関連付けられた IngressClass の名前。

    spec.rules.host

    いいえ

    HTTP ホストヘッダーのドメイン名。このパラメータはカスタムドメイン名に設定する必要があります。

    ブラウザで http://demo.domain.ingress.top などのドメイン名にアクセスすると、HTTP リクエストが送信されるときに、ブラウザは自動的に Host: demo.domain.ingress.top ヘッダーを追加します。このようにして、サーバーはヘッダーに基づいて宛先ホストを識別します。Kubernetes では、Ingress ルールの host フィールドは、リクエストのホストヘッダーと照合するために使用されます。ホストヘッダーが一致すると、リクエストは対応するバックエンド サービスに送信されます。

    説明
    • カスタムドメイン名を指定する場合は、ドメイン名のインターネットコンテンツプロバイダー(ICP)ファイリングが完了していることを確認してください。完了していない場合、ドメイン名が解決に失敗する可能性があります。詳細については、「ICP ファイリングプロセス」をご参照ください。

    • このパラメータを空のままにすると、Ingress ルールは Ingress コントローラーに送信されたすべてのリクエストと一致します。

    spec.rules.http.paths.path

    はい

    URL パス。

    spec.rules.http.paths.pathType

    はい

    URL マッチングルール。詳細については、「URL パスに基づいてリクエストを転送する」をご参照ください。

    spec.rules.http.paths.backend.service.name

    はい

    作成したサービスの名前。

    spec.rules.http.paths.backend.service.port.number

    はい

    作成したサービスのポート。

    ポートは、リクエストをバックエンド サービスにルーティングするために使用されるため重要です。リクエストがバックエンド サービスにルーティングされ、予期どおりに処理されるように、ポートが有効であることを確認してください。

  2. 次のコマンドを実行して、外部からアクセス可能なドメイン名と coffee および tea サービスの path を構成します。

    kubectl apply -f cafe-ingress.yaml

    予期される出力:

    ingress.networking.k8s.io/cafe-ingress created
  3. オプション。次のコマンドを実行して、ALB インスタンスのドメイン名を取得します。

    kubectl get ingress

    予期される出力:

    NAME           CLASS    HOSTS                         ADDRESS                                               PORTS   AGE
    cafe-ingress   alb      demo.domain.ingress.top       alb-m551oo2zn63yov****.cn-hangzhou.alb.aliyuncs.com   80      50s

ドメイン名解決の構成

  1. Alibaba Cloud DNS コンソール にログインします。

  2. [ドメイン名解決] ページで、[ドメイン名の追加] をクリックします。

  3. [ドメイン名の追加] ダイアログボックスで、カスタムドメイン名を入力し、[OK] をクリックします。

    重要

    CNAME レコードを作成する前に、ドメインが承認のための TXT レコード検証に合格している必要があります。

  4. 管理するドメイン名を見つけ、[操作] 列の [DNS 設定] をクリックします。

  5. [DNS 設定] ページで、[DNS レコードの追加] をクリックします。

  6. [DNS レコードの追加] パネルで、パラメータを構成し、[OK] をクリックします。次の表にパラメータを示します。

    パラメータ

    説明

    [レコードタイプ]

    DNS レコードのタイプ。ドロップダウンリストから [CNAME] を選択します。

    [ホスト名]

    ドメイン名のプレフィックス。例:www

    [DNS リクエストソース]

    DNS リクエストの送信元リージョン。ドロップダウンリストから [デフォルト] を選択します。

    [レコード値]

    CNAME(ALB インスタンスのドメイン名)を入力します。

    [TTL]

    DNS サーバーにキャッシュされる CNAME レコードの有効期間(TTL)。この例では、デフォルト値が使用されます。

トラフィック転送のテスト

ブラウザのアドレスバーに「テストドメイン名 + URL パス」と入力して、トラフィックが指定されたサービスに転送されるかどうかを確認します。

この例では、demo.domain.ingress.top が使用されます。

  1. ブラウザのアドレスバーに demo.domain.ingress.top/coffee と入力します。coffee-svc サービスのページが表示されます。image

  2. ブラウザのアドレスバーに demo.domain.ingress.top/tea と入力します。tea-svc サービスのページが表示されます。image

(オプション)追加パラメーターを構成する

パラメーター

説明

参照

TLS 設定

TLS 認証を有効にするかどうかを指定します。Ingress の TLS 認証を有効にできます。

  • [ドメイン名]:カスタムドメイン名を入力します。

  • [シークレット]:使用するシークレットを選択します。

    シークレットを作成するには、次の手順を実行します。

    1. [シークレット] フィールドの右側にある [作成] をクリックします。

    2. [シークレットの作成] ダイアログボックスで、[名前][証明書]、および [キー] パラメーターを構成します。次に、[OK] をクリックします。

    3. [シークレット] ドロップダウンリストから、作成したシークレットを選択します。

[+ 追加] をクリックして、さらに TLS 証明書を追加できます。

詳細

詳細情報を表示する

  • [カナリアリリース]:カナリアリリースを有効にします。リクエストヘッダー、Cookie、および重みに基づいてカナリアリリースルールを構成できます。

    説明

    リクエストヘッダー、Cookie、および重みのいずれか 1 つの要素のみに基づいてカナリアリリースルールを構成できます。また、リクエストヘッダー、Cookie、および重みに基づいて同時にカナリアリリースルールを構成することもできます。この場合、リクエストヘッダー、Cookie、および重みは優先順位の高い順に有効になります。

    • [リクエストヘッダーに基づく]alb.ingress.kubernetes.io/canary-by-header または alb.ingress.kubernetes.io/canary-by-header-value アノテーションを追加することにより、リクエストヘッダーに基づいてトラフィックを分散します。

    • [Cookie に基づく]alb.ingress.kubernetes.io/canary-by-cookie アノテーションを追加することにより、Cookie に基づいてトラフィックを分散します。

    • [重みに基づく]alb.ingress.kubernetes.io/canary-weight アノテーションを追加することにより、サービスの重み(0 ~ 100 の整数)に基づいてトラフィックを分散します。

  • [プロトコル]alb.ingress.kubernetes.io/backend-protocol アノテーションを追加することにより、バックエンド サービスで使用されるプロトコルを選択します。

    HTTP、HTTPS、および gRPC がサポートされています。

  • [パスの書き換え]alb.ingress.kubernetes.io/rewrite-target アノテーションを追加することにより、リクエストがバックエンド サービスに転送される前に、クライアント リクエスト内のパスを書き換えます。

カスタム転送ルール

詳細情報を表示する

カスタム転送ルールを有効にして、受信トラフィックをきめ細かく管理できます。

説明

転送ルールには最大 10 個の条件を追加できます。

  • [条件の追加] ドロップダウンリストでは、次の条件タイプを使用できます。

    • [ホスト]

      指定された 1 つ以上のドメイン名を含むリクエストのみがルーティングされるように指定します。複数のドメイン名は OR 関係で扱われます。ドメイン名を指定すると、システムは alb.ingress.kubernetes.io/conditions.host-example アノテーションを追加します。

    • [パス]

      指定されたパスを含むリクエストのみがルーティングされます。複数のパス間の論理関係は OR です。パスを指定すると、システムは alb.ingress.kubernetes.io/conditions.path-example アノテーションを追加します。

    • [HTTP ヘッダー]

      指定された 1 つ以上の HTTP ヘッダーを含むリクエストのみがルーティングされるように指定します。各 HTTP リクエストヘッダーはキーと値のペアです。たとえば、[キー]headername に、[値]headervalue1 に設定できます。複数のヘッダー間の論理関係は OR です。ヘッダーを指定すると、システムは alb.ingress.kubernetes.io/conditions.http-header-example アノテーションを追加します。

  • [アクション] ドロップダウンリストでは、次のアクションを使用できます。

    • [転送先]

      受信トラフィックを複数のバックエンド サーバー グループに転送します。[サービス名] ドロップダウンリストから、アクセスするサービスを選択します。[ポート] ドロップダウンリストから、サービスへの接続に使用するポートを選択します。各バックエンド サーバー グループのカスタム重みを指定します。

      説明

    • [固定レスポンスを返す]

      ALB Ingress を使用してクライアントに固定コンテンツが返されるように指定します。クライアントに返される状態コード、コンテンツ、およびコンテンツのタイプを指定できます。ビジネス要件に基づいて、[レスポンス状態コード][レスポンスコンテンツタイプ(オプション)]、および [レスポンスコンテンツ(オプション)] パラメーターを構成します。

      レスポンスコンテンツタイプ

      • [text/plain]:コンテンツがプレーンテキストであることを示します。

      • [text/css]:コンテンツが XML 形式であることを示します。

      • [text/html]:コンテンツが HTML 形式であることを示します。

      • [application/javascript]:コンテンツが JavaScript 形式であることを示します。

      • [application/json]:コンテンツが JSON 形式であることを示します。

詳細については、「ALB Ingress のカスタムルーティングルールを作成する」をご参照ください。

よくある質問

ALB Ingress の問題のトラブルシューティング方法の詳細については、「ALB Ingress コントローラーのトラブルシューティング」をご参照ください。次のコンテンツでは、よくある質問 (FAQ) を示します。

  • 「listener is not exist in alb, port: xxx」というエラーメッセージが表示された場合はどうすればよいですか?

    デフォルトでは、AlbConfig にはポート 80 のリスナーのみが構成されています。リスナーの作成方法の詳細については、「リスナーを作成する」をご参照ください。

  • AlbConfig に HTTP リスナーと HTTPS リスナーを構成した後、Ingress に HTTP リスナーと HTTPS リスナーを構成するにはどうすればよいですか?

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: https-ingress
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' # ALB Ingress が複数のリスナーに関連付けられている場合は、このアノテーションを追加します。
    spec:
      #...