Sobes.tech
Middle

Kuidas saame pääseda Kubernetes konteinerile, kus rakendust töötab, välisest võrgust?

sobes.tech AI

Vastus AI-lt

On on olemas mitu peamist viisi, kuidas pääseda Kubernetes konteinerile välise võrgu kaudu:

  1. Service tüüp LoadBalancer:

    • Pilveteenuse pakkujad (AWS, GCP, Azure) loovad välise koormusbalansööri, mis suunab liikluse teie rakenduse podidele.
    • 0n määratud väline IP-aadress.
    • Lihtsaim viis pilvekeskkonnas.
  2. Service tüüp NodePort:

    • Avab pordi iga sõlme peal klastris.
    • See port suunab liikluse teie rakenduse teenusele.
    • Juurdepääs toimub mis tahes sõlme IP ja NodePort numbriga.
    • Vähem skaleeritav ja vähem turvaline kui LoadBalancer.
  3. Service tüüp ClusterIP koos Ingressiga:

    • ClusterIP - teenus, mis on saadaval ainult klastris.
    • Ingress - API objekt, mis haldab välist juurdepääsu klastris olevatele teenustele.
    • Ingress-kontroller (nt Nginx Ingress Controller, Traefik) kuulab välist liiklust ja marsruutib selle sobivale ClusterIP teenusele.
    • Võimaldab tsentraliseeritult hallata marsruutimist, SSL-terminatsiooni, koormusjaotust.
    • Paindlik ja skaleeritav lähenemine.
  4. Service tüüp ExternalName:

    • Loob pseudonüümi välisele domeenile. Ei paku otsest juurdepääsu konteinerile selle teenuse kaudu, kuid võimaldab kasutada DNS-nime klastris, et pöörduda välise ressursi poole. Ei sobi otsejuurdepääsuks konteinerile väljast.
  5. Otsejuurdepääs NodePort/HostPort kaudu Podile:

    • Võite määrata hostPort podi spetsifikatsioonis, et avada port sõlmel, kus pod töötab. Väga soovitatav mitte teha tootmiskeskkonnas, kuna haldamine on keeruline ja võib tekkida konfliktide portidega.
    • Sarnaselt, nodePort võib määrata NodePort tüüpi teenusele.

Konfiguratsiooninäited:

  • LoadBalancer teenus:

    // 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 teenus:

    // 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 # kui pole määratud, määrab Kubernetes
      type: NodePort
    
  • Ingress (ClusterIP teenus):

    // service-clusterip.yaml (olemasolev)
    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
    

Valitud meetod sõltub skaleerimisnõuetest, turvalisusest, juurutuskeskkonnast (pilv või kohapeal) ja vajadusest keskse juurdepääsuhalduse järele. Ingress on soovitatav lahendus tootmissüsteemidele.