Kubernetes’te Ingress-NGINX ile TCP Portu Açmak

Kubernetes ortamında genellikle web servisleri (HTTP/HTTPS) için Ingress kullanılır. Ancak bazen, bir veritabanı ya da başka bir TCP servisinin de dış dünyaya açılması gerekir. Ingress-NGINX ile sadece HTTP/HTTPS değil, TCP ve UDP portlarını da expose edebilirsin.
Aşağıda, Ingress-NGINX ile bir TCP servisini dışarıya açmanın adımlarını bulacaksın.
1. Ingress-NGINX’in TCP/UDP Özelliği
Ingress-NGINX, kendi konfigürasyonu sayesinde istenen portları publish edebiliyor. Bunun için ConfigMap
kullanıyorsun.
Örneğin; bir MySQL servisini (port 3306) dış dünyaya açmak istiyorsan:
2. Gerekli YAML Dosyası Oluştur
Önce Ingress-NGINX’in konfigürasyonunda TCP portlarını tanımlayan bir ConfigMap
oluşturman gerekiyor:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
"3306": "default/mysql-service:3306"
"3306"
: Dışarı açmak istediğin port.default/mysql-service:3306
: Hangi namespace’deki, hangi servise yönlenecek.
(Burada “default” namespace’te,mysql-service
adlı servisin 3306 portuna yönlendirme yapılacak.)
3. Ingress-NGINX Deployment’ına ConfigMap’i Tanımla
Ingress-NGINX deployment’ında ConfigMap yolunu belirlemen gerekiyor.
Eğer helm ile kurulum yaptıysan, genelde şöyle olur:
controller:
extraArgs:
tcp-services-configmap: "ingress-nginx/tcp-services"
Veya doğrudan Deployment’ta (arg olarak):
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
4. Port Mapping
Ingress-NGINX’in deployment’ındaki Service tanımında ilgili portu da eklemelisin.
Genelde NGINX Controller’ın Service’i type: LoadBalancer’dır.
Service manifestinde örneğin:
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https
- name: mysql
port: 3306
targetPort: 3306
5. Controller’ı Yeniden Başlat
ConfigMap’i ekledikten ve Service’e portu tanımladıktan sonra Ingress-NGINX Controller’ı restart etmen gerekebilir.
Küme yönetimine göre:
kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx
6. Dışarıdan Erişim
Artık cloud provider’ın (veya MetalLB’nin verdiği LoadBalancer IP) üzerinden, açtığın port ile (örneğin 3306) TCP bağlantısı kurabilirsin.
mysql -h <loadbalancer-ip> -P 3306 -u root -p
Ingress-NGINX ile sadece web trafiği değil, ihtiyacın olan diğer TCP servislerini de expose edebilirsin.
Küçük not: Üretimde bu tür port açma işlemlerinde güvenlik adımlarını unutma!
Daha fazla detay için Ingress-NGINX TCP/UDP User Guide adresine göz atabilirsin.