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

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.

Read more

Kubernetes NodeLocalDNS ConfigMap Güncellemesi Nasıl Yapılır?

Kubernetes NodeLocalDNS ConfigMap Güncellemesi Nasıl Yapılır?

Kubernetes’te DNS işlerini hızlandırmak için NodeLocalDNS sıkça tercih ediliyor. Zamanla, kendi DNS sunucunu veya internal bir hostname eklemen gerekirse, işin anahtarı ConfigMap dosyasını doğru düzenlemekten geçiyor. Aşağıda, gerçek bir örnekle, ConfigMap’i nasıl güncelleyeceğini ve önemli satırları kısa kısa notlarla anlatıyorum. NodeLocalDNS İçin Örnek ConfigMap Mevcut ConfigMap’i düzenlemek