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

Container Service for Kubernetes:ドメイン名を使用してクラスター間でサービスにアクセスする

最終更新日:Mar 18, 2025

Distributed Cloud Container Platform for Kubernetes (ACK One) は、マルチクラスターサービス (MCS) 機能を提供し、ドメイン名を使用して Kubernetes クラスター間でサービスにアクセスできるようにします。 これにより、ビジネスコードを変更したり、ビジネスポッドの dnsConfig フィールドや CoreDNS 構成を変更したりすることなく、クラスター間のサービストラフィックルーティングを実現できます。

前提条件

  • フリート管理機能が有効になっていること。 詳細については、「マルチクラスター管理を有効にする」をご参照ください。

  • 2 つのクラスターがフリートインスタンスに関連付けられていること。 1 つのクラスターはサービスプロバイダーとして機能します。 もう 1 つのクラスターはサービスコンシューマーとして機能します。 詳細については、「関連付けられたクラスターを管理する」をご参照ください。

  • 関連付けられたクラスターの Kubernetes バージョンが 1.22 以降であること。

  • サービス プロバイダー クラスター内のポッドとサービス コンシューマー クラスター内のポッドは相互に通信できます。詳細については、「MCS の概要」をご参照ください。

    説明

    クラスター間でポッド CIDR 接続を有効にした後、クラスターのノードプールのセキュリティグループで、相互接続されたクラスターのポッド CIDR ブロックからのトラフィックが許可されていることを確認します。

  • サービスプロバイダークラスター、サービスコンシューマークラスター、およびフリートインスタンスの kubeconfig ファイルを取得し、kubectl を使用してクラスターとインスタンスに接続すること。 詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。

MCS アーキテクチャ

サービスプロバイダークラスター内のサービスにサービスコンシューマークラスター内のクライアントポッドからアクセスできるようにするには、次の手順を実行します。

  1. service1 という名前のサービスと、service1 サービスを使用して公開されるアプリケーションポッドをサービスプロバイダークラスターに作成します。 サービスコンシューマークラスターに service1 という名前のサービスを作成します。

  2. フリートインスタンスで service1 という名前のマルチクラスターサービスを作成します。 マルチクラスターサービスを作成するときは、サービス名を service1 に設定し、名前空間をサービスプロバイダークラスターの service1 サービスの名前空間に設定します。 さらに、マルチクラスターサービスの構成で、サービスプロバイダークラスターとサービスコンシューマークラスターの名前を指定します。

  3. サービスコンシューマークラスターにクライアントポッドを作成します。 これにより、クライアントポッドを使用して、ドメイン名を使用してサービスプロバイダークラスターの service1 サービスのバックエンドポッドにアクセスできます。

説明

このトピックでは、アプリケーションとサービスは kubectl を使用してデプロイされます。 フリートインスタンスの GitOps 機能と アプリケーション配布 機能を使用して、上記の resource を関連付けられたクラスターに配布することもできます。

手順 1: サービスプロバイダークラスターに service1 という名前のサービスを作成する

  1. kubeconfig ファイルを使用してサービスプロバイダークラスターに接続します。 次に、次のコードブロックを使用して、web-demo-svc-provider.yaml という名前のファイルを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: service1
      namespace: provider-ns
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: web-demo
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-demo
      namespace: provider-ns
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web-demo
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: web-demo
        spec:
          containers:
          - env:
            - name: ENV_NAME
              value: cluster-provider
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
            imagePullPolicy: Always
            name: web-demo
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
  2. 次のコマンドを実行して、service1 という名前のサービスと、サービスを使用して公開されるアプリケーションポッドを作成します。

    kubectl apply -f web-demo-svc-provider.yaml

手順 2: サービスコンシューマークラスターに service1 という名前のサービスを作成する

  1. kubeconfig ファイルを使用してサービスコンシューマークラスターに接続します。 次に、次のコードブロックを使用して web-demo-svc-consumer.yaml という名前のファイルを作成します。

    説明

    この手順では、アプリケーションポッドを作成する必要はありません。

    apiVersion: v1
    kind: Service
    metadata:
      name: service1
      namespace: provider-ns
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: web-demo
      sessionAffinity: None
      type: ClusterIP
  2. 次のコマンドを実行して、service1 という名前のサービスを作成します。

    kubectl apply -f web-demo-svc-consumer.yaml

手順 3: フリートインスタンスでマルチクラスターサービスを作成する

  1. kubeconfig ファイルを使用してフリートインスタンスに接続します。 次に、次のコードブロックを使用して、multiclusterservice.yaml という名前のファイルを作成します。

    説明
    • <your consumer cluster id><your provider cluster id> を実際のクラスター ID に置き換えます。

    • マルチクラスターサービスの namenamespace は、サービスプロバイダークラスターの service1 サービスの名前と名前空間と同じである必要があります。

    apiVersion: networking.one.alibabacloud.com/v1alpha1
    kind: MultiClusterService
    metadata:
       name: service1
       namespace: provider-ns
    spec:
      consumerClusters:
        - name: <your consumer cluster id>
      providerClusters:
        - name: <your provider cluster id>
  2. 次のコマンドを実行して、フリートインスタンスで service1 という名前のマルチクラスターサービスを作成します。

    kubectl apply -f multiclusterservice.yaml

手順 4: サービスコンシューマークラスターにクライアントポッドを作成して、サービスプロバイダークラスターの service1 サービスにアクセスする

  1. kubeconfig ファイルを使用してサービスコンシューマークラスターに接続します。 次に、次のコードブロックを使用して client-pod.yaml という名前のファイルを作成します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: curl-client
      namespace: customer-ns
    spec:
      containers:
      - name: curl-client
        image: registry-cn-hangzhou.ack.aliyuncs.com/dev/curl:8.11.1
        command: ["sh", "-c", "sleep 12000"]
  2. 次のコマンドを実行して、サービスコンシューマークラスターにクライアントポッドをデプロイします。

    kubectl apply -f client-pod.yaml
  3. 次のコマンドを実行して、サービスコンシューマークラスターのクライアントポッドにログインし、サービスプロバイダークラスターの service1 サービスにアクセスします。

    kubectl exec -it -n customer-ns curl-client -- sh
    
    curl service1.provider-ns

    予期される出力:

    This is cluster-provider!