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

Container Service for Kubernetes:ALB Ingressの作成

最終更新日:Feb 12, 2025

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

使用上の注意

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

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

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

使用上の注意

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

説明

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

  • ALB Ingressをインストールするときに、Gateway Sourceパラメーターを異なる値に設定できます。

    • (推奨) 新規または既存を選択:

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

    • [なし] を選択:

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

  • AlbConfigとIngressClass

    • AlbConfig:

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

    • IngressClass:

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

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

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

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

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

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

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

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

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

    インスタンスソース

    説明

    結果

    新しい

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

    • VPC: この値は、クラスターが存在する仮想プライベートクラウド (VPC) と同じであり、変更することはできません。

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

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

    既存

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

    なし

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

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

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

ACKコンソールの使用

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

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

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

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

    2. テンプレート: 次のコードをコードエディターにコピーします。 YAML構成ファイルは、coffeeteaという名前の2つのデプロイメントと、coffee-svctea-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. 左側のナビゲーションウィンドウで、[ワークロード]> [デプロイメント] を選択します。 コーヒーと紅茶という名前の展開が表示されます。

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

kubectlを使う

  1. cafe-service.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。 このファイルは、coffeeteaという名前の2つの展開と、coffee-svctea-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                           1/2     2            1           2m26s
      tea                              1/1     1            1           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 IngressMSE Ingressy、またはNginx Ingressを選択できます。

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

    ALBイングレス

    名前

    Ingressの名前を指定します。

    カフェ-ingress

    Ingressクラス

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

    alb

    ルール

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

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

    • マッピング: 次のパラメーターを設定します。

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

      • ルール:

        • プレフィックス (プレフィックスベースの一致): 要求されたURLパスのプレフィックスに一致します。

        • Exact (Exact Match): 要求されたURLパスと完全に一致します。

        • ImplementationSpecific (Default Value): ALB Ingressコントローラによって実装されるロジックに依存します。

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

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

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

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

    • ドメイン名: demo. Domain. ingress.top

    • マッピング:

      • パス: /tea

      • ルール: プレフィックス (プレフィックスベースの一致)

      • サービス: tea-svc

      • ポート: 80

    • マッピング:

      • パス: /coffee

      • ルール: プレフィックス (プレフィックスベースの一致)

      • サービス: coffee-svc

      • ポート: 80

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

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

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

    1. 左側のナビゲーションウィンドウで、[ネットワーク]> [Ingress] を選択します。 Ingressページには、cafe-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:
          # Configure a context path.
          - path: /tea
            pathType: ImplementationSpecific
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          # Configure a context path.
          - 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ルールのホストフィールドを使用して、リクエストのホストヘッダーと照合します。 ホストヘッダーが一致する場合、リクエストは対応するバックエンドサービスに送信されます。

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

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

    spec.ru les.http.paths.path

    はい

    URLパス。

    spec.ru les.http.paths.pathType

    はい

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

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

    はい

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

    spec.ru les.http.paths.backend.service.port.number

    はい

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

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

  2. 次のコマンドを実行して、外部からアクセス可能なドメイン名とcoffeeおよびtea Servicesのパスを設定します。

    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リクエストの送信元のリージョン。 ドロップダウンリストから [デフォルト] を選択します。

    レコード値

    ALBインスタンスのドメイン名であるCNAMEを入力します。

    TTL

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

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

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

この例では、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. Secretフィールドの右側にある [作成] をクリックします。

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

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

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

その他

詳細情報の表示

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

    説明

    カナリアリリースルールは、リクエストヘッダー、Cookie、および重みのいずれかの要素のみに基づいて設定できます。 リクエストヘッダー、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リクエストヘッダーはキーと値のペアです。 たとえば、keyheadernameに設定し、valueheadervalue1に設定できます。 複数のヘッダー間の論理関係は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) を提供します。

  • 「alb、port: xxxにリスナーが存在しない」というエラーメッセージが表示された場合はどうすればよいですか?

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

  • 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}]' # Add this annotation if the ALB Ingress is associated with multiple listeners. 
    spec:
      #...