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

Container Compute Service:サービスを使用したアプリケーションの公開

最終更新日:Nov 09, 2025

Kubernetes では、Pod は短命であり、その IP アドレスは静的ではありません。これにより、安定したサービスとして直接公開することが困難になります。Kubernetes サービスは、固定 IP アドレスを持つ安定したエンドポイントを提供します。フロントエンドアプリケーションは、個々の Pod の IP アドレスを追跡することなく、この IP アドレスに接続してバックエンド Pod にアクセスできます。これにより、フロントエンドとバックエンドが分離され、サービスの安定性が確保されます。この Topic では、Container Compute Service (ACS) コンソールおよび kubectl コマandンドを使用してサービスを作成および公開する方法について説明します。

方法 1: コンソールでのサービスの作成

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

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

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

    設定項目

    説明

    サービス名

    サービスの名前を設定します。

    my-nginx-svc

    サービスタイプ

    サービスの種類を選択します。これは、サービスへのアクセス方法を指定します。有効な値は次のとおりです。

    • ClusterIP: クラスター内の内部 IP アドレスでサービスを公開します。この値を選択した場合、サービスはクラスター内からのみアクセスできます。

      説明

      [ClusterIP] を選択すると、[インスタンス間検出用のヘッドレスサービス] を設定できます。ヘッドレスサービスを使用すると、Kubernetes の実装に縛られることなく、他のサービス検出メカニズムと連携できます。

    • Load Balancer: Alibaba Cloud Server Load Balancer (SLB) インスタンスを使用してサービスを公開します。[パブリックネットワークアクセス] または [イントラネット] を選択できます。ClusterIP サービスにトラフィックをルーティングできます。

      • SLB の作成: [仕様別の支払い] を選択した場合、[仕様の変更] をクリックして SLB 仕様を変更できます。

      • 既存のロードバランサーの使用: 既存の SLB インスタンスのリストから SLB 仕様を選択できます。

      説明
      • 既存の SLB インスタンスを使用する場合、その既存のリスナーは強制的に上書きされます。

      • サービスによって作成された SLB インスタンスは再利用できません。これにより、SLB インスタンスが予期せず削除される可能性があります。コンソールで手動で作成した SLB インスタンス、または OpenAPI 操作を呼び出して作成した SLB インスタンスのみを再利用できます。

      • 複数のサービスで SLB インスタンスを再利用する場合は、ポートの競合を避けるために、フロントエンドリスナーのポートが異なることを確認してください。

      • SLB インスタンスを再利用する場合、Kubernetes はリスナーと vServer グループの名前を一意の識別子として使用します。リスナーと vServer グループの名前は変更しないでください。

      • クラスター間で SLB インスタンスを再利用することはできません。

    サービスの作成:

    • サービスタイプ: Load Balancer

    • ロードバランサータイプ: Classic Load Balancer (CLB)

    • リソースの選択: リソースの作成

    CLB リソースの作成:

    • アクセス方法: イントラネット

    • 他の構成にはデフォルト値を使用します。

    サービスの関連付け

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

    • 名前: app

    • : nginx

    ポートマッピング

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

    • サービスポート: 80

    • コンテナーポート: 80

    • プロトコル: TCP

    アノテーション

    サービスにアノテーションを追加します。ClusterIP または LoadBalancer サービスリソースのアノテーションを設定できます。

    説明

    Alibaba Cloud 関連のアノテーションは、[サービスタイプ][Load Balancer] に設定されている場合にのみ有効になります。たとえば、service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:2 を設定すると、サービスのピーク帯域幅は 2 Mbit/s に設定され、サービストラフィックが制御されます。パラメーターの詳細については、「アノテーションを使用した Classic Load Balancer (CLB) インスタンスの設定」をご参照ください。

    なし

    ラベル

    サービスを識別するためのラベルを追加します。

    なし

    パラメーターを設定したら、[OK] をクリックします。

  4. サービスが作成されると、[サービス] ページで my-nginx-svc という名前の新しいサービスを見つけることができます。

方法 2: kubectl を使用したサービスの作成

  1. CloudShell の kubectl を使用して Kubernetes クラスターに接続する

  2. 次の内容を含む my-nginx-svc.yaml という名前のファイルを作成します。

    my-nginx-svc.yaml をクリックして表示

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
      labels:
        app: nginx
      name: my-nginx-svc
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer

    フィールド

    説明

    kind

    リソースオブジェクトをサービスとして定義します。

    metadata

    名前、ラベル、名前空間など、サービスに関する基本情報を定義します。

    metadata.annotations

    Container Compute Service (ACS) は、ロードバランシングのための幅広いアノテーションをサポートしています。たとえば、上記の YAML サンプルでは、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type は、サービスが intranet (イントラネット) であることを指定します。アノテーションの詳細については、「アノテーションを使用した Classic Load Balancer (CLB) インスタンスの設定」をご参照ください。

    spec.selector

    サービスのセレクターを定義します。サービスは、セレクターと Pod ラベルのマッチング関係に基づいて、公開するバックエンド Pod を識別します。

    spec.ports.port

    サービスが ClusterIP で公開するポートを定義します。クラスター内のクライアントは、clusterIP:port でサービスにアクセスできます。

    spec.ports.targetPort

    バックエンド Pod のポートを定義します。port を介して入るトラフィックは、kube-proxy によってバックエンド Pod の targetPort にルーティングされ、コンテナーに入ります。

    spec.type

    サービスへのアクセス方法を定義します。

    • LoadBalancer: Alibaba Cloud Server Load Balancer (SLB) インスタンスを使用してサービスを公開します。既存の SLB インスタンスを指定しない場合、デフォルトでパブリック SLB インスタンスが作成されます。service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type アノテーションを intranet に設定することで、イントラネットサービスと対応するイントラネット SLB インスタンスを作成できます。

    • ClusterIP: クラスター内の内部 IP アドレスでサービスを公開します。これにより、サービスはクラスター内からのみ到達可能になります。

    重要

    Alibaba Cloud Container Compute Service (ACS) は NodePort サービスをサポートしていません。このタイプのサービスを作成しようとすると、操作が失敗するか、サービスが機能しません。

  3. 次のコマンドを実行してサービスを作成します。

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

    kubectl get svc my-nginx-svc

    期待される出力:

    NAME           TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)   AGE
    my-nginx-svc   LoadBalancer   172.16.XX.XX   192.168.XX.XX   80/TCP    13s

関連操作

サービスの更新

  • 方法 1: 次のコマンドを実行してサービスを更新します。

    kubectl edit service my-nginx-svc
  • 方法 2: 古いサービスを手動で削除し、YAML ファイルを変更してから、次のコマンドを実行してサービスを再作成します。

    kubectl apply -f my-nginx-svc.yaml

サービスの表示

サービスを表示できます。

kubectl get service my-nginx-svc

期待される出力:

NAME           TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)   AGE
my-nginx-svc   LoadBalancer   172.16.XX.XX   192.168.XX.XX   80/TCP    13s

サービスの削除

次のコマンドを実行してサービスを削除します。

kubectl delete service my-nginx-svc