Middle
Jak můžeme získat přístup ke kontejneru Kubernetes, ve kterém běží aplikace, z vnější sítě?
sobes.tech AI
Odpověď od AI
Existuje několik základních způsobů, jak získat přístup ke kontejneru Kubernetes z vnější sítě:
-
Služba typu LoadBalancer:
- Cloudoví poskytovatelé (AWS, GCP, Azure) vytvářejí externí vyvažovač zátěže, který směruje provoz na vaše kontejnery.
- Přiděluje se externí IP adresa.
- Nejjednodušší způsob v cloudovém prostředí.
-
Služba typu NodePort:
- Otevírá port na každém uzlu clusteru.
- Tento port směruje provoz na službu vaší aplikace.
- Přístup je možný přes IP libovolného uzlu a číslo NodePort.
- Méně škálovatelné a bezpečnější než LoadBalancer.
-
Služba typu ClusterIP spolu s Ingress:
- ClusterIP je služba dostupná pouze uvnitř clusteru.
- Ingress je objekt API, který řídí externí přístup ke službám v clusteru.
- Ingress kontrolér (například Nginx Ingress Controller, Traefik) poslouchá externí provoz a směruje jej na odpovídající službu ClusterIP.
- Umožňuje centralizovanou správu směrování, SSL terminaci, vyvažování zátěže.
- Flexibilní a škálovatelný přístup.
-
Služba typu ExternalName:
- Vytváří alias pro externí doménu. Neposkytuje přímý přístup ke kontejneru přes tuto službu, ale umožňuje používat DNS jméno uvnitř clusteru k přístupu k externímu zdroji. Není vhodná pro přímý přístup ke kontejneru zvenčí.
-
Přímý přístup k NodePort/HostPort na Pod:
- Můžete specifikovat
hostPortv definici podu, čímž otevřete port na uzlu, kde běží pod. Nedoporučuje se v produkčním prostředí kvůli nízké spravovatelnosti a potenciálním konfliktům portů. - Podobně lze specifikovat
nodePortv typu služby NodePort.
- Můžete specifikovat
Příklady konfigurace:
-
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 # volitelné, Kubernetes jej přiřadí, pokud není uveden type: NodePort -
Ingress (service typu ClusterIP):
// service-clusterip.yaml (již 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
Volba metody závisí na požadavcích na škálování, bezpečnost, prostředí nasazení (cloud nebo on-premise) a potřebě centralizované správy přístupu. Ingress je preferované řešení pro produkční systémy.