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

Container Service for Kubernetes:コマンドラインからマルチクラスター サービスを管理して、Kubernetes サービスの他クラスター間アクセスを有効化する

最終更新日:Mar 26, 2026

マルチクラスター サービス (MCS) を使用すると、ある ACK クラスター内の Pod がロードバランサーを作成せずに、別のクラスターで実行中のサービスにアクセスできます。サービス提供者クラスターでは、ServiceExport リソースを使用してサービスをエクスポートし、Fleet インスタンスが自動的にそのエンドポイント情報をサービス利用者クラスターに同期します。その後、サービス利用者クラスターで ServiceImport を作成することで、エクスポートされたサービスを利用可能にします。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

仕組み

Multi-cluster Services architecture
  1. 管理者がサービス提供者クラスター (ACK クラスター 1) およびサービス利用者クラスター (ACK クラスター 2) に名前空間、Deployment、サービスをデプロイし、ServiceExport および ServiceImport を含む MCS リソースを作成します。

  2. Fleet インスタンスが関連付けられた ACK クラスター内の ServiceExport および ServiceImport を監視し、MCS のエンドポイント情報を同期します。

  3. ACK クラスター 2 内の Pod が ACK クラスター 1 内のサービス 1 にアクセスできます。

ステップ 1:サービス提供者クラスターのセットアップ

サービスおよびそのリソースが既に ACK クラスター 1 に存在する場合は、このステップはスキップしてください。

  1. ACK クラスター 1 に名前空間を作成します。

    kubectl create ns provider-ns
  2. 以下の内容で app-meta.yaml というファイルを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: service1
      namespace: provider-ns
    spec:
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: web-demo
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: web-demo
      name: web-demo
      namespace: provider-ns
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: web-demo
      template:
        metadata:
          labels:
            app: web-demo
        spec:
          containers:
          - image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/web-demo:0.4.0
            name: web-demo
            env:
            - name: ENV_NAME
              value: cluster1-beijing
  3. マニフェストを ACK クラスター 1 に適用します。

    kubectl apply -f app-meta.yaml
  4. 以下の内容で service-export.yaml というファイルを作成します。

    apiVersion: multicluster.x-k8s.io/v1alpha1
    kind: ServiceExport
    metadata:
      name: service1         # エクスポート対象のサービス名と一致させる必要があります。
      namespace: provider-ns # エクスポート対象のサービスの名前空間と一致させる必要があります。
  5. ACK クラスター 1 で ServiceExport を適用します。

    kubectl apply -f service-export.yaml

ステップ 2:サービス利用者クラスターのセットアップ

  1. ACK クラスター 2 にも同じ名前空間を作成します。

    kubectl create ns provider-ns
  2. 以下の内容で service-import.yaml というファイルを作成します。

    apiVersion: multicluster.x-k8s.io/v1alpha1
    kind: ServiceImport
    metadata:
      name: service1         # エクスポート済みのサービス名と一致させる必要があります。
      namespace: provider-ns # エクスポート済みのサービスの名前空間と一致させる必要があります。
    spec:
      ports:
      - name: http
        port: 80
        protocol: TCP
      type: ClusterSetIP

    spec パラメーターの説明は、以下の表をご参照ください。

    パラメーター説明
    metadata.nameサービス名。エクスポート済みのサービス名と一致させる必要があります。
    metadata.namespace名前空間。エクスポート済みのサービスの名前空間と一致させる必要があります。
    spec.ports.nameポート名。エクスポート済みのサービスと一致させる必要があります。
    spec.ports.protocolプロトコル。エクスポート済みのサービスと一致させる必要があります。
    spec.ports.appProtocolアプリケーション プロトコル。エクスポート済みのサービスと一致させる必要があります。
    spec.ports.portポート番号。エクスポート済みのサービスと一致させる必要があります。
    spec.ips仮想 IP アドレス。Fleet インスタンスによって設定されます — このフィールドは空欄のままにしてください。
    spec.type有効な値:ClusterSetIP および HeadlessClusterIP: None を指定したソース サービスの場合は Headless を使用します。それ以外の場合は ClusterSetIP を使用します。
    spec.sessionAffinityセッション アフィニティ。有効な値:ClientIP および None。エクスポート済みのサービスと一致させる必要があります。
    spec.sessionAffinityConfigセッション アフィニティ構成。エクスポート済みのサービスと一致させる必要があります。
  3. ACK クラスター 2 で ServiceImport を適用します。

    kubectl apply -f service-import.yaml

ステップ 3:他クラスター間でのサービスへのアクセス

ServiceImport が作成されると、Fleet インスタンスが自動的に ACK クラスター 2 に amcs- プレフィックス付きのマルチクラスター サービスを作成します。サービス 1 には、サービス名またはドメイン名のいずれかを使用してアクセスできます。

方法 1:サービス名を使用

  1. ACK クラスター 2 のサービス一覧を照会し、amcs-service1 サービスが作成されたことを確認します。

    kubectl get service -n provider-ns

    期待される出力:

    NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    amcs-service1   ClusterIP   172.xx.xx.xx   <none>        80/TCP    26m
  2. ACK クラスター 2 内の Pod から、以下のコマンドを実行します。

    curl amcs-service1.provider-ns

方法 2:ドメイン名を使用

  1. ACK クラスター 2 で CoreDNS をインストールまたは更新します。CoreDNS のバージョンは 1.9.3 以降である必要があります。詳細については、「CoreDNS」および「コンポーネントの管理」をご参照ください。

  2. ACK クラスター 2 で CoreDNS の ConfigMap を編集モードで開きます。

    kubectl edit configmap coredns -n kube-system
  3. Corefile フィールドに、マルチクラスター サービスのドメイン名解決を有効化するために multicluster clusterset.local を追加します。

    apiVersion: v1
    data:
      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            multicluster clusterset.local    # この行を追加します。
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods verified
              ttl 30
              fallthrough in-addr.arpa ip6.arpa
            }
            ...
        }
    kind: ConfigMap
    metadata:
      name: coredns
      namespace: kube-system
  4. ACK クラスター 2 内の Pod から、以下のコマンドを実行します。

    curl service1.provider-ns.svc.clusterset.local
  5. (任意)より短い URL を使用するには、クライアント Pod の clusterset.localdnsConfig.searches フィールドに追加します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: client-pod
      namespace: consumer-ns
    spec:
      ...
      template:
        ...
        spec:
          dnsPolicy: "ClusterFirst"
          dnsConfig:
            searches:
              - svc.clusterset.local
              - clusterset.local
              - consumer-ns.svc.cluster.local
              - svc.cluster.local
              - cluster.local
          containers:
          - name: client-pod
            ...

    この構成を適用後、以下の短縮形式を使用できます。

    curl service1.provider-ns

次のステップ

ACK One コンソールでも MCS を設定できます。詳細については、「ACK One コンソールで MCS を使用する」をご参照ください。

参考文献