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

Container Compute Service:ロードバランサーを自動的に作成するサービスを使用してアプリケーションを公開する

最終更新日:Nov 09, 2025

cloud-controller-manager (CCM) コンポーネントは、LoadBalancer タイプの Service のロードバランサーを自動的に作成および管理します。ロードバランサーは、Classic Load Balancer (CLB) または Network Load Balancer (NLB) にすることができます。このトピックでは、Nginx アプリケーションを例として、ロードバランサーを自動的に作成する Service を使用してアプリケーションを公開する方法を説明します。

  • CCM は、タイプが Type=LoadBalancer の Service に対してのみロードバランサーを構成します。CCM は、他の Service タイプに対してはロードバランサーを構成しません。

  • 重要

    Service のタイプを Type=LoadBalancer から Type!=LoadBalancer に変更すると、CCM はロードバランサーの構成を削除します。これにより、ロードバランサーを介して Service にアクセスできなくなります。

  • CCM は宣言型 API を使用します。Service の構成に基づいて、ロードバランサーの構成を自動的にリフレッシュします。その結果、Server Load Balancer コンソールで変更した構成は上書きされる可能性があります。

    重要

    Server Load Balancer コンソールで Kubernetes によって管理されているロードバランサーの構成を手動で変更しないでください。変更が上書きされ、Service にアクセスできなくなる可能性があります。

  • 既存の LoadBalancer タイプの Service のロードバランサーを変更することはできません。別のロードバランサーを使用するには、新しい Service を作成する必要があります。

クォータ制限

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

kubectl コマンドラインからアプリケーションをデプロイできます。

  1. サンプルアプリケーション用に、次の YAML コンテンツを含む my-nginx.yaml という名前のファイルを作成します。

    apiVersion: apps/v1 # 1.8.0 より前のバージョンの場合は apps/v1beta1 を使用します
    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     # これを実際のイメージアドレスに置き換えます。フォーマットは <image_name:tags> です。
            ports:
            - containerPort: 80                                # このポートは Service で公開する必要があります。
  2. my-nginx サンプルアプリケーションをデプロイします。

    kubectl apply -f my-nginx.yaml
  3. サンプルアプリケーションが Normal 状態であることを確認します。

    kubectl get deployment my-nginx

    出力例:

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

ステップ 2: ロードバランサーを自動的に作成するサービスを使用してアプリケーションを公開する

コンソールまたは kubectl を使用して LoadBalancer タイプの Service を作成し、アプリケーションを公開できます。

コンソールを使用する

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

  2. [クラスター] ページで、管理するクラスターを見つけてその ID をクリックします。クラスター詳細ページの左側のナビゲーションウィンドウで、[ネットワーク] > [サービス] を選択します。

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

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

  5. パラメーター

    説明

    サービス名

    Service の名前。

    my-nginx-svc

    サービスタイプ

    Service タイプを選択します。Service ネットワークは、さまざまなタイプのクライアントとアクセスソースに対して次のモードをサポートします:

    ClusterIP

    このモードは、主にクラスター内の内部通信用です。サービスインスタンス間のサービスディスカバリーは、サービスタイプが仮想 ClusterIP に設定されている場合にのみサポートされます。ヘッドレスサービス を使用すると、Kubernetes が提供するデフォルトの ClusterIP ベースのサービスディスカバリーとロードバランシングに依存せずに、他のサービスディスカバリーメカニズムと対話できます。

    LoadBalancer

    このモードは、Alibaba Cloud Classic Load Balancer (CLB) および Network Load Balancer (NLB) と統合することにより、クラスター内部のアプリケーションをインターネットに公開します。このモードは、NodePort モードよりも高い可用性とパフォーマンスを提供します。

      外部トラフィックポリシー

      [外部トラフィックポリシー] は、サービスタイプが [ノードポート] または [Server Load Balancer] の場合にのみ設定できます。

      • [ローカル]: 現在のノードの Pod にのみトラフィックをルーティングします。

      • [クラスター]: クラスター内の他のノードの Pod にトラフィックを転送します。

      ローカル

      サービス関連付け

      Service に関連付けるバックエンドアプリケーション。バックエンドアプリケーションを選択しない場合、Endpoint オブジェクトは作成されません。詳細については、「セレクターなしのサービス」をご参照ください。

      名前: app

      値: nginx

      ポートマッピング

      Service ポートとコンテナーポート。Service ポートは YAML ファイルの port フィールドに対応し、コンテナーポートは YAML ファイルの targetPort フィールドに対応します。コンテナーポートは、バックエンド Pod で公開されているポートと同じである必要があります。

      80

      アノテーション

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

      重要

      クラスターの API Server の SLB インスタンスを再利用しないでください。再利用すると、クラスターへのアクセスが異常になる可能性があります。

      この例では、サービスの課金方法は帯域幅課金に設定され、帯域幅のピークはサービス トラフィックを制御するために 2 Mbit/s に設定されています。アノテーションは次のとおりです:

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

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

      ラベル

      Service に追加するラベル。Service を識別します。

      なし

    kubectl を使用する

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

      selector フィールドの値 (この例では app: nginx) が、バックエンドアプリケーションのデプロイメントの matchLabels フィールドの値と一致していることを確認してください。これにより、Service がバックエンドアプリケーションに関連付けられます。

      apiVersion: v1
      kind: Service
      metadata:
        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 Service が作成されたことを確認します。

      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> を前のステップで取得した外部 IP アドレスに置き換えます。

      期待される出力:

      <!DOCTYPE html>
      <html>
      <head>
      <title>Welcome to nginx!</title>
      <style>
          body {
              width: 35em;
              margin: 0 auto;
              font-family: Tahoma, Verdana, Arial, sans-serif;
          }
      </style>
      </head>
      <body>
      <h1>Welcome to nginx!</h1>
      <p>If you see this page, the nginx web server is successfully installed and
      working. Further configuration is required.</p>
      
      <p>For online documentation and support please refer to
      <a href="http://nginx.org/">nginx.org</a>.<br/>
      Commercial support is available at
      <a href="http://nginx.com/">nginx.com</a>.</p>
      
      <p>Thank you for using nginx.