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

Container Service for Kubernetes:ALB Ingressの作成

最終更新日:Nov 21, 2024

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

あなたが始める前に

ALB Ingressに関連する用語については、まずALB Ingressの概要を読むことをお勧めします。

制限事項

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

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

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

シナリオ

次の例では、NGINXサービスは4つのポッドにデプロイされています。 このトピックでは、例を使用して、同じドメイン名で異なるURLパスを宛先とするリクエストを転送するようにALB Ingressを設定する方法について説明します。

フロントエンド要求

宛先サービス

demo.domain.ingress.top/coffee

サービスコーヒー

demo.domain.ingress.top /お茶

お茶サービス

前提条件

ステップ1: ALB Ingressコントローラのインストール

ALB Ingressを使用するには、まずALB Ingressコントローラーをインストールします。

クラスター作成時にALB Ingressコントローラーをインストールする

ACK管理クラスターまたはACK専用クラスターを作成する場合、Ingress セクションでALB Ingressを選択します。

[ゲートウェイソース][新規][既存] 、または [なし] に設定できます。 次の表に、3つのオプションを示します。

重要

[新規] または [既存] を選択した場合、ALB Ingressコントローラーのインストール後にAlbConfigとIngressClassが自動的に作成されます。 HTTPを使用し、ポート80でリッスンするリスナーは、AlbConfigで設定されています。

比較項目

新しい

既存

なし

利用シナリオ

クラスターでALB Ingressを使用するのはこれが初めてです。 クラスターにはAlbConfigが存在しません。

既存のALBインスタンスを使用します。

ALB Ingressコントローラーのインストール後にAlbConfigを設定します。

制御ポリシー機能の動作

AlbConfigが作成されると、AlbConfigに基づいてALBインスタンスが自動的に作成されます。

AlbConfigは自動的に作成されます。 idフィールドは、指定されたALBインスタンスのIDに設定されます。

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

次のステップ

[ネットワークタイプ] をALBインスタンスが使用するネットワークのタイプに設定し、[vSwitch] をALBインスタンスのvSwitchに設定します。

重要

高可用性を確保するために、異なるゾーンに存在するvSwitchを少なくとも2つ選択することを推奨します。

使用するALBインスタンスにALB Cloud-native Gatewayを設定します。 AlbConfigを使用してALBインスタンスを指定するには、「既存のALBインスタンスの再利用」をご参照ください。

重要

基本ALBインスタンスはサポートされていません。

既存のAlbConfigを選択するか、後でAlbConfigを作成します。

既存のクラスターにALB Ingressコントローラーをインストールする

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

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

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

  4. [ALB Ingress Controllerのインストール] ダイアログボックスで、[ゲートウェイソース][新規][既存] 、または [なし] に設定します。 次の表に、3つのオプションを示します。

    重要

    [新規] または [既存] を選択した場合、ALB Ingressコントローラーのインストール後にAlbConfigとIngressClassが自動的に作成されます。 HTTPを使用し、ポート80でリッスンするリスナーは、AlbConfigで設定されています。

    比較項目

    新しい

    既存

    なし

    利用シナリオ

    クラスターでALB Ingressを使用するのはこれが初めてです。 クラスターにはAlbConfigが存在しません。

    既存のALBインスタンスを使用します。

    ALB Ingressコントローラーのインストール後にAlbConfigを設定します。

    制御ポリシー機能の動作

    AlbConfigが作成されると、AlbConfigに基づいてALBインスタンスが自動的に作成されます。

    AlbConfigは自動的に作成されます。 idフィールドは、指定されたALBインスタンスのIDに設定されます。

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

    次のステップ

    [ネットワークタイプ] をALBインスタンスが使用するネットワークのタイプに設定し、[vSwitch] をALBインスタンスのvSwitchに設定します。

    重要

    高可用性を確保するために、異なるゾーンに存在するvSwitchを少なくとも2つ選択することを推奨します。

    使用するALBインスタンスにALB Cloud-native Gatewayを設定します。 AlbConfigを使用してALBインスタンスを指定するには、「既存のALBインスタンスの再利用」をご参照ください。

    重要

    基本ALBインスタンスはサポートされていません。

    既存のAlbConfigを選択するか、後でAlbConfigを作成します。

  5. [OK] をクリックします。

説明

ALB Ingressを使用してACK専用クラスターにデプロイされたサービスにアクセスするには、まずクラスターにALB Ingressコントローラーへのアクセスを許可する必要があります。 詳細については、「ACK専用クラスターにALB Ingressコントローラーへのアクセスを許可する」をご参照ください。

