Sobes.tech
Middle

Jak zapewnić dostęp użytkowników do aplikacji działającej w Kubernetes?

sobes.tech AI

Odpowiedź od AI

Istnieje kilka głównych metod:

  1. Typ usługi Kubernetes: LoadBalancer. Dostawca chmury tworzy zewnętrzny balansujący obciążenie, który kieruje ruch do podów Twojej aplikacji.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Tutaj określa się typ LoadBalancer
    
  2. Typ usługi Kubernetes: NodePort. Każdy węzeł klastra otwiera statyczny port, który przekierowuje ruch do usługi. Dostęp do aplikacji odbywa się przez adres IP dowolnego węzła klastra i ten statyczny port.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: NodePort # Tutaj określa się typ NodePort
    

    Metoda ta jest mniej skalowalna i często niezalecana do produkcji.

  3. Ingress. Obiekt Kubernetes zarządzający dostępem zewnętrznym do usług w klastrze. Wymaga kontrolera Ingress (np. Nginx Ingress, Traefik, HAProxy). Ingress pozwala na konfigurację routingu na podstawie nazw domen i ścieżek.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-app-ingress
    spec:
      rules:
        - host: myapp.mydomain.com # Nazwa domeny
          http:
            paths:
              - path: / # Ścieżka
                pathType: Prefix
                backend:
                  service:
                    name: my-app-service # Nazwa usługi
                    port:
                      number: 80 # Port usługi
    
  4. Gateway API (bardziej nowoczesne podejście). Ewolucja Ingress, zapewnia bardziej wyraziste i rozszerzalne API do zarządzania dostępem. Zawiera zasoby GatewayClass, Gateway, HTTPRoute (i inne typy tras).

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: my-app-route
    spec:
      parentRefs:
        - name: my-gateway # Odwołanie do zasobu Gateway
      hostnames:
        - "myapp.mydomain.com"
      rules:
        - matches:
            - path:
                type: Prefix
                value: /
          backendRefs:
            - name: my-app-service # Nazwa usługi
              port: 80 # Port usługi
    

Wybór metody zależy od wymagań:

  • Skalowalności
  • Złożoności routingu
  • Bezpieczeństwa (SSL/TLS terminacja)
  • Używanej platformy chmurowej
  • Potrzeby centralnego zarządzania dostępem

Dla większości scenariuszy produkcyjnych używa się LoadBalancer do zapewnienia punktu wejścia (często dla kontrolera Ingress) lub bezpośrednio, oraz Ingress (lub Gateway API) do elastycznego routingu i zarządzania dostępem do różnych usług w klastrze.