Sobes.tech
Middle

Uygulamanın çalıştığı Kubernetes konteynerine dış ağdan nasıl erişebiliriz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir dış ağdan Kubernetes konteynerine erişmek için birkaç temel yöntem vardır:

  1. LoadBalancer türü Hizmet:

    • Bulut sağlayıcıları (AWS, GCP, Azure) dış yük dengeleyici oluşturur ve trafiği uygulamanızın pod'larına yönlendirir.
    • Dış IP adresi atanır.
    • Bulut ortamında en basit yöntem.
  2. NodePort türü Hizmet:

    • Küme içindeki her düğümde bir port açar.
    • Bu port, trafiği uygulama hizmetinize yönlendirir.
    • Herhangi bir düğümün IP'si ve NodePort numarasıyla erişilir.
    • LoadBalancer'dan daha az ölçeklenebilir ve güvenlidir.
  3. ClusterIP türü Hizmet ve Ingress ile birlikte:

    • ClusterIP - sadece küme içinde erişilebilir hizmet.
    • Ingress - kümedeki hizmetlere dış erişimi yöneten API nesnesi.
    • Ingress denetleyicisi (örneğin, Nginx Ingress Controller, Traefik) dış trafiği dinler ve uygun ClusterIP hizmetine yönlendirir.
    • Yönlendirme, SSL sonlandırma, yük dengeleme gibi merkezi yönetim sağlar.
    • Esnek ve ölçeklenebilir bir yaklaşım.
  4. ExternalName türü Hizmet:

    • Dış alan adı için takma ad oluşturur. Bu hizmet aracılığıyla doğrudan konteynıra erişim sağlamaz, ancak küme içinden dış kaynağa DNS adı kullanarak erişim sağlar. Dışardan doğrudan erişim için uygun değildir.
  5. Pod üzerinde doğrudan NodePort/HostPort erişimi:

    • Pod tanımında hostPort belirtebilir ve pod'un çalıştığı düğümde port açabilirsiniz. Üretim ortamları için önerilmez, düşük yönetilebilirlik ve potansiyel port çatışmaları nedeniyle.
    • Benzer şekilde, nodePort de NodePort türü hizmette belirtilebilir.

Yapılandırma örnekleri:

  • LoadBalancer Hizmeti:

    // service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer
    
  • NodePort Hizmeti:

    // service-nodeport.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service-np
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
          nodePort: 30000 # isteğe bağlı, Kubernetes atayacaktır
      type: NodePort
    
  • Ingress (ClusterIP hizmeti için):

    // service-clusterip.yaml (zaten mevcut)
    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service-ci
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: ClusterIP
    
    // ingress.yaml
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-app-ingress
    spec:
      rules:
        - host: myapp.example.com
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: my-app-service-ci
                    port:
                      number: 80
    

Seçim, ölçeklenebilirlik, güvenlik, dağıtım ortamı (bulut veya yerinde) ve merkezi erişim yönetimi gereksinimlerine bağlıdır. Ingress, üretim sistemleri için tercih edilen çözümdür.