手順2: バックエンドサービスのデプロイ

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

ステップ3: AlbConfigの作成

説明

手順1: ALB Ingressコントローラーのインストールで、Gateway Source新規または既存に設定した場合、alb Ingressコントローラーによって、albという名前のAlbConfigとALBという名前のIngressClassが自動的に作成されます。 このステップはスキップできます。

ACKコンソール

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

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

  3. [カスタムリソース] ページの右上隅で、[YAMLから作成] をクリックします。

    1. サンプルテンプレート: ドロップダウンリストから [カスタム] を選択します。

    2. テンプレート: 次のコードをコードエディターにコピーします。

      YAML設定ファイル

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb
      spec:
        config:
          name: alb-test
          addressType: Internet
          zoneMappings:
          - vSwitchId: vsw-uf6ccg2a9g71hx8go****
          - vSwitchId: vsw-uf6nun9tql5t8nh15****
        listeners:
          - port: 80
            protocol: HTTP

      次の表に、指定できるパラメーターを示します。

      パラメーター

      必須

      説明

      metadata.name

      必須

      AlbConfigの名前。

      説明

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

      spec.config.name

      選択可能

      ALBインスタンスの名前。

      spec.config.addressType

      選択可能

      ALBインスタンスのネットワークタイプ。 有効な値:

      • インターネット: インターネットに面しています。 デフォルト値です。 ALBインスタンスはインターネットにサービスを提供し、インターネット経由でアクセスできます。

        説明

        ALBインスタンスがインターネット接続サービスを提供できるようにするには、ALBインスタンスをelastic IPアドレス (EIP) に関連付ける必要があります。 インターネット接続のALBインスタンスを使用している場合、関連するEIPのインスタンス料金と帯域幅またはデータ転送料金が課金されます。 詳細については、「従量課金」をご参照ください。

      • イントラネット: 内部向き。 ALBインスタンスは仮想プライベートクラウド (VPC) 内でサービスを提供し、インターネット経由でアクセスすることはできません。

      spec.config.zoneMappings

      必須

      ALBインスタンスに関連付けられているvSwitchのID。 vSwitchの作成方法の詳細については、「vSwitchの作成と管理」をご参照ください。

      説明
      • 指定されたvSwitchは、ALBインスタンスでサポートされているゾーンにデプロイし、クラスターと同じVPCにデプロイする必要があります。 ALBでサポートされているリージョンとゾーンの詳細については、「ALBが利用可能なリージョンとゾーン」をご参照ください。

      • ALBはマルチゾーン展開をサポートしています。 現在のリージョンで2つ以上のゾーンがサポートされている場合は、高可用性を確保するために2つ以上のゾーンのvSwitchを選択します。

      spec.listeners

      選択可能

      ALBインスタンスのリスナーポートとプロトコル。 この例では、ポート80を使用するHTTPリスナーが設定されています。

      リスナーは、ALBがトラフィックを受信する方法を定義します。 リスナーの構成を保持することを推奨します。 それ以外の場合は、ALB Ingressを使用する前にリスナーを作成する必要があります。

  4. 設定が完了したら、[作成] をクリックします。 [作成済み] メッセージが表示されます。

  5. 次の手順を実行して、ALBインスタンスが作成されたことを確認します。

    1. ALB コンソールにログインします。

    2. 上部のナビゲーションバーで、ALBインスタンスがデプロイされているリージョンを選択します。

    3. [インスタンス] ページで、ALB-testという名前のalbインスタンスがインスタンスリストに表示されていることを確認します。

