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

Server Load Balancer:セルフマネージド Kubernetes クラスターで ALB イングレスを使用

最終更新日:Jul 08, 2026

このトピックでは、Alibaba Cloud 上で実行されるセルフマネージド Kubernetes クラスターで ALB イングレスを使用し、Application Load Balancer (ALB) によってトラフィックを管理する方法について説明します。

シナリオ例

このトピックでは、次の図に示すシナリオを使用します。このシナリオでは、Alibaba Cloud 上で実行されるセルフマネージド Kubernetes クラスターが ALB イングレスを使用してリクエストをルーティングします。

セルフマネージド Kubernetes クラスターに alb-ingress-controller をデプロイし、Ingress および Service リソースを作成できます。alb-ingress-controller は Ingress の設定を転送ルールとして ALB インスタンスに同期します。また、クラスターの API サーバーで Ingress の変更を監視し、更新内容を ALB インスタンスに同期します。ALB インスタンスはその後、クラスター内の対応する Pod にトラフィックを動的にルーティングします。詳細については、「ALB ingress management」をご参照ください。

ALB Ingress场景示例

注意事項

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

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

前提条件

  • Alibaba Cloud 上で実行されるセルフマネージド Kubernetes クラスター (v1.20 以降) を用意していること。kubectl を使用してクラスターに接続できること。kubectl のダウンロードとインストール方法については、「Install and set up kubectl」をご参照ください。

  • セルフマネージドクラスターでインターネットアクセスを有効化するために、SNAT を設定していること。詳細については、「Use the SNAT feature of an Internet NAT gateway to access the Internet」をご参照ください。

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

    • プライベートイメージを使用する場合は、Deploy the controller from source code の手順に従ってコンパイルし、アップロードできます。

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

操作手順

配置步骤

次の手順では複数のファイルを変更します。以下の表に、各ファイルの目的を示します。

ステップ

ファイル名

目的

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

load-balancer-controller.yaml

テンプレートから変更

alb-ingress-controller をデプロイするため

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

alb.yaml

作成して変更

AlbConfig および IngressClass リソースを作成するため (これにより ALB インスタンスが自動的に作成されます)

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

test-service.yaml

作成して変更

テスト Service をデプロイするため

ステップ 4:Ingress の作成

test-ingress.yaml

作成して変更

Ingress を作成するため

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

説明

ISP のネットワーク問題により、Deployment イメージのプルが失敗する場合があります。これを回避するには、プライベートイメージを使用できます。Deploy the controller from source code の手順に従ってコンパイルし、アップロードしてください。

このトピックでは、alb-ingress-controller は InCluster モードで起動します。Service、endpoint、node リソースを watch するための権限を構成した後、load-balancer-controller.yaml ファイルを使用して alb-ingress-controller をデプロイできます。必要な ServiceAccount、Deployment、ConfigMap は事前に構成されています。環境に合わせて変更するだけで使用できます。

  1. load-balancer-controller.yaml ファイルを変更し、Deployment のイメージをアクセス可能なイメージアドレスに変更します。

    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 アカウントで 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 状態であることを示しています。これは、デプロイが成功したことを示します。

    [root@iZ2ze9xxx uoZ test]# kubectl -n kube-system get all | grep load-balancer
    pod/load-balancer-controller-67985dd48d-qtgl8       1/1     Running   0          61d
    deployment.apps/load-balancer-controller   1/1   1            1           62d
    replicaset.apps/load-balancer-controller-67985dd48d   1         1         1       62d

