Middle
Kaip galime pasiekti Kubernetes konteinerį, kuriame veikia programa, iš išorinės tinklo?
sobes.tech AI
Atsakymas iš AI
Yra keletas pagrindinių būdų, kaip pasiekti Kubernetes konteinerį iš išorinio tinklo:
-
Service tipas LoadBalancer:
- Debesų teikėjai (AWS, GCP, Azure) sukuria išorinį apkrovos balansierių, kuris nukreipia srautą į jūsų programėlės podus.
- Priskiriamas išorinis IP adresas.
- Paprasčiausias būdas debesų aplinkoje.
-
Service tipas NodePort:
- Atveria prievadą kiekviename mazge klasteryje.
- Šis prievadas nukreipia srautą į jūsų programėlės paslaugą.
- Prieiga vyksta per bet kurio mazgo IP ir NodePort numerį.
- Mažiau mastelinis ir mažiau saugus nei LoadBalancer.
-
Service tipas ClusterIP kartu su Ingress:
- ClusterIP - paslauga, prieinama tik klasteryje.
- Ingress - API objektas, valdantis išorinę prieigą prie paslaugų klasteryje.
- Ingress kontroleris (pvz., Nginx Ingress Controller, Traefik) klausosi išorinio srauto ir maršrutizuoja jį į tinkamą ClusterIP paslaugą.
- Leidžia centralizuotai valdyti maršrutizaciją, SSL terminaciją, apkrovos balansavimą.
- Lanksti ir mastelį leidžianti prieiga.
-
Service tipas ExternalName:
- Sukuria pseudonimą išoriniam domenui. Nesuteikia tiesioginės prieigos prie konteinerio per šią paslaugą, bet leidžia naudoti DNS vardą viduje klasteryje, norint pasiekti išorinį išteklių. Nerekomenduojama tiesioginei prieigai prie konteinerio iš išorės.
-
Tiesioginė prieiga prie NodePort/HostPort ant Pod:
- Galite nurodyti
hostPortpod'o specifikacijoje, kad atidarytumėte prievadą mazge, kuriame veikia podas. Labai nerekomenduojama gamybinėje aplinkoje dėl mažo valdomumo ir galimų konfliktų prievadų. - Panašiai,
nodePortgalima nurodyti NodePort tipo paslaugoje.
- Galite nurodyti
Konfigūracijos pavyzdžiai:
-
LoadBalancer paslauga:
// 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 paslauga:
// 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 # jei nenurodyta, Kubernetes priskirs type: NodePort -
Ingress (ClusterIP paslauga):
// service-clusterip.yaml (turi būti jau egzistuojanti) 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
Pasirinktas metodas priklauso nuo mastelio, saugumo, diegimo aplinkos (debesis ar vietoje) ir poreikio centralizuotai valdyti prieigą. Ingress yra pageidaujamas sprendimas gamybinėms sistemoms.