Exposing Services in Kubernetes
Kubernetes'te hizmetleri açığa çıkarmak için farklı yöntemler vardır, böylece hem iç hem de dış uç noktalarına erişilebilir. Bu Kubernetes yapılandırması oldukça önemlidir çünkü yönetici, saldırganlara erişmemeleri gereken hizmetlere erişim sağlayabilir.
Otomatik Numaralandırma
Halka hizmet sunmak için K8s'nin sunduğu yolları numaralandırmaya başlamadan önce, ad alanlarını, hizmetleri ve girişleri listeleyebilirseniz, her şeyi aşağıdaki komutla halka açık olarak bulabilirsiniz:
ClusterIP
Bir ClusterIP servisi, Kubernetes'in varsayılan servisidir. Bu, kümeniz içindeki diğer uygulamaların erişebileceği bir servis sağlar. Harici erişim yoktur.
Ancak, bu Kubernetes Proxy kullanılarak erişilebilir:
Şimdi, hizmetlere erişmek için Kubernetes API'si üzerinden gezinebilirsiniz. Bu şema kullanılarak erişim sağlanabilir:
http://localhost:8080/api/v1/proxy/namespaces/<NAMESPACE>/services/<SERVICE-NAME>:<PORT-NAME>/
Örneğin, aşağıdaki URL'yi kullanabilirsiniz:
http://localhost:8080/api/v1/proxy/namespaces/default/services/my-internal-service:http/
bu hizmete erişmek için:
Bu yöntem için kubectl
'yi kimlik doğrulaması yapılmış bir kullanıcı olarak çalıştırmanız gerekmektedir.
NodePort
NodePort kullanıldığında, belirli bir bağlantı noktası tüm Düğümlerde (Sanal Makineleri temsil eden) kullanılabilir hale getirilir. Bu belirli bağlantı noktasına yönlendirilen trafik, ardından hizmete sistemli bir şekilde yönlendirilir. Genellikle bu yöntem, dezavantajları nedeniyle önerilmez.
Bir NodePort örneği:
Eğer yaml dosyasında nodePort belirtmezseniz (bu açılacak olan porttur) 30000-32767 aralığında bir port kullanılır.
LoadBalancer
Servisi bir bulut sağlayıcısının yük dengeleyicisi kullanarak dışarıya açar. GKE'de, bu bir Ağ Yük Dengeleyici oluşturacak ve tüm trafiği servisinize iletecek tek bir IP adresi sağlayacaktır.
Her bir açık servis için bir Yük Dengeleyiciye ödeme yapmanız gerekmektedir, bu da maliyetli olabilir.
ExternalName
Dokümantasyondan: ExternalName tipindeki servisler, bir Servisi my-service
veya cassandra
gibi tipik bir seçiciye değil, bir DNS adına eşler. Bu Servisleri spec.externalName
parametresiyle belirtirsiniz.
Örneğin, aşağıdaki Servis tanımı, prod
ad alanındaki my-service
Servisini my.database.example.com
adresine eşler:
my-service.prod.svc.cluster.local
ana bilgisayar adını sorguladığımızda, küme DNS Hizmeti my.database.example.com
değeriyle bir CNAME
kaydı döndürür. my-service
'e erişmek, diğer Hizmetlerle aynı şekilde çalışırken, yönlendirme DNS seviyesinde gerçekleşir ve proxy veya yönlendirme ile değil.
Harici IP'ler
Küme dışına giren trafiğin harici IP (hedef IP) ile, Hizmet bağlantı noktasına yönlendirilir ve bir Hizmet uç noktasına yönlendirilir. externalIPs
Kubernetes tarafından yönetilmez ve küme yöneticisinin sorumluluğundadır.
Hizmet özelliklerinde, externalIPs
ServiceTypes
ile birlikte belirtilebilir. Aşağıdaki örnekte, "my-service
" istemciler tarafından "80.11.12.10:80
" (externalIP:port
) üzerinden erişilebilir.
Ingress
Tüm yukarıdaki örneklerin aksine, Ingress bir hizmet türü DEĞİLDİR. Bunun yerine, birden fazla hizmetin önünde oturur ve kümenize bir "akıllı yönlendirici" veya giriş noktası olarak hareket eder.
Bir Ingress ile birçok farklı şey yapabilirsiniz ve farklı yeteneklere sahip birçok Ingress denetleyicisi vardır.
Varsayılan GKE Ingress denetleyicisi sizin için bir HTTP(S) Yük Dengeleyici oluşturur. Bu, hem yol tabanlı hem de alt alan tabanlı yönlendirme yapmanıza olanak sağlar. Örneğin, foo.yourdomain.com üzerindeki her şeyi foo hizmetine gönderebilir ve yourdomain.com/bar/ yolunun altındaki her şeyi bar hizmetine yönlendirebilirsiniz.
GKE'deki bir Ingress nesnesi için YAML, L7 HTTP Yük Dengeleyici ile şuna benzer olabilir:
Referanslar
Last updated