ステップ 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 インスタンスの名前。
        addressType: Internet      # インターネット向けの場合は 'Internet'、プライベートの場合は 'Intranet' を使用します。
        zoneMappings:
        - vSwitchId: vsw-wz9e2usil7e5an1xi****    # 少なくとも 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 リソース。
    説明

    次のパラメーターに注意してください:

    • albconfig.spec.config.addressType:インスタンスのネットワークタイプ。有効な値:

      • Internet (デフォルト):インターネット向けインスタンスを作成します。各ゾーンにパブリック IP とプライベート IP が割り当てられます。インターネット向け ALB インスタンスは、Elastic IP アドレス (EIP) を使用してインターネット経由でサービスを提供します。インスタンス料金と EIP のデータ転送料金が課金されます。

        • EIP は ALB インスタンスへのパブリックなインターネットアクセスを提供します。

        • プライベート IP を使用すると、同一 VPC 内の ECS インスタンスから ALB インスタンスにアクセスできます。

      • Intranet:プライベートインスタンスを作成します。各ゾーンにプライベート IP が割り当てられます。ALB インスタンスは Alibaba Cloud ネットワーク内からのみアクセス可能で、インターネットからは到達できません。

    • spec.config.zoneMappings:ALB イングレスの vSwitch ID を指定します。異なるゾーンから少なくとも 2 つの vSwitch ID を指定する必要があります。指定する vSwitch は、現在の ALB インスタンスでサポートされているゾーンに存在している必要があります。ALB でサポートされているリージョンとゾーンの詳細については、「Supported regions and zones」をご参照ください。

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

    kubectl apply -f alb.yaml

    想定される出力:

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

    • 方法 1:次のコマンドを実行して ALB インスタンス ID を確認します。

      kubectl get albconfig alb-demo     
      [root@i-xxx nuoZ test]# kubectl get albconfig alb-demo
      NAME        ALBID                      DNSNAME                                          PORT&PROTOCOL   CERTID   AGE
      alb-demo    alb-3lzokczr3c9guq7zz7    alb-3xxx.com                                                               84s
    • 方法 2ALB console にログインし、作成された ALB インスタンスを確認します。

      説明

      ステップ 1:alb-ingress-controller のデプロイ の ConfigMap で構成した Alibaba Cloud アカウントでコンソールにログインする必要があります。

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

このセクションでは、テストイメージを使用して Deployment リソースを作成し、テストアプリケーションをデプロイする方法を説明します。

  1. test-service.yaml という名前のファイルを作成し、次の内容をコピーして貼り付けます。

    test-service.yaml ファイルは、test01test02 という名前の 2 つの Deployment と、test01-servicetest02-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.apps/test01 created
    service/test01-service created
    deployment.apps/test02 created
    service/test02-service created
  3. 次のコマンドを実行し、テスト Service が正常にデプロイされたことを確認します。

    kubectl get svc,deploy  

    次の出力は、テスト Service が正常にデプロイされたことを示します。

    [root@iZ2z***uoZ test]# kubectl get svc,deploy
    NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    service/cloud-nodeport      NodePort    10.xxx.122      <none>        80:31310/TCP     63d
    service/kubernetes          ClusterIP   10.xxx.1        <none>        443/TCP          63d
    service/test01-service      NodePort    10.xxx.121      <none>        80:31254/TCP     9s
    service/test02-service      NodePort    10.xxx.118      <none>        80:30337/TCP     9s
    NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/openresty-deployment        2/2     2            2           63d
    deployment.apps/test01                      2/2     2            2           9s
    deployment.apps/test02                      1/1     1            1           9s

ステップ 4:Ingress の作成

Ingress は、ALB インスタンスの転送ルールに対応します。このトピックではパスベースルーティングを使用します。高度な機能の詳細については、「ALB ingress user guide」をご参照ください。

  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.networking.k8s.io/test-ingress created
  3. 次のコマンドを実行し、test-ingress リソースが作成されたことを確認します。

    kubectl get ingress

    次の出力は、test-ingress リソースが正常に作成されたことを示します。

    [root@iZ2zxxx test]# kubectl get ingress
    NAME           CLASS   HOSTS                    ADDRESS                                                        PORTS   AGE
    test-ingress   alb     demo.domain.ingress.top  alb-xxx.cn-beijing.alb.aliyuncs.com   80      19s

ステップ 5:結果の確認

ドメイン名によるアクセス

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

    この例では、カスタムドメイン名 demo.domain.ingress.top を、ALB インスタンスのパブリック DNS 名にマッピングすると仮定します。

  2. 次のコマンドを実行し、ALB インスタンス経由で test01 Service にアクセスします。

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

    NGINX のバックエンド Pod から、Server address (10.xxx.xxx.xxx:80)、Server name (test01-648bf46944-kvlhj)、Date (07/Nov/2022:08:16:35 +0000)、URI (/test01) などの詳細を含むレスポンスが返されます。これは、Ingress がリクエストを test01 Service のバックエンド Pod に正しくルーティングしたことを示します。

  3. 次のコマンドを実行し、ALB インスタンス経由で test02 Service にアクセスします。

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

    コマンドを実行するとNGINXのテストページが返され、Server addressが 10.xxx.20:80、Server nameが test02-76d96f7b8d-6mtnn、URIが /test02 であることが表示されます。これは、Ingress がリクエストを test02 Service のバックエンド Pod に正しくルーティングしたことを示します。

ご不明点がある場合は、ALB Customer Group (DingTalk ID: 31945843) に参加してサポートを受けてください。

関連ドキュメント

ALB イングレスの概要と機能: