Sobes.tech
Middle

Kā mēs varam piekļūt Kubernetes konteineram, kurā darbojas lietojumprogramma, no ārējās tīkla?

sobes.tech AI

Atbilde no AI

Ir vairākas galvenās metodes, kā piekļūt Kubernetes konteineram no ārējā tīkla:

  1. Service tips LoadBalancer:

    • Mākoņu pakalpojumu sniedzēji (AWS, GCP, Azure) izveido ārēju slodzes balansētāju, kas novirza trafiku uz jūsu lietojumprogrammas podiem.
    • Piešķir ārēju IP adresi.
    • Vienkāršākais veids mākoņvidē.
  2. Service tips NodePort:

    • Atver portu katrā mezglā klasterī.
    • Šis ports novirza trafiku uz jūsu lietojumprogrammas pakalpojumu.
    • Piekļuve notiek caur jebkura mezgla IP un NodePort numuru.
    • Mazāk mērogojams un mazāk drošs nekā LoadBalancer.
  3. Service tips ClusterIP kopā ar Ingress:

    • ClusterIP - pakalpojums, kas pieejams tikai klasterī.
    • Ingress - API objekts, kas pārvalda ārējo piekļuvi klastera pakalpojumiem.
    • Ingress kontrolieris (piem., Nginx Ingress Controller, Traefik) klausās ārējo trafiku un maršrutē to uz atbilstošo ClusterIP pakalpojumu.
    • Ļauj centralizēti pārvaldīt maršrutēšanu, SSL termināciju, slodzes balansēšanu.
    • Elastīgs un mērogojams pieejas veids.
  4. Service tips ExternalName:

    • Izveido aizstājvārdu ārējam domēnam. Nesniedz tiešu piekļuvi konteineram caur šo pakalpojumu, bet ļauj izmantot DNS vārdu iekšā klasterī, lai piekļūtu ārējam resursam. Nav piemērots tiešai piekļuvei konteineram no ārpuses.
  5. Tieša piekļuve caur NodePort/HostPort uz Pod:

    • Var norādīt hostPort poda specifikācijā, lai atvērtu portu uz mezgla, kur darbojas pod.
    • Ļoti ieteicams nedarīt ražošanas vidē, jo tas ir grūti pārvaldāms un var radīt konfliktus portiem.
    • Līdzīgi, nodePort var norādīt NodePort tipa pakalpojumā.

Konfigurācijas piemēri:

  • LoadBalancer pakalpojums:

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

    // 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 # ja nav norādīts, Kubernetes to piešķirs
      type: NodePort
    
  • Ingress (ClusterIP pakalpojums):

    // service-clusterip.yaml (jau pastāv)
    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
    

Izvēlētais metode ir atkarīgs no mērogošanas prasībām, drošības, izvietošanas vidē (mākonī vai vietējā) un nepieciešamības pēc centralizētas piekļuves pārvaldības. Ingress ir ieteicams risinājums ražošanas sistēmām.