Sobes.tech
Middle

Kako obezbediti pristup korisnika aplikaciji koja radi u Kubernetes-u?

sobes.tech АИ

Одговор од АИ

Postoji nekoliko osnovnih načina:

  1. Tip Kubernetes usluge: LoadBalancer. Cloud provajder kreira spoljni balansator opterećenja koji usmerava saobraćaj na vaše podove.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Ovde se navodi tip LoadBalancer
    
  2. Tip Kubernetes usluge: NodePort. Svaki čvor klastera otvara statički port koji preusmerava saobraćaj na servis. Pristup aplikaciji je putem IP adrese bilo kog čvora i tog statičkog porta.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: NodePort # Ovde se navodi tip NodePort
    

    Ovaj pristup je manje skalabilan i često se ne preporučuje za produkciono okruženje.

  3. Ingress. Kubernetes objekat koji upravlja spoljnim pristupom servisima u klasteru. Zahteva prisustvo Ingress kontrolora (npr. Nginx Ingress, Traefik, HAProxy). Ingress omogućava konfiguraciju rutiranja na osnovu domena i putanja.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-app-ingress
    spec:
      rules:
        - host: myapp.mydomain.com # Domeno ime
          http:
            paths:
              - path: / # Putanja
                pathType: Prefix
                backend:
                  service:
                    name: my-app-service # Ime servisa
                    port:
                      number: 80 # Port servisa
    
  4. Gateway API (moderniji pristup). Evolucija Ingress-a, pruža izražajniji i proširiviji API za upravljanje pristupom. Uključuje resurse GatewayClass, Gateway, HTTPRoute (i druge tipove ruta).

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: my-app-route
    spec:
      parentRefs:
        - name: my-gateway # Referenca na Gateway resurs
      hostnames:
        - "myapp.mydomain.com"
      rules:
        - matches:
            - path:
                type: Prefix
                value: /
          backendRefs:
            - name: my-app-service # Ime servisa
              port: 80 # Port servisa
    

Izbor metode zavisi od zahteva:

  • Skalabilnosti
  • Složenosti rutiranja
  • Bezbednosti (SSL/TLS terminacija)
  • Korišćene cloud platforme
  • Potrebe za centralizovanim upravljanjem pristupom

Za većinu produkcionih scenarija koriste se LoadBalancer za obezbeđivanje ulazne tačke (često za Ingress kontroler) ili direktno, i Ingress (ili Gateway API) za fleksibilno rutiranje i upravljanje pristupom različitim servisima u klasteru.