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

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

最終更新日:Dec 27, 2024

Kubernetes クラスタ内の各ポッドには IP アドレスがあります。ポッドは Kubernetes 内で頻繁に作成および削除されます。その結果、ポッドの IP アドレスは頻繁に変更されます。そのため、ポッドを外部アクセスに直接公開することは現実的ではありません。サービスは永続的な IP アドレスを提供し、サービスのバックエンド ポッドを外部サービスとフロントエンド アプリケーションに公開します。これにより、ポッドにアクセスする際に、バックエンド ポッドとその IP アドレスを手動で指定する必要がなくなります。サービスはフロントエンドをバックエンドから分離し、安定した外部サービスを提供します。このトピックでは、Alibaba Cloud Container Compute Service (ACS) コンソールまたは kubectl を使用してサービスを作成し、サービスを使用してアプリケーションを公開する方法について説明します。

方法 1: ACS コンソールでサービスを作成する

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

  2. クラスタページで、管理するクラスタの名前をクリックします。クラスタ詳細ページの左側のナビゲーションペインで、ネットワーク > サービス を選択します。[サービス] ページの右上隅にある作成をクリックします。

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

    パラメータ

    説明

    名前

    サービスの名前を入力します。

    my-nginx-svc

    サービスの種類

    サービスの種類。このパラメータは、サービスへのアクセス方法を指定します。有効な値:

    • クラスタ IP: ClusterIP タイプのサービス。このタイプのサービスは、クラスタの内部 IP アドレスを使用して公開されます。このオプションを選択すると、サービスはクラスタ内からのみアクセス可能になります。

      説明

      クラスタ IP を選択すると、ヘッドレスサービスチェックボックスが表示されます。このチェックボックスをオンにすると、ヘッドレスサービスを使用して、Kubernetes のサービスディスカバリの実装に縛られることなく、他のサービスディスカバリメカニズムとインターフェースできます。

    • SLB: LoadBalancer タイプのサービス。このタイプのサービスは、インターネット向けサーバーロードバランサー (SLB) インスタンスまたは内部向け SLB インスタンスを使用して、外部アクセスまたは内部アクセスを有効にします。LoadBalancer サービスを使用して、トラフィックを ClusterIP サービスにルーティングすることもできます。

      • SLB インスタンスの作成: 従量課金を選択した場合、仕様の変更をクリックして SLB インスタンスの仕様を変更できます。

      • 既存の SLB インスタンスを使用: 既存の SLB インスタンスを選択できます。

      説明
      • 既存の SLB インスタンスを使用する場合、SLB インスタンスのリスナーはサービスのリスナーを上書きします。

      • サービス用に作成された SLB インスタンスは、他のサービスと共有できません。SLB インスタンスを使用して他のサービスを公開すると、SLB インスタンスが削除される場合があります。コンソールで手動で作成した、または API を呼び出して作成した SLB インスタンスのみ、複数のサービスを公開するために使用できます。

      • 同じ SLB インスタンスを共有する Kubernetes サービスは、異なるフロントエンドリスナーポートを使用する必要があります。そうしないと、ポートの競合が発生します。

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

      • クラスタ間で SLB インスタンスを共有することはできません。

    サービスの作成:

    • サービスの種類: SLB

    • SLB の種類: CLB

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

    CLB インスタンスの作成:

    • アクセス方法: 内部アクセス

    • その他のパラメータにはデフォルト値を使用します。

    バックエンド

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

    • 名前: app

    • : nginx

    ポートマッピング

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

    • サービスポート: 80

    • コンテナポート: 80

    • プロトコル: TCP

    アノテーション

    ClusterIP または LoadBalancer サービスに 1 つ以上のアノテーションを追加します。

    説明

    Alibaba Cloud アノテーションは、サービスの種類SLB を選択した場合にのみ有効になります。たとえば、service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:2 アノテーションを使用してサービスの最大帯域幅を 2 Mbit/s に設定し、サービスを通過するトラフィック量を制限できます。アノテーションの詳細については、アノテーションを使用して CLB インスタンスを構成するを参照してください。

    なし

    ラベル

    サービスに 1 つ以上のラベルを追加します。ラベルはサービスを識別するために使用されます。

    なし

  4. サービスが作成されると、サービスページに my-nginx-svc という名前のサービスが表示されます。

方法 2: kubectl を使用してサービスを作成する

  1. Cloud Shell で kubectl を使用して ACK クラスタを管理する

  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

    ACS はさまざまな SLB アノテーションをサポートしています。上記の YAML テンプレートでは、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type アノテーションが intranet に設定されています。これは、サービスが内部向けであることを示します。詳細については、アノテーションを使用して CLB インスタンスを構成するを参照してください。

    spec.selector

    サービスのラベルセレクタを定義します。サービスは、ラベルセレクタに一致するラベルを持つポッドを公開します。

    spec.ports.port

    クラスタ IP アドレスに公開されるサービスポートを指定します。 clusterIP:port にリクエストを送信することで、クラスタ内からサービスにアクセスできます。

    spec.ports.targetPort

    トラフィックを受信するバックエンドポッドのポートを指定します。サービス port を流れるトラフィックは、kube-proxy によってバックエンドポッドのポート (targetPort で指定) に転送され、コンテナに送信されます。

    spec.type

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

    • LoadBalancer: サービスは SLB インスタンスを使用して公開されます。既存の SLB インスタンスをサービスに関連付けない場合、システムは自動的に SLB インスタンスを作成します。デフォルトでは、自動的に作成された SLB インスタンスはインターネット向けです。内部アクセス用のサービスと、このサービス用の内部向け SLB インスタンスを作成するには、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-typeintranet に設定します。

    • ClusterIP: クラスタ内でサービスを公開します。ClusterIP サービスはクラスタ内からアクセスできます。

    重要

    ACS は NodePort サービスをサポートしていません。NodePort サービスは ACS クラスタで作成できず、有効になりません。

  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 ファイルを変更し、変更した YAML ファイルを使用して新しいサービスを作成します。

    kubectl apply -f my-nginx-svc.yaml

サービスの表示

  1. 次のコマンドを実行してサービスを表示します。

    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

サービスの削除

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

    kubectl delete service my-nginx-svc