CodeBlanks Logo Icon CodeBlanks

Cross-cluster service

Cluster'lar arası service erişimini öğrenirsin.

Cross-cluster service

Bir cluster'daki servisin başka bir cluster'dan adla erişilmesi için çözümler:

  • Multi-Cluster Services API (MCS): ServiceExport ile dışa açılan servis, diğer cluster'larda ad.namespace.svc.clusterset.local adıyla görünür (GKE, Submariner, Cilium ClusterMesh destekler).
  • Service mesh: Istio çok cluster'lı kurulumda servis keşfini ve mTLS'i cluster'lar arasında genişletir.
  • Basit yol: servisi bir iç yük dengeleyiciyle (LoadBalancer + DNS) açmak.
apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceExport
metadata:
  name: odeme
  namespace: magaza
# diğer cluster'dan: http://odeme.magaza.svc.clusterset.local

Ağ önkoşulları

Cluster'lar arası iletişim için pod ya da servis ağlarının çakışmaması ve birbirine yönlendirilebilir olması gerekir. Bu yüzden cluster'lar kurulurken CIDR aralıkları planlanır:

uretim-eu   pod CIDR 10.10.0.0/16   servis CIDR 10.110.0.0/16
uretim-tr   pod CIDR 10.20.0.0/16   servis CIDR 10.120.0.0/16
# çakışma yok: yönlendirme ve MCS mümkün

Çakışan aralıklar sonradan değiştirilemez; cluster yeniden kurulmak zorunda kalınabilir.

Uygulama Servisi dışa aktar

Bir ServiceExport YAML'ı yaz: multicluster.x-k8s.io/v1alpha1; adı odeme, namespace'i magaza. Ardından ayrı bir satırda uretim-tr context'inde magaza'daki ServiceImport'ları listeleyen komutu yaz (kubectl get serviceimports).

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceExport
metadata:
  name: odeme
  namespace: magaza

kubectl get serviceimports -n magaza --context uretim-tr

Beklenen çıktı

serviceexport.multicluster.x-k8s.io/odeme created
NAME    TYPE           IP                AGE
odeme   ClusterSetIP   ["10.120.4.17"]   30s

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 MCS API'de dışa açılan bir servisin diğer cluster'lardaki DNS son eki nedir?

  • svc.cluster.local
  • global.local
  • mesh.local
  • svc.clusterset.local Doğru cevap

Açıklama: cluster.local yerel cluster içindir.

2 Servisi diğer cluster'lara aç.

Soru
apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ____
metadata:
  name: odeme
Cevap
apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceExport
metadata:
  name: odeme

Açıklama: ServiceExport dışa açar; diğer tarafta ServiceImport oluşur.

3 Eşleştir.

Kavram Anlamı
ServiceExport Dışa aç
ServiceImport Diğer cluster'da görünür
clusterset.local Küme seti DNS'i
CIDR planı Çakışmayı önler

Uzman bölümündeki tüm dersler