Middle
Hogyan férhetünk hozzá a Kubernetes konténerhez, amelyben az alkalmazás fut, a külső hálózatból?
sobes.tech MI
Válasz az MI-től
Néhány alapvető módja van annak, hogy hozzáférjünk a Kubernetes konténerhez a külső hálózatról:
-
LoadBalancer típusú szolgáltatás:
- Felhős szolgáltatók (AWS, GCP, Azure) külső terheléselosztót hoznak létre, amely a forgalmat az alkalmazás podjaira irányítja.
- Külső IP címet rendelnek hozzá.
- Ez a legegyszerűbb módszer felhő környezetben.
-
NodePort típusú szolgáltatás:
- Minden csomóponton nyit egy portot.
- Ez a port a forgalmat az alkalmazás szolgáltatására irányítja.
- Hozzáférés bármely csomópont IP címén és NodePort számán keresztül.
- Kevésbé skálázható és biztonságosabb, mint a LoadBalancer.
-
ClusterIP típusú szolgáltatás és Ingress együtt:
- A ClusterIP csak a klaszteren belül érhető el.
- Az Ingress egy API objektum, amely kezeli a külső hozzáférést a klaszter szolgáltatásaihoz.
- Az Ingress kezelő (pl. Nginx Ingress Controller, Traefik) figyeli a külső forgalmat és irányítja a megfelelő ClusterIP szolgáltatásra.
- Lehetővé teszi a központosított irányítást, SSL terminálást, terheléselosztást.
- Rugalmas és skálázható megközelítés.
-
ExternalName típusú szolgáltatás:
- Egy külső domain aliasát hozza létre. Nem biztosít közvetlen hozzáférést a konténerhez ezen a szolgáltatáson keresztül, de lehetővé teszi DNS név használatát a klaszteren belül külső erőforráshoz való hozzáféréshez. Nem alkalmas közvetlen hozzáféréshez a konténerhez kívülről.
-
Közvetlen hozzáférés NodePort/HostPort segítségével a Pod-hoz:
- Megadhatja a
hostPort-ot a pod specifikációjában, hogy portot nyisson a futó podhoz tartozó csomóponton. Ez nem ajánlott termelési környezetben az alacsony kezelhetőség és a port konfliktusok miatt. - Hasonlóképpen, a
nodePort-ot megadhatja NodePort típusú szolgáltatásnál.
- Megadhatja a
Konfigurációs példák:
-
LoadBalancer szolgáltatás:
// 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 szolgáltatás:
// 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 # opcionális, a Kubernetes automatikusan hozzárendeli, ha nem adja meg type: NodePort -
Ingress (ClusterIP szolgáltatás):
// service-clusterip.yaml (már létezik) 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
A módszer kiválasztása a skálázási, biztonsági, telepítési környezet (felhő vagy on-premise) és a központosított hozzáférés kezelésének igényeitől függ. Az Ingress a legjobb megoldás a termelési rendszerekhez.