All Products
Search
Document Center

Container Service for Kubernetes:Kelola layanan multi-kluster dari command line untuk mengaktifkan akses lintas kluster bagi layanan Kubernetes

Last Updated:Mar 26, 2026

Layanan Multi-Kluster (MCS) memungkinkan Pod di satu kluster ACK mengakses Layanan yang berjalan di kluster lain tanpa perlu membuat load balancer. Anda mengekspor Layanan dari kluster penyedia menggunakan resource ServiceExport, dan instans Fleet secara otomatis menyinkronkan informasi titik akhir ke kluster konsumen. Selanjutnya, Anda membuat ServiceImport di kluster konsumen agar Layanan yang diekspor dapat diakses.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Cara kerja

Multi-cluster Services architecture
  1. Administrator men-deploy namespace, Deployment, dan Service di kluster penyedia (ACK Cluster 1) serta kluster konsumen (ACK Cluster 2), lalu membuat resource MCS termasuk ServiceExport dan ServiceImport.

  2. Instans Fleet mendengarkan ServiceExport dan ServiceImport di kluster ACK yang terasosiasi, kemudian menyinkronkan informasi titik akhir MCS.

  3. Pod di ACK Cluster 2 dapat mengakses Service 1 di ACK Cluster 1.

Langkah 1: Siapkan kluster penyedia

Lewati langkah ini jika Service dan resource-nya sudah ada di ACK Cluster 1.

  1. Buat namespace di ACK Cluster 1:

    kubectl create ns provider-ns
  2. Buat file bernama app-meta.yaml dengan konten berikut:

    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. Terapkan manifes ke ACK Cluster 1:

    kubectl apply -f app-meta.yaml
  4. Buat file bernama service-export.yaml dengan konten berikut:

    apiVersion: multicluster.x-k8s.io/v1alpha1
    kind: ServiceExport
    metadata:
      name: service1         # Harus sesuai dengan nama Service yang akan diekspor.
      namespace: provider-ns # Harus sesuai dengan namespace Service yang akan diekspor.
  5. Terapkan ServiceExport di ACK Cluster 1:

    kubectl apply -f service-export.yaml

Langkah 2: Siapkan kluster konsumen

  1. Buat namespace yang sama di ACK Cluster 2:

    kubectl create ns provider-ns
  2. Buat file bernama service-import.yaml dengan konten berikut:

    apiVersion: multicluster.x-k8s.io/v1alpha1
    kind: ServiceImport
    metadata:
      name: service1         # Harus sesuai dengan nama Service yang diekspor.
      namespace: provider-ns # Harus sesuai dengan namespace Service yang diekspor.
    spec:
      ports:
      - name: http
        port: 80
        protocol: TCP
      type: ClusterSetIP

    Parameter spec dijelaskan dalam tabel berikut:

    ParameterDeskripsi
    metadata.nameNama Service. Harus sesuai dengan nama Service yang diekspor.
    metadata.namespaceNamespace. Harus sesuai dengan namespace Service yang diekspor.
    spec.ports.nameNama port. Harus sesuai dengan Service yang diekspor.
    spec.ports.protocolProtokol. Harus sesuai dengan Service yang diekspor.
    spec.ports.appProtocolProtokol aplikasi. Harus sesuai dengan Service yang diekspor.
    spec.ports.portNomor port. Harus sesuai dengan Service yang diekspor.
    spec.ipsAlamat IP virtual. Diatur oleh instans Fleet—biarkan kosong.
    spec.typeNilai yang valid: ClusterSetIP dan Headless. Gunakan Headless ketika Service sumber memiliki ClusterIP: None. Gunakan ClusterSetIP untuk kasus lainnya.
    spec.sessionAffinityAfinitas sesi. Nilai yang valid: ClientIP dan None. Harus sesuai dengan Service yang diekspor.
    spec.sessionAffinityConfigKonfigurasi afinitas sesi. Harus sesuai dengan Service yang diekspor.
  3. Terapkan ServiceImport di ACK Cluster 2:

    kubectl apply -f service-import.yaml

Langkah 3: Akses Service lintas kluster

Setelah ServiceImport dibuat, instans Fleet secara otomatis membuat Layanan multi-kluster dengan awalan amcs- di ACK Cluster 2. Anda dapat mengakses Service 1 di ACK Cluster 1 menggunakan nama Service atau nama domain.

Metode 1: Gunakan nama Service

  1. Kueri Layanan di ACK Cluster 2 untuk memastikan Service amcs-service1 telah dibuat:

    kubectl get service -n provider-ns

    Output yang diharapkan:

    NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    amcs-service1   ClusterIP   172.xx.xx.xx   <none>        80/TCP    26m
  2. Dari sebuah pod di ACK Cluster 2, jalankan:

    curl amcs-service1.provider-ns

Metode 2: Gunakan nama domain

  1. Instal atau perbarui CoreDNS di ACK Cluster 2. Versi CoreDNS harus 1.9.3 atau lebih baru. Untuk informasi selengkapnya, lihat CoreDNS dan Kelola komponen.

  2. Buka ConfigMap CoreDNS untuk diedit di ACK Cluster 2:

    kubectl edit configmap coredns -n kube-system
  3. Pada bidang Corefile, tambahkan multicluster clusterset.local untuk mengaktifkan resolusi nama domain bagi Layanan multi-kluster:

    apiVersion: v1
    data:
      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            multicluster clusterset.local    # Tambahkan baris ini.
            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. Dari sebuah pod di ACK Cluster 2, jalankan:

    curl service1.provider-ns.svc.clusterset.local
  5. (Opsional) Untuk menggunakan URL yang lebih pendek, tambahkan clusterset.local ke bidang dnsConfig.searches pada pod klien:

    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
            ...

    Setelah menerapkan konfigurasi ini, Anda dapat menggunakan bentuk yang lebih pendek:

    curl service1.provider-ns

Langkah berikutnya

Anda juga dapat mengonfigurasi MCS di Konsol ACK One. Lihat Gunakan MCS di Konsol ACK One.

Referensi