Distributed Cloud Container Platform for Kubernetes (ACK One) menyediakan fitur Layanan multi-kluster (MCS) yang memungkinkan Anda mengakses layanan lintas kluster Kubernetes menggunakan nama domain. Fitur ini memungkinkan pengalihan lalu lintas layanan lintas kluster tanpa perlu memodifikasi kode bisnis atau mengubah bidang dnsConfig atau konfigurasi CoreDNS untuk pod bisnis.
Prasyarat
Fitur Manajemen Armada telah diaktifkan.
Dua kluster terhubung dengan instance Armada. Salah satu kluster berperan sebagai penyedia layanan, sedangkan kluster lainnya berperan sebagai konsumen layanan. Untuk informasi lebih lanjut, lihat Kelola Kluster Terkait.
Versi Kubernetes dari kluster terkait harus 1.22 atau lebih baru.
Pod di kluster penyedia layanan dan pod di kluster konsumen layanan dapat berkomunikasi satu sama lain. Untuk informasi lebih lanjut, lihat Ikhtisar MCS.
CatatanSetelah mengaktifkan konektivitas CIDR pod antar kluster, pastikan grup keamanan untuk pool node kluster telah mengizinkan lalu lintas dari blok CIDR pod kluster yang saling terhubung.
File kubeconfig dari kluster penyedia layanan, kluster konsumen layanan, dan instance Armada diperoleh, serta kubectl digunakan untuk terhubung ke kluster dan instance tersebut. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
Arsitektur MCS
Untuk mengizinkan layanan di kluster penyedia layanan diakses oleh pod klien di kluster konsumen layanan, ikuti langkah-langkah berikut:
Buat layanan bernama
service1dan pod aplikasi yang diekspos menggunakan layanan service1 di kluster penyedia layanan. Buat juga layanan bernamaservice1di kluster konsumen layanan.Buat layanan multi-kluster bernama service1 pada instance Armada. Saat membuat layanan multi-kluster, atur nama layanan menjadi service1 dan namespace menjadi namespace dari layanan service1 di kluster penyedia layanan. Selain itu, tentukan nama kluster penyedia layanan dan kluster konsumen layanan dalam konfigurasi layanan multi-kluster.
Buat pod klien di kluster konsumen layanan. Dengan cara ini, Anda dapat menggunakan pod klien untuk mengakses pod backend dari layanan service1 di kluster penyedia layanan menggunakan nama domain.
Dalam topik ini, aplikasi dan layanan diterapkan menggunakan kubectl. Anda juga dapat menggunakan fitur GitOps dan distribusi aplikasi dari instance Armada untuk mendistribusikan sumber daya di atas ke kluster terkait.
Langkah 1: Buat Layanan bernama service1 di kluster penyedia Layanan
Hubungkan ke kluster penyedia layanan menggunakan file kubeconfig-nya. Kemudian, gunakan blok kode berikut untuk membuat file bernama
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-schedulerJalankan perintah berikut untuk membuat layanan bernama
service1dan pod aplikasi yang diekspos menggunakan layanan:kubectl apply -f web-demo-svc-provider.yaml
Langkah 2: Buat Layanan bernama service1 di kluster konsumen Layanan
Hubungkan ke kluster konsumen layanan menggunakan file kubeconfig-nya. Kemudian, gunakan blok kode berikut untuk membuat file bernama
web-demo-svc-consumer.yaml:CatatanPada langkah ini, Anda tidak perlu membuat pod aplikasi.
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: ClusterIPJalankan perintah berikut untuk membuat layanan bernama
service1:kubectl apply -f web-demo-svc-consumer.yaml
Langkah 3: Buat Layanan multi-kluster pada instance Armada
Hubungkan ke instance Armada menggunakan file kubeconfig-nya. Kemudian, gunakan blok kode berikut untuk membuat file bernama
multiclusterservice.yaml:CatatanGanti
<your consumer cluster id>dan<your provider cluster id>dengan ID kluster sebenarnya.namedannamespacedari layanan multi-kluster harus sama dengan nama dan namespace dari layananservice1di kluster penyedia layanan.
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>Jalankan perintah berikut untuk membuat layanan multi-kluster bernama
service1pada instance Armada:kubectl apply -f multiclusterservice.yaml
Langkah 4: Buat pod klien di kluster konsumen Layanan untuk mengakses Layanan service1 di kluster penyedia Layanan
Hubungkan ke kluster konsumen layanan menggunakan file kubeconfig-nya. Kemudian, gunakan blok kode berikut untuk membuat file bernama
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"]Jalankan perintah berikut untuk menerapkan pod klien di kluster konsumen layanan:
kubectl apply -f client-pod.yamlJalankan perintah berikut untuk masuk ke pod klien di kluster konsumen layanan dan mengakses layanan
service1di kluster penyedia layanan:kubectl exec -it -ncustomer-ns curl-client -- sh curl service1.provider-nsKeluaran yang diharapkan:
This is cluster-provider!