Middle
Ako môžeme získať prístup ku kontajneru Kubernetes, v ktorom beží aplikácia, z vonkajšej siete?
sobes.tech AI
Odpoveď od AI
Existuje niekoľko základných spôsobov, ako získať prístup ku kontajneru Kubernetes z vonkajšej siete:
-
Služba typu LoadBalancer:
- Cloudoví poskytovatelia (AWS, GCP, Azure) vytvárajú externý vyvažovač záťaže, ktorý smeruje prevádzku na vaše pody.
- Priraďuje sa externá IP adresa.
- Najjednoduchší spôsob v cloudovom prostredí.
-
Služba typu NodePort:
- Otvára port na každom uzle v klasteri.
- Tento port smeruje prevádzku na službu vašej aplikácie.
- Prístup je cez IP adresu ktoréhokoľvek uzla a číslo NodePort.
- Menej škálovateľné a bezpečnejšie ako LoadBalancer.
-
Služba typu ClusterIP spolu s Ingress:
- ClusterIP je služba dostupná iba vo vnútri klastera.
- Ingress je objekt API, ktorý riadi externý prístup ku službám v klasteri.
- Ingress kontrolér (napríklad Nginx Ingress Controller, Traefik) počúva externý prevádzku a smeruje ho na príslušnú ClusterIP službu.
- Umožňuje centralizovanú správu smerovania, SSL termináciu, vyvažovanie záťaže.
- Flexibilný a škálovateľný prístup.
-
Služba typu ExternalName:
- Vytvára pseudonym pre externú doménu. Neposkytuje priame prístup k kontajneru cez túto službu, ale umožňuje používanie DNS mena vnútri klastera na prístup k externému zdroju. Nie je vhodná pre priame prístup k kontajneru zvonku.
-
Priamy prístup k NodePort/HostPort na Pod:
- Môžete špecifikovať
hostPortv špecifikácii podu, aby ste otvorili port na uzle, kde beží pod. Neodporúča sa v produkčnom prostredí kvôli nízkej spravovateľnosti a potenciálnym konfliktom portov. - Podobne,
nodePortmôžete špecifikovať v službe typu NodePort.
- Môžete špecifikovať
Príklady konfigurácií:
-
LoadBalancer služba:
// 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 služba:
// 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 # voliteľné, Kubernetes mu priradí, ak nie je uvedené type: NodePort -
Ingress (service typu ClusterIP):
// service-clusterip.yaml (už existuje) 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
Voľba metódy závisí od požiadaviek na škálovanie, bezpečnosť, prostredie nasadenia (cloud alebo on-premise) a potreby centralizovanej správy prístupu. Ingress je preferované riešenie pre produkčné systémy.