Kubernetes – 9. Services

V predošlej časti sme nastavili pravidlá, podľa ktorých medzi sebou pody komunikovali, a tiež ako komunikovali s inými sieťami. Všetko za pomoci štítkov (labels) a možnosti druhu NetworkPolicy – konkrétne spôsob komunikácie typu ingress (smerom do podu) a egress (smerom von z podu).

Tento diel bude o vytvorení služieb (services), vďaka ktorým Kubernetes Cluster otvoríme a nasadené aplikácie v podoch a celých nodoch odkryjeme vnútornej sieti na určitej IP adrese.

Chcete si vytvoriť vlastný Kubernetes (K8s) klaster? Vyskúšajte si ho vo Virtuálnom dátovom centre od Websupportu.

Mažeme nepotrebné služby a nasadenia

Pred tým, ako budeme pokračovať, vymažeme nepotrebné služby (services) a nasadenia (deployments), aby sme Kubernetes Cluster zbytočne nezaťazovali. Najskôr vypíšeme zoznam spustených služieb (prvý riadok) a aktívnych nasadení (druhý riadok) na VPS master:

kubectl get services
kubectl get deployments

Potom nepotrebné služby (prvý riadok) a nasadenia (druhý riadok) na VPS master zmažeme (tu je nepotrebná služba nazvaná nginx-service a nepotrebné nasadenie nginx-deployment):

kubectl delete service nginx-service
kubectl delete deployment nginx-deployment

Nasadzujeme deployment

Vytvoríme súbor s názvom deployment-ngnix-3-replicas.yaml (prvý riadok), do ktorého zapíšeme definíciu nasadenia podu (ostatné riadky):

nano ~/deployment-ngnix-3-replicas.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-ngnix-3-replicas
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nginx
  replicas: 3 
  template: 
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

Vložíme skopírovaný obsah, uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter.

Deployment nasadíme z vyššie vytvoreného konfiguračného súboru:

kubectl create -f ~/deployment-ngnix-3-replicas.yaml

Overíme, že deployment bol nasadený (prvý riadok), že sa vytvoril súbor s 3 replikami (druhý riadok) a že v rámci súboru s replikami (kópiami) bežia 3 pody (tretí riadok):

kubectl get deployments
kubectl get replicasets
kubectl get pods -o wide

Zverejňujeme nasadený deployment

Doteraz sme nasadzovali pody na jednotlivé nody, pričom nasadené služby boli prístupné iba vo vnútri systému Kubernetes Cluster. Vďaka službám (services) však môžeme pody otvoriť aj smerom von do lokálnej siete. Kubernetes ponúka tieto typy služieb:

  • ClusterIP – táto služba sprístupní nasadené služby na vnútornej IP adrese, ktorá je prístupná iba v rámci systému Kubernetes Cluster.
  • NodePort – táto služba sprístupní nasadenú službu na porte v rámci nodu. Služba je tak dostupná aj mimo systému Kubernetes Cluster cez NodeIP:NodePort.
  • LoadBalancer – táto služba sprístupní nasadenú službu externe (teda mimo systém Kubernetes Cluster) za použitia verejnej IP adresy. Oproti NodePort má tú výhodu, že jednu službu dokáže sprístupniť na viacerých portoch.
  • ExternalName – táto služba sprístupní nasadenú službu externe (teda mimo systém Kubernetes Cluster) za použitia verejnej domény.

NodePort

Vytvoríme súbor s názvom service-ngnix-nodeport.yaml (prvý riadok), do ktorého zapíšeme definíciu nasadenia podu (ostatné riadky):

nano ~/service-ngnix-nodeport.yaml
aapiVersion: v1
kind: Service
metadata:
  name: service-ngnix-nodeport
  namespace: default
  labels:
    app: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:    
    app: nginx
  type: NodePort

Vložíme skopírovaný obsah, uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter.

Službu (service) nasadíme z vyššie vytvoreného konfiguračného súboru:

kubectl create -f ~/service-ngnix-nodeport.yaml

Overíme, že služba (service) bola nasadená (prvý riadok) a pozrieme sa na podrobný popis nasadenej služby s názvom service-ngnix-nodeport (druhý riadok):

kubectl get services -o wide
kubectl describe service service-ngnix-nodeport

Zo stĺpca CLUSTER-IP služby service-ngnix-nodeport typu NodePort zistíme IP adresu, ktorú doplníme do príkazu:

curl CLUSTER-IP

Vypísal sa obsah HTML súboru, ktorý poslal webový server Nginx bežiaci na 3 podoch rozmiestnených na 2 nodoch (worker-1 a worker-2). To znamená, že zverejnenie služby prebehlo úspešne a je funkčné.

Nakoniec ešte môžeme vyššie nasadenú službu (prvý riadok) a deployment (druhý riadok) odstrániť:

kubectl delete -f ~/service-ngnix-nodeport.yaml
kubectl delete -f ~/deployment-ngnix-3-replicas.yaml

Po odstránení služby a deploymentu zistíme, že už nie je nasadený žiadny deployment (prvý riadok) a ostala iba služba ClusterIP (druhý riadok):

kubectl get deployments
kubectl get services

LoadBalancer

Vytvoríme súbor s názvom service-ngnix-loadbalancer.yaml (prvý riadok), do ktorého zapíšeme definíciu nasadenia podu (ostatné riadky):

nano ~/service-ngnix-loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
  name: service-ngnix-loadbalancer
  namespace: default
  labels:
    app: nginx
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:    
    app: nginx
  type: LoadBalancer

Vložíme skopírovaný obsah, uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter.

Službu (service) nasadíme z vyššie vytvoreného konfiguračného súboru (druhý riadok), predtým však nasadíme deployment (prvý riadok):

kubectl create -f ~/deployment-ngnix-3-replicas.yaml
kubectl create -f ~/service-ngnix-loadbalancer.yaml

Overíme, že služba (service) bola nasadená (prvý riadok) a pozrieme sa na podrobný popis nasadenej služby s názvom service-ngnix-loadbalancer (druhý riadok):

kubectl get services -o wide
kubectl describe service service-ngnix-loadbalancer

Zo stĺpca CLUSTER-IP služby service-ngnix-loadbalancer typu LoadBalancer zistíme IP adresu, ktorú doplníme do príkazu:

curl CLUSTER-IP

Vypísal sa obsah HTML súboru, ktorý poslal webový server Nginx bežiaci na 3 podoch rozmiestnených na 2 nodoch (worker-1 a worker-2). To znamená, že zverejnenie služby prebehlo úspešne a je funkčné.

Nakoniec ešte môžeme vyššie nasadenú službu (prvý riadok) a deployment (druhý riadok) odstrániť:

kubectl delete -f ~/service-ngnix-loadbalancer.yaml
kubectl delete -f ~/deployment-ngnix-3-replicas.yaml

Po odstránení služby a deploymentu zistíme, že už nie je nasadený žiadny deployment (prvý riadok) a ostala iba služba ClusterIP (druhý riadok):

kubectl get deployments
kubectl get services

Hľadáte manažovaný Kubernetes? Využite služby našich skúsených profesionálov na cloud native – radi vám pripravíme riešnie na mieru.

Zhrnutie

V deviatom diele sme nasadili deployment a následne vytvorili službu (service) typu NodePort a Load Balancer, vďaka ktorej sme Kubernetes Cluster s nasadenými podmi otvorili do vnútornej siete cez IP adresu.

Aktualizované 14. júna 2022

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu