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.
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
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.