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

Server Load Balancer:セルフマネージド Kubernetes クラスターでの ALB Ingress の使用ガイド

最終更新日:Nov 09, 2025

このトピックでは、Alibaba Cloud にデプロイされたセルフマネージド Kubernetes クラスターで ALB Ingress を使用する方法について説明します。

シナリオ例

このトピックでは、次の図に示すシナリオを使用します。Alibaba Cloud リソース上に構築されたセルフマネージド Kubernetes クラスターがあり、ALB Ingress を使用してリクエストを転送したいと考えています。

セルフマネージド Kubernetes クラスターに `alb-ingress-controller` をデプロイし、Ingress および Service リソースを作成できます。`alb-ingress-controller` は、Kubernetes クラスターのサービス構成に基づいて、Ingress リソースを転送ルールとして ALB に同期します。また、クラスターの API サーバーを監視して Ingress リソースの変更を検出し、その変更を ALB に同期します。ALB はこれらの変更を検出し、クラスター内の対応する Pod にトラフィックを動的に転送します。詳細については、「ALB Ingress の管理」をご参照ください。

ALB Ingress scenario example

注意事項

  • Flannel などのオーバーレイネットワークプラグインを使用する場合、ALB Ingress のバックエンドサービスは NodePort および LoadBalancer タイプのみをサポートします。

  • AlbConfig、Namespace、Ingress、Service などのリソース名は `aliyun` で始めることはできません。

前提条件

  • Alibaba Cloud にデプロイされた v1.20 以降のセルフマネージド Kubernetes クラスターが必要です。kubectl ツールを使用してクラスターに接続できます。kubectl ツールのダウンロードとインストール方法の詳細については、「kubectl のインストールとセットアップ」をご参照ください。

  • ソースネットワークアドレス変換 (SNAT) を使用して、クラスターのパブリックネットワークアクセスが有効になっています。詳細については、「インターネット NAT ゲートウェイの SNAT 機能を使用してインターネットにアクセスする」をご参照ください。

  • セルフマネージドクラスターにコントローラーイメージを使用する場合は、次の点に注意してください。

    • プライベートイメージを使用する場合は、イメージをコンパイルしてアップロードできます。詳細については、オープンソースドキュメント「ソースコードからコントローラーをデプロイする方法」をご参照ください。

    • x86 アーキテクチャを使用するクラスターでは、テスト用にパブリックな Alibaba Cloud イメージを使用できます。

手順

Configuration steps

以下の手順にはファイルの変更が含まれます。各ファイルの名前と目的を必ず理解してください。

ステップ

ファイル名

目的

ステップ 1: alb-ingress-controller のデプロイ

load-balancer-controller.yaml

テンプレートから変更

alb-ingress-controller のデプロイに使用

ステップ 2: AlbConfig および IngressClass リソースの作成

alb.yaml

作成および変更

albconfig および ingressClass リソースを作成し、ALB インスタンスを同期的に作成するために使用

ステップ 3: テストアプリケーションのデプロイ

test-service.yaml

作成および変更

テストサービスのデプロイに使用

ステップ 4: Ingress の作成

test-ingress.yaml

作成および変更

Ingress の作成に使用

ステップ 1: alb-ingress-controller のデプロイ

説明

キャリアネットワークの問題により、システムがデプロイメントイメージをプルできない場合があります。この問題が発生した場合は、プライベートイメージを使用してください。イメージをコンパイルしてアップロードできます。詳細については、オープンソースドキュメント「ソースコードからコントローラーをデプロイする方法」をご参照ください。

