Sobes.tech
Middle

Hogyan férhetünk hozzá a Kubernetes konténerhez, amelyben az alkalmazás fut, a külső hálózatból?

sobes.tech MI

Válasz az MI-től

Néhány alapvető módja van annak, hogy hozzáférjünk a Kubernetes konténerhez a külső hálózatról:

  1. LoadBalancer típusú szolgáltatás:

    • Felhős szolgáltatók (AWS, GCP, Azure) külső terheléselosztót hoznak létre, amely a forgalmat az alkalmazás podjaira irányítja.
    • Külső IP címet rendelnek hozzá.
    • Ez a legegyszerűbb módszer felhő környezetben.
  2. NodePort típusú szolgáltatás:

    • Minden csomóponton nyit egy portot.
    • Ez a port a forgalmat az alkalmazás szolgáltatására irányítja.
    • Hozzáférés bármely csomópont IP címén és NodePort számán keresztül.
    • Kevésbé skálázható és biztonságosabb, mint a LoadBalancer.
  3. ClusterIP típusú szolgáltatás és Ingress együtt:

    • A ClusterIP csak a klaszteren belül érhető el.
    • Az Ingress egy API objektum, amely kezeli a külső hozzáférést a klaszter szolgáltatásaihoz.
    • Az Ingress kezelő (pl. Nginx Ingress Controller, Traefik) figyeli a külső forgalmat és irányítja a megfelelő ClusterIP szolgáltatásra.
    • Lehetővé teszi a központosított irányítást, SSL terminálást, terheléselosztást.
    • Rugalmas és skálázható megközelítés.
  4. ExternalName típusú szolgáltatás:

    • Egy külső domain aliasát hozza létre. Nem biztosít közvetlen hozzáférést a konténerhez ezen a szolgáltatáson keresztül, de lehetővé teszi DNS név használatát a klaszteren belül külső erőforráshoz való hozzáféréshez. Nem alkalmas közvetlen hozzáféréshez a konténerhez kívülről.
  5. Közvetlen hozzáférés NodePort/HostPort segítségével a Pod-hoz:

    • Megadhatja a hostPort-ot a pod specifikációjában, hogy portot nyisson a futó podhoz tartozó csomóponton. Ez nem ajánlott termelési környezetben az alacsony kezelhetőség és a port konfliktusok miatt.
    • Hasonlóképpen, a nodePort-ot megadhatja NodePort típusú szolgáltatásnál.

Konfigurációs példák:

  • LoadBalancer szolgáltatás:

    // 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 szolgáltatás:

    // 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 # opcionális, a Kubernetes automatikusan hozzárendeli, ha nem adja meg
      type: NodePort
    
  • Ingress (ClusterIP szolgáltatás):

    // service-clusterip.yaml (már létezik)
    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
    

A módszer kiválasztása a skálázási, biztonsági, telepítési környezet (felhő vagy on-premise) és a központosított hozzáférés kezelésének igényeitől függ. Az Ingress a legjobb megoldás a termelési rendszerekhez.