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:
Mengaktifkan manajemen Fleet. Lihat Aktifkan manajemen multi-kluster.
Memiliki dua kluster yang terasosiasi dengan instans Fleet: kluster penyedia layanan (ACK Cluster 1) dan kluster konsumen layanan (ACK Cluster 2). Lihat Asosiasikan kluster dengan instans Fleet.
Menggunakan Kubernetes versi 1.22 atau lebih baru di kedua kluster.
Memiliki file kubeconfig untuk kedua kluster, dengan kubectl dikonfigurasi untuk terhubung ke masing-masing kluster. Lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Cara kerja

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.
Instans Fleet mendengarkan ServiceExport dan ServiceImport di kluster ACK yang terasosiasi, kemudian menyinkronkan informasi titik akhir MCS.
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.
Buat namespace di ACK Cluster 1:
kubectl create ns provider-nsBuat file bernama
app-meta.yamldengan 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-beijingTerapkan manifes ke ACK Cluster 1:
kubectl apply -f app-meta.yamlBuat file bernama
service-export.yamldengan 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.Terapkan ServiceExport di ACK Cluster 1:
kubectl apply -f service-export.yaml
Langkah 2: Siapkan kluster konsumen
Buat namespace yang sama di ACK Cluster 2:
kubectl create ns provider-nsBuat file bernama
service-import.yamldengan 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: ClusterSetIPParameter
specdijelaskan dalam tabel berikut:Parameter Deskripsi 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: ClusterSetIPdanHeadless. GunakanHeadlessketika Service sumber memilikiClusterIP: None. GunakanClusterSetIPuntuk kasus lainnya.spec.sessionAffinityAfinitas sesi. Nilai yang valid: ClientIPdanNone. Harus sesuai dengan Service yang diekspor.spec.sessionAffinityConfigKonfigurasi afinitas sesi. Harus sesuai dengan Service yang diekspor. 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
Kueri Layanan di ACK Cluster 2 untuk memastikan Service
amcs-service1telah dibuat:kubectl get service -n provider-nsOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE amcs-service1 ClusterIP 172.xx.xx.xx <none> 80/TCP 26mDari sebuah pod di ACK Cluster 2, jalankan:
curl amcs-service1.provider-ns
Metode 2: Gunakan nama domain
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.
Buka ConfigMap CoreDNS untuk diedit di ACK Cluster 2:
kubectl edit configmap coredns -n kube-systemPada bidang
Corefile, tambahkanmulticluster clusterset.localuntuk 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-systemDari sebuah pod di ACK Cluster 2, jalankan:
curl service1.provider-ns.svc.clusterset.local(Opsional) Untuk menggunakan URL yang lebih pendek, tambahkan
clusterset.localke bidangdnsConfig.searchespada 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.