kubectl

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

    YAML設定ファイル

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        name: alb-test
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****
        - vSwitchId: vsw-uf6nun9tql5t8nh15****
      listeners:
        - port: 80
          protocol: HTTP

    次の表に、指定できるパラメーターを示します。

    パラメーター

    必須

    説明

    metadata.name

    必須

    AlbConfigの名前。

    説明

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

    spec.config.name

    選択可能

    ALBインスタンスの名前。

    spec.config.addressType

    選択可能

    ALBインスタンスのネットワークタイプ。 有効な値:

    • インターネット: インターネットに面しています。 デフォルト値です。 ALBインスタンスはインターネットにサービスを提供し、インターネット経由でアクセスできます。

      説明

      ALBインスタンスがインターネット接続サービスを提供できるようにするには、ALBインスタンスをEIPに関連付ける必要があります。 インターネット接続のALBインスタンスを使用している場合、EIPのインスタンス料金と帯域幅またはデータ転送料金が課金されます。 詳細については、「従量課金」をご参照ください。

    • イントラネット: 内部向き。 ALBインスタンスはVPC内でサービスを提供し、インターネット経由でアクセスすることはできません。

    spec.config.zoneMappings

    必須

    ALBインスタンスに関連付けられているvSwitchのID。 vSwitchの作成方法の詳細については、「vSwitchの作成と管理」をご参照ください。

    説明
    • 指定されたvSwitchは、ALBインスタンスでサポートされているゾーンにデプロイし、クラスターと同じVPCにデプロイする必要があります。 ALBでサポートされているリージョンとゾーンの詳細については、「ALBが利用可能なリージョンとゾーン」をご参照ください。

    • ALBはマルチゾーン展開をサポートしています。 現在のリージョンで2つ以上のゾーンがサポートされている場合は、高可用性を確保するために2つ以上のゾーンのvSwitchを選択します。

    spec.listeners

    選択可能

    ALBインスタンスのリスナーポートとプロトコル。 この例では、ポート80を使用するHTTPリスナーが設定されています。

    リスナーは、ALBがトラフィックを受信する方法を定義します。 リスナーの構成を保持することを推奨します。 それ以外の場合は、ALB Ingressを使用する前にリスナーを作成する必要があります。

  2. 次のコマンドを実行して、AlbConfigを作成します。

    kubectl apply -f alb-test.yaml

    期待される出力:

    albconfig.alibabacloud.com/alb-demo created

ステップ4: IngressClassの作成

AlbConfigごとにIngressClassを作成することを推奨します。

説明

手順1: ALB Ingressコントローラーのインストールで、Gateway Source新規または既存に設定した場合、alb Ingressコントローラーによって、albという名前のAlbConfigとALBという名前のIngressClassが自動的に作成されます。 このステップはスキップできます。

kubectl

  1. alb.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。

    YAML設定ファイル

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb

    次の表に、指定できるパラメーターを示します。

    パラメーター

    必須

    説明

    metadata.name

    必須

    IngressClassの名前。

    説明

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

    spec.parameters.name

    必須

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

  2. 次のコマンドを実行してIngressClassを作成します。

      kubectl apply -f alb.yaml

    期待される出力:

    ingressclass.networking.k8s.io/alb created

ACKコンソール

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

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

  3. [カスタムリソース] ページの右上隅で、[YAMLから作成] をクリックします。

    1. サンプルテンプレート: ドロップダウンリストから [カスタム] を選択します。

    2. テンプレート: 次のコードをコードエディターにコピーします。

      YAML設定ファイル

      apiVersion: networking.k8s.io/v1
      kind: IngressClass
      metadata:
        name: alb
      spec:
        controller: ingress.k8s.alibabacloud/alb
        parameters:
          apiGroup: alibabacloud.com
          kind: AlbConfig
          name: alb

      次の表に、指定できるパラメーターを示します。

      パラメーター

      必須

      説明

      metadata.name

      必須

      IngressClassの名前。

      説明

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

      spec.parameters.name

      必須

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

  4. 設定が完了したら、[作成] をクリックします。 [作成済み] メッセージが表示されます。

  5. 次の手順を実行して、IngressClassが作成されていることを確認します。

    1. 左側のウィンドウで、[ワークロード]> [カスタムリソース] を選択します。

    2. [カスタムリソース] ページで、[リソースオブジェクト] タブをクリックします。

    3. [APIグループ] 検索ボックスに、[IngressClass] と入力します。 作成したIngressClassが表示されます。

