Kubernetes

Kubernetes Üzerinde Port Yönlendirme: Gelişmiş Yöntemler ve En İyi Uygulamalar

5 Dakika Okuma Süresi.

Kubernetes, modern dağıtık uygulamaları yönetmek ve ölçeklendirmek için kullanılan güçlü bir platformdur. Kubernetes üzerinde çalışan uygulamalar genellikle dış dünyadan erişilebilmesi için belirli portlar üzerinden iletişim kurar. Bu portların doğru bir şekilde yönlendirilmesi, uygulamanın erişilebilirliği ve güvenliği açısından kritik öneme sahiptir. Bu makalede, Kubernetes üzerinde port yönlendirme işlemlerinin nasıl yapıldığını, kubectl port-forward, Kubernetes Servisleri (Services), ve Ingress gibi farklı yöntemlerle bu işlemlerin nasıl gerçekleştirildiğini inceleyeceğiz.

Port Yönlendirme (Port Forwarding) Nedir?

Port yönlendirme, belirli bir port üzerinden gelen trafiğin, Kubernetes kümesi içinde çalışan bir uygulamaya iletilmesini sağlar. Bu işlem, özellikle yerel geliştirme ortamlarında veya dış dünyaya açılmamış bir Kubernetes Pod’una erişim sağlamak için kullanılır. Port yönlendirme, doğrudan bir Pod’a veya Servise yönlendirme yapılabilir.

1. kubectl port-forward Kullanımı

kubectl port-forward, bir yerel makine portunu Kubernetes kümesinde çalışan bir Pod veya Servis’e yönlendirmek için kullanılan basit ama güçlü bir komuttur. Bu yöntem, genellikle geliştirme veya test amaçlıdır ve Kubernetes kümesine erişim gerektirir.

1.1. Bir Pod’a Port Yönlendirme

Bir Pod’a port yönlendirmek için kubectl port-forward komutunu kullanabilirsiniz. Aşağıdaki örnekte, yerel makinenizdeki 8080 portunu, my-pod adlı Pod’daki 80 portuna yönlendiriyoruz:

kubectl port-forward pod/my-pod 8080:80

Bu komut, localhost üzerinde 8080 portundan gelen istekleri Kubernetes kümesindeki my-pod Pod’undaki 80 portuna yönlendirir.

1.2. Bir Servis’e Port Yönlendirme

Benzer şekilde, bir Servis’e port yönlendirme yapmak için:

kubectl port-forward service/my-service 8080:80

Bu komut, my-service adlı Servis’e yönlendirme yapar ve bu Servis’e gelen trafiği ilgili Pod’lara iletir.

2. Kubernetes Servisleri ile Port Yönlendirme

Kubernetes Servisleri, Kubernetes içindeki Pod’lar arasındaki iletişimi ve dış dünya ile olan bağlantıları yöneten soyutlama katmanıdır. Servisler, uygulamalarınızın Kubernetes kümesi içinde ve dışında erişilebilir olmasını sağlar.

2.1. ClusterIP Servisi

ClusterIP, Kubernetes’te varsayılan Servis türüdür. Bu Servis, sadece küme içinden erişilebilen bir sanal IP adresi oluşturur.

apiVersion: v1
kind: Service
metadata:
name: my-clusterip-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080

Yukarıdaki YAML tanımında, my-clusterip-service adlı bir ClusterIP Servisi oluşturulmuştur. Bu Servis, Kubernetes kümesi içinde yalnızca diğer Pod’lar tarafından erişilebilir.

2.2. NodePort Servisi

NodePort, Kubernetes kümesinin dışından bir Pod’a erişim sağlamanın en basit yoludur. Bu Servis, her Node’da belirli bir port açar ve bu porta gelen trafiği ilgili Pod’lara iletir.

apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30007

Yukarıdaki YAML tanımında, my-nodeport-service adlı bir NodePort Servisi oluşturulmuştur. Bu Servis, Node’un 30007 portunu kullanarak gelen trafiği 80 portu üzerinden ilgili Pod’a yönlendirir.

2.3. LoadBalancer Servisi

LoadBalancer, dış dünyadan Kubernetes kümesi içinde çalışan uygulamalara erişim sağlamak için kullanılan bir Servis türüdür. Bu Servis, bulut sağlayıcılarıyla entegre çalışarak bir yük dengeleyici oluşturur.

apiVersion: v1
kind: Service
metadata:
name: my-loadbalancer-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080

Bu tanım, my-loadbalancer-service adlı bir LoadBalancer Servisi oluşturur ve bu Servis, Kubernetes kümesine dış dünyadan gelen trafiği yönetir.

3. Ingress ile Port Yönlendirme

Ingress, Kubernetes’te dış dünyadan gelen HTTP(S) trafiğini yönetmek için kullanılan bir kaynak türüdür. Ingress, genellikle birden fazla Servis’i tek bir giriş noktasından yönetmek için kullanılır.

3.1. Ingress Tanımı

Bir Ingress kaynağı tanımlamak, dış dünyadan belirli yollar (path) veya alan adları (host) üzerinden gelen trafiği Kubernetes içindeki Servis’lere yönlendirmeyi sağlar.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80

Bu örnekte, myapp.example.com alan adına gelen tüm trafiğin my-service adlı Servis’e yönlendirilmesi sağlanır.

3.2. Ingress Kontrolcüsü

Ingress kaynaklarının çalışabilmesi için bir Ingress Kontrolcüsü gereklidir. NGINX, Traefik ve HAProxy gibi popüler Ingress kontrolcülerini kullanarak trafiği yönlendirebilirsiniz.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

Bu komut, NGINX Ingress Kontrolcüsünü Kubernetes kümenize yükler ve yönetir.

4. İleri Düzey Port Yönlendirme

4.1. IP Whitelisting (Beyaz Liste)

Bazı durumlarda, belirli IP adreslerinden gelen trafiği kabul etmek isteyebilirsiniz. Bu durumda, Ingress veya Servis kaynaklarında IP whitelisting kullanarak sadece belirli IP adreslerinden gelen trafiğe izin verebilirsiniz.

4.2. TLS/SSL Termination

Ingress ile SSL/TLS sonlandırma yaparak trafiğinizi şifreleyebilirsiniz. Bu, özellikle güvenli bir şekilde veri aktarımı yapmak istediğiniz durumlarda önemlidir.


Kubernetes üzerinde port yönlendirme, uygulamalarınızın erişilebilirliğini ve güvenliğini yönetmenin kritik bir parçasıdır. Bu makalede, kubectl port-forward, Kubernetes Servisleri ve Ingress gibi çeşitli yöntemlerle port yönlendirme işlemlerinin nasıl gerçekleştirileceğini inceledik. Kubernetes ortamında port yönlendirme işlemlerini doğru bir şekilde yapılandırarak, uygulamalarınızın hem içeriden hem de dışarıdan erişilebilirliğini sağlarken güvenliğini de kontrol altına alabilirsiniz.