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

Server Load Balancer:ALB Ingressを使用してACKクラスターでサービスを公開する

最終更新日:Sep 19, 2024

Application Load Balancer (ALB) IngressはNGINX Ingressと互換性があり、ALBインスタンスに基づいて改善されたトラフィックルーティング機能を提供します。 ALB Ingressは、複雑なルーティング、自動証明書検出、およびHTTP、HTTPS、QUICプロトコルをサポートしています。 ALB Ingressは、レイヤー7で超高弾力性と重いトラフィック負荷のバランスをとるためのクラウドネイティブアプリケーションの要件を満たしています。 Container Service for Kubernetes (ACK) クラスターでALB Ingressを設定して、トラフィックを管理できます。 このトピックでは、ALB Ingressを使用してサービスをデプロイし、サービスにアクセスする方法について説明します。

背景情報

ALB Ingressに関連する用語:

  • ALB Ingressコントローラー: Ingressを管理するKubernetesコンポーネントです。 ALB Ingressコントローラーは、クラスター内のエントリポイントとして機能し、外部トラフィックを特定のサービスにルーティングします。 ALB Ingressコントローラーは、APIサーバーからIngressへの変更を取得し、変更が検出されるとAlbConfigsを動的に生成します。 次に、ALB Ingressコントローラーは、ALBインスタンスの作成、リスナーの設定、Ingressルールの作成、およびバックエンドサーバーグループの設定という操作を順番に実行します。

  • AlbConfig CRD: カスタムリソース定義 (CRD) はKubernetes APIを拡張し、カスタムリソースを作成できます。 AlbConfigは、1つのALBインスタンスに対応する。

  • IngressClass: IngressClassは、Ingressコントローラーのクラスまたは識別子を定義するKubernetes Ingressの属性です。 IngressClassesを使用すると、クラスター内で複数のIngressコントローラーを使用し、各Ingressにコントローラーを指定できます。

  • Ingress: Ingressは、外部トラフィックの転送ルールとアクセスルールを定義するKubernetesのリソースオブジェクトです。 Ingressコントローラは、Ingressに基づいてトラフィックを転送します。 アノテーションを使用して、ALB Ingressで転送ルールを設定できます。 設定が完了すると、HTTP/HTTPSリクエストは転送ルールに基づいて対応するサービスに転送できます。

  • Service: Kubernetesでは、Serviceは、同じ論理機能を持つポッドのセットを定義し、固定の仮想IPアドレスとポートを使用してポッドにアクセスできるようにする抽象リソースオブジェクトです。

    サービスは、アプリケーションへのアクセスを提供し、サービスの仮想IPアドレスおよびポートにアクセスすることによって、他のアプリケーションまたはサービスがバックエンドポッドと通信することを可能にする。 これにより、特定のポッドのIPアドレスとポートを取得する必要がなくなります。 サービスは、複製されたポッドのセットで実行されるバックエンドアプリケーションの抽象化です。

次の図は、ALBインスタンスとALB Ingressの関係を示しています。

ALB Ingress

制限事項

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

  • AlbConfigs、名前空間、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設定」をご参照ください。

シナリオ

次の例では、2つの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という名前の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インスタンスのネットワークタイプ。 有効な値:

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

        説明

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

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

      spec.config.zoneMappings

      課金されます

      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インスタンスがインスタンスリストに表示されます。 これは、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インスタンスのネットワークタイプ。 有効な値:

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

      説明

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

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

    spec.config.zoneMappings

    課金されます

    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という名前のAlbConfigとalbという名前のIngressClassを作成します。 この場合は、この手順をスキップしてください。

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が表示されます。

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

ステップ5: Ingressを作成する

ACKコンソール

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

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

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

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

    2. テンプレート: 次のコードをコードエディターに貼り付けます。

      サンプル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
            # Specify 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

      課金されます

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

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

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

  5. Ingressが作成されていることを確認します。

    1. 左側のナビゲーションウィンドウで、[ネットワーク]> [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
          # Specify 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

(オプション) 手順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 設定] ページで、[レコードの追加] をクリックします。

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

      パラメーター

      説明

      レコードタイプ

      ドロップダウンリストから [CNAME] を選択します。

      ホスト名

      ドメイン名のプレフィックス (wwwなど) を入力します。

      DNSリクエストソース

      [デフォルト] を選択します。

      レコード値

      コピーしたALBドメイン名である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

関連ドキュメント