ステップ5: 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クラス

    Ingressのクラスを指定します。

    alb

    リスナー /ポート

    AlbConfigで指定するALBインスタンスのリスナーポートとプロトコル。リスナーとプロトコルは、ALBインスタンスがトラフィックを受信および処理する方法を定義します。

    HTTP:80

    ルール

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

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

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

      • パス: バックエンドサービスのURLパスを入力します。 この例では、ルートパス /が使用されます。

      • ルール: [プレフィックス (プレフィックスベースの一致)][完全一致] 、または [ImplementationSpecific (デフォルト値)] を選択できます。

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

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

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

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

    • マッピング:

      • パス: /tea

      • ルール: ImplementationSpecific。 デフォルト値です。

      • サービス: tea-svc

      • ポート: 80

    • マッピング:

      • パス: /coffee

      • ルール: ImplementationSpecific。 デフォルト値です。

      • サービス: coffee-svc

      • ポート: 80

    TLS設定

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

    • ドメイン名: カスタムドメイン名。

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

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

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

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

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

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

    詳細については、「ALB Ingressを使用したHTTPSリスナーの証明書の設定」をご参照ください。

    TLS設定をオフにします。 この例では、TLS証明書を設定する必要はありません。

    その他

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

      説明

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

      • [リクエストヘッダーに基づく]: nginx.ingress.kubernetes.io/canary-by-Headernginx.ingress.kubernetes.io/canary-by-header-value、またはnginx.ingress.kubernetes.io/canary-by-header-pattern注釈を追加して、リクエストヘッダーに基づいてトラフィックを分散します。

      • Cookieに基づく: nginx.ingress.kubernetes.io/canary-by-cookie注釈を追加して、Cookieに基づいてトラフィックを配布します。

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

    • プロトコル: nginx.ingress.kubernetes.io/backend-Protocolアノテーションを追加して、バックエンドサービスで使用されるプロトコルを選択します。

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

    • パスの書き換え: nginx.ingress.kubernetes.io /Rewrite-targetアノテーションを追加して、リクエストがバックエンドサービスに転送される前にクライアントリクエストのパスを書き換えます。

    カナリアリリースをオフにします。 ProtocolおよびRewrite Pathパラメーターのデフォルト値を使用します。 この例では、これらのパラメーターを設定する必要はありません。

    カスタム転送ルール

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

    説明

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

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

      • ホスト:

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

      • パス:

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

      • HTTPヘッダー:

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

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

      • 転送先

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

        説明
        • クラスターにFlannelコンポーネントを使用する場合、ClusterIPサービスはサポートされません。

        • [アクション] ドロップダウンリストから [転送] を選択した場合、ルールの [マッピング] パラメーターを設定する必要はありません。

      • リターン固定レスポンス

        ALBインスタンスによって固定コンテンツがクライアントに返されることを指定します。 クライアントに返されるステータスコード、コンテンツ、およびコンテンツの種類を指定できます。 ビジネス要件に基づいて、応答ステータスコード応答コンテンツタイプ (オプション) 、および応答コンテンツ (オプション) パラメーターを設定します。

        応答コンテンツタイプパラメーターの有効な値:

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

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

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

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

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

    カスタム転送ルールでは、複数の条件とアクションを指定できます。 ドメイン名、パス、およびHTTPリクエストヘッダーを転送条件として設定し、受信トラフィックをバックエンドサーバーグループに転送するか、固定コンテンツをクライアントに返すことができます。 詳細については、「ALB Ingressのルーティングルールのカスタマイズ」をご参照ください。

    カスタム転送ルールをオフにします。 この例では、カスタム転送ルールを設定する必要はありません。

    注釈

    カスタム注釈の名前と値を入力できます。 ドロップダウンリストから名前で注釈を選択または検索することもできます。 Ingressアノテーションの詳細については、「アノテーション」をご参照ください。

    [+ 注釈の追加] をクリックして注釈を追加します。 ACKは、追加できるIngressアノテーションの数を制限しません。

    この例では、注釈を設定する必要はありません。

    ラベル

    Ingressの特性を表すラベルを追加できます。

    [+ ラベルの追加] をクリックしてラベルを追加します。 追加できるIngressラベルの数に制限はありません。

    この例では、ラベルを設定する必要はありません。

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

  5. 次の手順を実行して、Ingressが作成されたことを確認します。

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

    2. cafe-ingressの [エンドポイント] 列で、エンドポイントを表示できます。

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マッチングルール。 詳細については、「高度なALB Ingress設定」トピックの「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

(オプション) 手順6: ドメイン名解決の設定

Ingressの作成時にspec.ru les.hostパラメーターをカスタムドメイン名に設定した場合、CNAMEレコードを追加して、ドメイン名をALBインスタンスのドメイン名にマップする必要があります。 その後、カスタムドメイン名を使用してサービスにアクセスできます。

  1. ACKコンソールにログインします。

  2. クラスター名をクリックして、クラスターの詳細ページに移動します。

  3. 左側のウィンドウで、[ネットワーク]> [Ingress] を選択します。

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

  5. CNAMEレコードを作成するには、次の手順を実行します。

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

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

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

      重要

      CNAMEレコードを作成する前に、TXTレコードを使用してドメイン名の所有権を確認する必要があります。

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

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

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

      パラメーター

      説明

      レコードタイプ

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

      ホスト名

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

      DNSリクエストソース

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

      CNAME。 CNAMEは、コピーしたドメイン名です。

      TTL

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

ステップ7: トラフィック転送のテスト

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

説明
  • カスタムドメイン名を設定する場合、テストドメイン名はカスタムドメイン名です。

  • カスタムドメイン名を設定していない場合、テストドメイン名はcafe-ingressのエンドポイントです。

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

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

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

関連ドキュメント