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

Container Compute Service:既存のロードバランサーを使用したアプリケーションの公開

最終更新日:Jul 31, 2026

Alibaba Cloud Server Load Balancer (SLB) によって公開された Service は、クラスター外部からは SLB のドメイン名または <IP:サービスポート> を使用してアクセスでき、クラスター内部からは <サービス名:サービスポート> を使用してアクセスできます。このドキュメントでは、Nginx アプリケーションを例に、既存のロードバランサーを使用する Service を利用して ACK クラスター内のアプリケーションを公開する方法について説明します。

前提条件

SLB コンソールで作成した SLB インスタンスが必要です。このインスタンスは、ACK クラスターと同じリージョンにある必要があります。このトピックでは、インターネット向けのクラシックロードバランサー (CLB) インスタンスを例として使用します。CLB インスタンスがない場合は、「CLB インスタンスの作成と管理」をご参照ください。

注意事項

SLB の再利用に関する制限

  • 再利用する SLB インスタンスは、次の要件を満たす必要があります。

    • SLB コンソールで手動で作成した SLB インスタンスのみ再利用できます。クラウドコントローラーマネージャー (CCM) によって自動的に作成されたインスタンスや、クラスター API サーバーによって使用されているインスタンスは再利用できません。

    • ACK クラスターでイントラネット SLB インスタンスを再利用するには、SLB インスタンスと ACK クラスターが同じ Virtual Private Cloud (VPC) 内にある必要があります。

    • SLB インスタンスのアドレスタイプは、Service のアクセスタイプと一致する必要があります。

      • サービスがパブリック (アノテーション service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet" で指定) を提供する場合、 SLB インスタンスのアドレスタイプはインターネットである必要があります。

      • Service が内部アクセス (アノテーション service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" で指定) を提供する場合、SLB インスタンスの アドレスタイプ は 内部ネットワーク である必要があります。

    • 複数の Service で、同じ SLB インスタンスの同じリスナーポートを使用することはできません。

    • クラスター間で SLB インスタンスを再利用する場合は、各クラスターで名前空間と Service 名の組み合わせが一意であることを確認してください。

  • CCM は、type: LoadBalancer の Service に対してのみ SLB インスタンスを設定します。

    重要

    type: LoadBalancer の Service を別のタイプに変更すると、CCM は SLB インスタンスに追加された設定を削除します。その結果、Service は SLB インスタンス経由でアクセスできなくなります。

  • CCM は宣言型 API を使用し、特定の条件下で Service の設定に基づいて SLB の設定を自動的に調整します。service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true" アノテーションが設定されている場合、SLB コンソールで手動で変更した設定が上書きされる可能性があります。

    重要

    SLB コンソールで、ACS によって管理される SLB インスタンスの構成を手動で変更しないでください。そうしないと、構成が失われ、サービスにアクセスできなくなる可能性があります。

  • 既存の LoadBalancer サービスの SLB インスタンスを変更することはできません。SLB インスタンスを変更したい場合は、新しい Service を作成する必要があります。

SLB のクォータ制限

  • CCM は、Type=LoadBalancer の Service ごとに SLB インスタンスを 1 つ作成します。デフォルトのクォータは、CLB インスタンス 60 個とネットワークロードバランサー (NLB) インスタンス 60 個です。このクォータを増やすには、Quota Centerコンソールにログインしてアプリケーションを送信してください。

  • CCM は、Service の設定に基づいて、ECS インスタンスまたは Elastic Network Interface (ENI) を SLB のバックエンドサーバーグループにアタッチし、targetPort ごとに個別のサーバーグループを作成します。クォータ制限は次のとおりです。

    • バックエンドサーバー数:CLB インスタンスは最大 200 のバックエンドサーバーをサポートし、NLB インスタンスは最大 400 の ECS、ENI、または IP ベースのサーバーをサポートします。クォータの計算式:バックエンドサーバー数 × targetPorts。クォータを増やすには、事前にQuota Centerコンソールにログインしてアプリケーションを送信してください。

    • インスタンスごとのサーバーグループアタッチメント数:1 つの ECS インスタンスまたは ENI は、最大 50 の CLB バックエンドサーバーグループと 200 の NLB バックエンドサーバーグループにアタッチできます。この制限を増やすには、Quota Centerコンソールにログインしてアプリケーションを送信してください。

    • ローリングアップデート中の追加クォータ:古い Pod が削除される前に新しい Pod が作成されるため、想定を超える追加のクォータが消費される可能性があります。事前に十分なクォータを確保してください。

  • CCM は Service のポートに基づいてリスナーを作成します。デフォルトの制限は、CLB または NLB インスタンスごとに 50 リスナーです。リスナーを追加するには、Quota Centerコンソールにログインしてアプリケーションを送信してください。

  • 詳細については、「CLB の制限」および「NLB の制限」をご参照ください。

    Server Load Balancer クォータ管理で SLB のクォータを照会します。

ステップ 1:サンプルアプリケーションのデプロイ

以下の手順では、kubectl を使用してアプリケーションをデプロイする方法を説明します。

  1. Cloud Shell 上の kubectl を使用してクラスターに接続します。

  2. `my-nginx.yaml` という名前のファイルを作成し、次の内容を記述します。

    YAML コンテンツの表示

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-nginx                 # サンプルアプリケーションの名前。
      labels:
        app: nginx
    spec:
      replicas: 3                    # レプリカ数。
      selector:
        matchLabels:
          app: nginx                 # この値は、アプリケーションを公開するために Service マニフェストのセレクターと一致する必要があります。
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80        # このポートは Service で公開する必要があります。
  3. 次のコマンドを実行して、my-nginx サンプルアプリケーションをデプロイします。

    kubectl apply -f my-nginx.yaml
  4. 次のコマンドを実行して、アプリケーションが実行中であることを確認します。

    kubectl get deployment my-nginx

    想定される出力:

    NAME       READY   UP-TO-DATE   AVAILABLE   AGE
    my-nginx   3/3     3            3           50s

ステップ 2:Service を使用したアプリケーションの公開

コンソールまたは kubectl のいずれかを使用して LoadBalancer サービスを作成し、アプリケーションを公開できます。

コンソール

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

  2. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、ネットワーク > サービス を選択します。

  3. サービス ページで、左上隅にある 作成する をクリックします。

  4. サービスの作成 ダイアログボックスで、Service のパラメーターを設定します。

    パラメーター

    説明

    例

    名前

    Service の名前を入力します。

    my-nginx-svc

    サービスタイプ

    Service のタイプを選択します。これにより、Service へのアクセス方法が決まります。

    サービスの作成:

    • サービスタイプ:LoadBalancer

    • SLB タイプ: Classic Load Balancer (CLB)

    • リソースの選択:既存のリソースを使用

    • ポートリスナーを作成する:選択済み

    バックエンド

    ワークロードを関連付けない場合、Endpoints オブジェクトは作成されませんが、手動でバインドできます。詳細については、「セレクターのないサービス」をご参照ください。

    + 参照ワークロードラベル をクリックし、my-nginx を選択します。

    • 名前: app

    • 値:nginx

    ポートマッピング

    サービスポート (Service YAML ファイルの port フィールド) とコンテナポート (Service YAML ファイルの targetPort フィールド) を追加します。コンテナポートは、バックエンド Pod によって公開されるポートと一致する必要があります。

    • サービスポート: 80

    • コンテナーポート: 80

    • プロトコル:TCP

    注釈

    Service にアノテーションを追加して、ロードバランサーのパラメーターを設定します。詳細については、「アノテーションを使用したクラシックロードバランサー (CLB) インスタンスの設定」をご参照ください。

    この例では、Service のトラフィックを制御するために、課金方法を帯域幅課金に、帯域幅を 2 Mbit/s に設定します。

    課金方法の設定:

    • 名前:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type

    • 値:paybybandwidth

    帯域幅の設定:

    • 名前:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth

    • 値:2

    タグ

    Service を識別するためのラベルを追加します。

    なし

  5. 作成する をクリックします。サービス ページで、新しく作成された Service を確認できます。

  6. 外部 IP アドレス (External IP) 列の IP アドレス (例:39.106.XX.XX:80) を使用して、サンプルアプリケーションにアクセスします。

    アプリケーションにアクセスすると、Welcome to nginx! ページが表示されます。これは、Nginx サービスがデプロイされ、正常に実行されていることを示します。

kubectl

  1. `my-nginx-svc.yaml` という名前のファイルを作成し、次の内容を記述します。

    • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id アノテーションの値を更新します。${YOUR_LB_ID} を、SLB コンソールで作成した SLB インスタンスの ID に置き換えます。

    • デフォルトでは、既存の SLB インスタンスを再利用しても、そのリスナーは作成または上書きされません。必要に応じて、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners アノテーションを true に設定します。この例では、SLB インスタンスは新しく作成され、リスナーが必要なため、値を true に設定します。詳細については、「アノテーションを使用したクラシックロードバランサー (CLB) インスタンスの設定」をご参照ください。

    • selector の値を、my-nginx.yaml ファイルの matchLabels の値である app: nginx に設定して、Service をバックエンドアプリケーションに関連付けます。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID} 
        service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'
      labels:
        app: nginx
      name: my-nginx-svc
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
  2. 次のコマンドを実行して my-nginx-svc Service を作成し、アプリケーションを公開します。

    kubectl apply -f my-nginx-svc.yaml
  3. 次のコマンドを実行して、LoadBalancer サービスが作成されたことを確認します。

    kubectl get svc my-nginx-svc

    想定される出力:

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
    my-nginx-svc   LoadBalancer   172.21.5.82   39.106.XX.XX     80/TCP         5m
  4. `curl <YOUR-External-IP>` コマンドを実行してアプリケーションにアクセスします。<YOUR-External-IP> プレースホルダーを、前の手順で取得した EXTERNAL-IP に置き換えます。

    curl 39.106.XX.XX

    想定される出力:

    <!DOCTYPE html>
    <html>
    <head>
    <title>nginx へようこそ!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>nginx へようこそ!</h1>
    <p>このページが表示されている場合、nginx Web サーバーは正常にインストールされ、
    動作しています。追加の構成が必要です。</p>
    <p>オンラインドキュメントおよびサポートについては、
    <a href="http://nginx.org/">nginx.org</a> をご参照ください。<br/>
    商用サポートは
    <a href="http://nginx.com/">nginx.com</a> でご利用いただけます。</p>
    <p>nginx をご利用いただき、ありがとうございます。</p>
    </body>
    </html>