alb-ingress-controller は InCluster モードで起動し、load-balancer-controller.yaml ファイルを使用してデプロイされます。Service、Endpoint、Node などのリソースをリッスンする権限が構成されています。関連する ServiceAccount、Deployment、ConfigMap は事前構成されています。要件に基づいて構成を変更してください。

  1. load-balancer-controller.yaml ファイルを変更して、デプロイメントイメージを有効なイメージアドレスに変更します。

    `load-balancer-controller.yaml` ファイルは、alb-ingress-controller をデプロイするために使用されます。

    変更前:

    image: ${path/to/your/image/registry}

    変更後:

    image: alibabacloudslb/alibaba-load-balancer-controller:v1.2.0  # x86 用にコンパイルされたイメージ
  2. `load-balancer-controller.yaml` ファイルを変更して、ConfigMap で AccessKey ID と AccessKey Secret を構成します。

    説明

    ALB インスタンスの作成に使用する Alibaba Cloud アカウントを使用して Resource Access Management (RAM) コンソールにログインし、AccessKey ページで AccessKey ID と AccessKey Secret を表示できます。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: load-balancer-config
      namespace: kube-system
    data:
      cloud-config.conf: |-
           {
               "Global": {
                   "AccessKeyID": "<YOUR_ACCESS_KEY_ID>", # Base64 エンコーディングが必要
                   "AccessKeySecret": "<YOUR_ACCESS_KEY_SECRET>" # Base64 エンコーディングが必要
               }
           }
                            
  3. kubectl を使用してクラスターに接続し、次のコマンドを実行して、変更した `load-balancer-controller.yaml` ファイルをデプロイします。

    kubectl apply -f load-balancer-controller.yaml

    期待される出力:

    clusterrole.rbac.authorization.k8s.io/system:load-balancer-controller created
    serviceaccount/load-balancer-controller created
    clusterrolebinding.rbac.authorization.k8s.io/system:load-controller-manager created
    configmap/load-balancer-config created
    deployment.apps/load-balancer-controller created
  4. 次のコマンドを実行して、alb-ingress-controller のデプロイメントを検証します。

    kubectl -n kube-system get all | grep load-balancer

    次の図に示すように、Pod のステータスが Running であれば、デプロイは成功です。

    Verify the deployment of the alb-ingress-controller

ステップ 2: AlbConfig および IngressClass リソースの作成

AlbConfig および IngressClass リソースが作成されると、ALB インスタンスも作成されます。

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

    `alb.yaml` ファイルは、AlbConfig および IngressClass リソースを作成するために使用されます。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-demo
    spec:
      config:
        name: alb-test             # alb-test は ALB インスタンスの名前です。
        addressType: Internet      # Intranet はプライベートネットワークを指定し、Internet はインターネットを指定します。
        zoneMappings:
        - vSwitchId: vsw-wz9e2usil7e5an1xi****    # ALB には、少なくとも 2 つのゾーンにある vSwitch の ID が必要です。
        - vSwitchId: vsw-wz92lvykqj1siwvif****
      listeners:
        - port: 80
          protocol: HTTP
    ---
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-demo   # 指定された AlbConfig リソース。
    説明

    次の 2 つのパラメーターの構成に注意してください。

    • albconfig.spec.config.addressType: インスタンスのネットワークタイプ。有効な値は次のとおりです。

      • Internet (デフォルト): インスタンスはインターネットに接続されます。各ゾーンでパブリック IP アドレスとプライベート IP アドレスが提供されます。インターネット向けの ALB インスタンスは、Elastic IP Address (EIP) を使用してパブリックネットワークアクセスを提供します。このオプションを選択すると、EIP インスタンスと帯域幅またはデータ転送に対して課金されます。

        • EIP は、パブリック向けのサービスを提供し、インターネット経由での ALB へのアクセスを許可します。

        • プライベート IP アドレスにより、VPC 内の ECS インスタンスが ALB にアクセスできます。

      • Intranet: インスタンスはプライベートネットワークに接続されます。各ゾーンでプライベート IP アドレスが提供されます。ALB インスタンスは、Alibaba Cloud 内部ネットワーク経由でのみアクセスでき、インターネットからはアクセスできません。

    • spec.config.zoneMappings: ALB Ingress の vSwitch ID を指定します。異なるゾーンにある少なくとも 2 つの vSwitch の ID を指定する必要があります。指定された vSwitch は、ALB がサポートするゾーンにある必要があります。ALB がサポートするリージョンとゾーンの詳細については、「サポートされているリージョンとゾーン」をご参照ください。

  2. kubectl を使用してクラスターに接続し、次のコマンドを実行して `alb.yaml` ファイルをデプロイします。

    kubectl apply -f alb.yaml

    期待される出力:

    AlbConfig.alibabacloud.com/alb-demo create
    ingressclass.networking.k8s.io/alb created
  3. ALB インスタンスが作成されたことを確認します。

ステップ 3: テストアプリケーションのデプロイ

このステップでは、テストイメージを使用して Deployment リソースを作成します。このリソースは、テストアプリケーションをデプロイするために使用されます。

  1. `test-service.yaml` ファイルを作成し、次の内容をファイルにコピーします。

    `test-service.yaml` ファイルは、test01 と test02 という名前の 2 つの Deployment と、test01-service と test02-service という名前の 2 つの Service をデプロイするために使用されます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test01
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: test01
      template:
        metadata:
          labels:
            app: test01
        spec:
          containers:
          - name: test01
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: test01-service
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: test01
      type: NodePort
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test02
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: test02
      template:
        metadata:
          labels:
            app: test02
        spec:
          containers:
          - name: test02
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: test02-service
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: test02
      type: NodePort
  2. kubectl を使用してクラスターに接続し、次のコマンドを実行して `test-service.yaml` ファイルをデプロイします。

    kubectl apply -f test-service.yaml

    期待される出力:

    deployment "test01" created
    service "test01-service" created
    deployment "test02" created
    service "test02-service" created
  3. 次のコマンドを実行して、テストサービスがデプロイされていることを確認します。

    kubectl get svc,deploy  

    次のような応答が返された場合、テストサービスはデプロイされています。Deploy a test service

ステップ 4: Ingress の作成

Ingress は、ALB インスタンスの転送ルールに対応します。このトピックでは、パスベースの転送機能を使用する構成について説明します。高度な機能の詳細については、「ALB Ingress ユーザーガイド」をご参照ください。

  1. `test-ingress.yaml` ファイルを作成し、次の内容をファイルにコピーします。

    `test-ingress.yaml` ファイルは、Ingress を作成するために使用されます。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test-ingress
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          - path: /test01
            pathType: Prefix
            backend:
              service:
                name: test01-service
                port:
                  number: 80
          - path: /test02
            pathType: Prefix
            backend:
              service:
                name: test02-service
                port:
                  number: 80
  2. kubectl を使用してクラスターに接続し、次のコマンドを実行して `test-ingress.yaml` ファイルをデプロイします。

    kubectl apply -f test-ingress.yaml

    期待される出力:

    ingress "test-ingress" created
  3. 次のコマンドを実行して、test-ingress リソースの作成を検証します。

    kubectl get ingress

    次のような応答が返された場合、test-ingress リソースは作成されています。image

ステップ 5: 結果の検証

名前解決によるサービスへのアクセス

  1. CNAME レコードを作成して、ドメイン名を ALB インスタンスの DNS 名にマッピングします。詳細については、「ALB インスタンスの CNAME レコードを追加する」をご参照ください。

    この例では、カスタムドメイン名 demo.domain.ingress.topALB インスタンスのパブリックサービスドメイン名にマッピングされていることを前提としています。

  2. 次のコマンドを実行して、ALB インスタンスを使用して test01 サービスにアクセスします。

    curl http://demo.domain.ingress.top/test01

    Verification result 1

  3. 次のコマンドを実行して、ALB インスタンスを使用して test02 サービスにアクセスします。

    curl http://demo.domain.ingress.top/test02

    Verification result 2

ご不明な点がある場合は、DingTalk グループ ALB お客様コミュニケーション群 (ID: 31945843) に参加してサポートを受けてください。

関連ドキュメント

ALB Ingress の概要と特徴: