Kubernetes Endpoints Nedir?
4 min read

Kubernetes Endpoints Nedir?

Kubernetes Endpoints, bir Service'in yönlendirme yapacağı adresleri tutmak için kullanılan bir Kubernetes nesnesidir.
Kubernetes Endpoints Nedir?
Photo by Ryan Stone / Unsplash

Kubernetes Endpoints, bir Service'in selector içinde belirtilen label'a sahip tüm Pod'lara veya manual yapılandırılan adreslere yönlendirme yapmak için kullanılan bir Kubernetes nesnesidir.

Bir Service'in bir Pod'a yönlendirme yapabilmesi için, ilgili Pod'un bir Endpoint olarak belirtilmesi gerekir. Endpoints nesnesi, Service tarafından hedeflenen Pod'lara yönlendirme yapmak için kullanılan IP adresleri ve port numaralarını içerir.

1. Endpoints Nesnesinin Otomatik Oluşturulması

Bir önceki Service yazımızda, bir Service'in doğrudan Pod'lara bağlantı vermediğini, kendi kontrol ettiği Endpoints nesnesinden ilgili Pod IP ve port listesini alıp kullandığını söylemiştik.

Bir Service oluşturduğunuzda, aynı isimli Endpoints nesnesi de otomatik olarak oluşturulur. Ardından Endpoints nesnesi, Service manifestinde belirttiğiniz selector ile eşleşen tüm Pod'ları bularak listesine ekler.

Örneğin my-service isimli bir Service oluşturursanız, my-service isimli bir Endpoints de oluşturulur. Service detaylarına baktığınızda ise Endpoints nesnesinin oluşturduğu IP adresi ve port listesini görebilirsiniz.

$ kubectl describe service my-service
Name: my-service
Namespace: default
Labels: <none>
Selector: app=my-app
Type: ClusterIP
IP: 10.111.249.153
Port: <unset> 80/TCP
Endpoints: 10.244.2.118:80,10.244.2.122:80,10.244.2.123:80
Session Affinity: None

Endpoints, bir Kubernetes nesnesi olduğu için de kubectl get endpoints ile görüntülenebilir ve kubectl describe endpoints komutu ile detaylarına bakabilirsiniz.

$ kubectl get endpoints
NAME         ENDPOINTS                                         AGE
my-service   10.244.2.118:80,10.244.2.122:80,10.244.2.123:80   50s
$ kubectl describe endpoints my-service
Name:         my-service
Namespace:    default
Labels:       <none>
Annotations:  endpoints.kubernetes.io/last-change-trigger-time: 2023-05-10T13:13:19Z
Subsets:
  Addresses:          10.244.2.118,10.244.2.122,10.244.2.123
  NotReadyAddresses:  <none>
  Ports:
    Name     Port  Protocol
    ----     ----  --------
    <unset>  80    TCP

Events:  <none>
💡
Service oluştururken kullandığımız selector, Service ile birlikte otomatik oluşturulan Endpoint nesnesinin IP adres ve port listesini oluşturulurken kullanılır. Service için bir etkisi yoktur.

2. Endpoints Nesnesinin Manual Oluşturulması

Muhtemelen bunu yukarıdaki başlıkta fark etmiş olabilirsiniz, ancak Service nesnesinin trafiği yönlendireceği hedeflerin Ednpoints nesnesi ile Service'den bağımsızlaşması, bunların manuel olarak yapılandırılmasına ve güncellenmesine olanak tanır.

Pod selector olmadan bir Service oluşturursanız, Kubernetes, Endpoints nesnesini oluşturamaz çünkü bir selector olmadan hangi Pod'ların Service'e dahil edileceğini bilemez. Böyle bir durumda Service için yönlendirme hedeflerinin listesini belirtecek Endpoints nesnesini oluşturmakta size kalır.

Manual yönetilen hedeflere sahip bir Service oluşturmak için hem Service hem de Endpoints nesnelerini ayrı ayrı oluşturmanız gerekir.

2.1. Service Nesnesinin Oluşturulması

Bir önceki Service konusunu anlattığımız yazıda göreceğiniz üzere, Service'leri oluştururken bir selector seçiyorduk. Şimdi ise herhangi bir selector seçmeden Service nesnemizi oluşturacağız.

apiVersion: v1
kind: Service
metadata:
 name: external-service
spec:
 ports:
 - port: 80

Bu örnekte 80 portuna gelen bağlantıları kabul edecek external-service adlı bir Service tanımlıyoruz. Service için herhangi bir Pod selector tanımlamadık.

Service konusunda daha fazla detay almak için aşağıdaki bağlantıda yer alan yazımızı okuyabilirsiniz.

Kubernetes Service Nedir?
Kubernetes Service, bir Pod grubuna sabit bir adresten erişmek için kullanılan bir Kubernetes nesnesidir.

2.2. Endpoints Nesnesinin Oluşturulması

Bir Service nesnesini selector olmadan oluşturduktan sonra Endpoints nesnesini oluşturmak için aşağıdaki YAML manifestini kullanacağınız.

apiVersion: v1
kind: Endpoints
metadata:
  name: external-service
subsets:
  - addresses:
    - ip: 11.11.11.11
    - ip: 22.22.22.22
  ports:
    - port: 80

Endpoints nesnesinin Service ile aynı ada sahip olması ve Service için hedef IP adresleri ve portların listesini içermesi gerekir. Üstelik bu adresler Kubernetes cluster dışındaki hedeflere ait olabilir. Ardından Service, kendisine gelen istekleri bu listede yer alan IP adres ve portlarına yönlendirecektir.

Eğer daha sonra harici adresleri Kubernetes içinde çalışan Pod'lara taşımaya karar verirseniz, Service'e bir selector ekleyebilir, böylece hedef adreslerin otomatik olarak yönetilmesini sağlayabilirsiniz.


Sıradaki yazı ile eğitim serisine devam edebilirsiniz.

Kubernetes Ingress Nedir?
Kubernetes Ingress, bir HTTP(S) yönlendiricidir ve servislere dışarıdan trafik yönlendirmesi sunar.