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

Container Compute Service:自動的に作成されたSLBインスタンスを使用してアプリケーションを公開する

最終更新日:Dec 27, 2024

サーバーロードバランサー (SLB) インスタンスが使用できない場合、cloud-controller-manager (CCM) コンポーネントは、LoadBalancerサービス用にクラシックロードバランサー (CLB) またはネットワークロードバランサー (NLB) インスタンスを自動的に作成および管理します。このトピックでは、自動的に作成された SLB インスタンスを使用してアプリケーションを公開する方法について説明します。このトピックでは、NGINX アプリケーションを使用します。

注意事項

  • CCM は、Type=LoadBalancer 設定を持つサービスに対してのみ SLB リソースを作成および構成します。

  • 重要

    サービスの設定を Type=LoadBalancer から Type!=LoadBalancer に変更すると、CCM はそのサービス用に作成された SLB インスタンスの構成を削除します。その結果、SLB インスタンスを使用してサービスにアクセスできなくなります。

  • CCM は宣言型 API を使用し、特定の条件が満たされた場合、公開されたサービスの構成に合わせて SLB インスタンスの構成を自動的に更新します。SLB コンソールで変更した SLB 構成は、CCM によって上書きされる可能性があります。

    重要

    SLB コンソールで、Kubernetes によって作成および管理されている SLB インスタンスの構成を変更しないでください。変更すると、Kubernetes が変更を上書きし、結果として関連する LoadBalancer サービスにアクセスできなくなる可能性があります。

  • サービスの作成後、LoadBalancer サービスに関連付けられている SLB インスタンスを変更することはできません。SLB インスタンスを変更するには、新しいサービスを作成する必要があります。

クォータ

  • CCM は、Type=LoadBalancer 設定を持つサービスに対して SLB インスタンスを作成します。デフォルトでは、Alibaba Cloud アカウント内に最大 60 個の SLB インスタンスを持つことができます。さらに SLB インスタンスを作成するには、Quota Centerコンソールにログインしてアプリケーションを送信して、クォータの増加を申請してください。

  • CCM は、サービスポートを使用するリスナーを SLB インスタンスに対して自動的に作成します。デフォルトでは、各 SLB インスタンスは最大 50 個のリスナーをサポートします。各 SLB インスタンスでサポートされるリスナーの数を増やすには、Quota Centerコンソールにログインしてアプリケーションを送信して、クォータの増加を申請してください。

  • SLB の制限の詳細については、制限 を参照してください。

    SLB リソースクォータを照会するには、SLB コンソールのクォータセンターページにアクセスしてください。

手順 1: アプリケーションをデプロイする

次のセクションでは、kubectl コマンドラインツールを使用してアプリケーションをデプロイする方法について説明します。

  1. my-nginx.yaml という名前のファイルを作成し、次の YAML コンテンツをファイルに追加します。

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: my-nginx    # サンプルアプリケーションの名前。
      labels:
        app: nginx
    spec:
      replicas: 3       # レプリケートされたポッドの数。
      selector:
        matchLabels:
          app: nginx     # アプリケーションを公開するために使用されるサービスのセレクターに同じ値を指定する必要があります。
      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                                # サービスで公開するポート。
  2. 次のコマンドを実行して、my-nginx アプリケーションをデプロイします。

    kubectl apply -f my-nginx.yaml
  3. 次のコマンドを実行して、アプリケーションのステータスを照会します。

    kubectl get deployment my-nginx

    予想される出力:

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

手順 2: 自動的に作成された SLB インスタンスを使用してアプリケーションを公開する

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

ACS コンソールの使用

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

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

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

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

  5. パラメーター

    説明

    名前

    サービスの名前。

    my-nginx-svc

    サービスタイプ

    サービスのタイプ。このパラメーターは、サービスへのアクセス方法を指定します。サーバーロードバランサーを選択します。次に、パブリックアクセスSLB インスタンスの作成を選択します。変更をクリックして、ビジネス要件に基づいて SLB インスタンスの仕様を変更できます。この例では、デフォルトの仕様が使用されます。

    slb.s1.small

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

    外部トラフィックポリシーパラメーターは、ノードポートまたはサーバーロードバランサーにサービスタイプパラメーターを設定した場合にのみ使用できます。

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

    • クラスター: クラスター内の他のノードのポッドにトラフィックをルーティングします。

    ローカル

    バックエンド

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

    名前: app。

    値: my-nginx。

    ポートマッピング

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

    80

    アノテーション

    SLB インスタンスを構成するためにサービスに追加されるアノテーション。詳細については、サービスの YAML ファイルにアノテーションを追加して CLB インスタンスを構成するを参照してください。

    重要

    クラスター内の API サーバー の SLB インスタンスを再利用しないでください。再利用すると、クラスターアクセスエラーが発生する可能性があります。

    この例では、帯域幅課金方式を指定し、最大帯域幅を 2 Mbit/s に設定して、サービスを通過するトラフィック量を制限するために、2 つのアノテーションが追加されています。例:

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

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

    ラベル

    サービスに追加されるラベル。サービスを識別します。

    なし

kubectl の使用

  1. my-nginx-svc.yaml という名前のファイルを作成し、次のコンテンツをファイルに追加します。

    selector パラメーターを my-nginx.yaml ファイルの matchLabels パラメーターの値に設定して、サービスをバックエンドアプリケーションに関連付けます。この例では、このパラメーターは app: nginx に設定されています。

    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 という名前のサービスを作成し、サービスを使用してアプリケーションを公開します。

    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> は前の手順で取得した外部 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><em>Thank you for using nginx.</em></p>
    </body>
    </html>