een Dienst maken in Kubernetes
Een dienst is een abstractie laag over Pods. Het definieert een logische verzameling Pods. Het geeft een enkel IP adres en DNS naam waarmee Pods benaderd kunnen worden. Het wordt gebruikt om de Pods bloot te stellen.
Er zijn 3 verschillende soorten Services in Kubernetes:
- ClusterIP:
Het stelt de dienst bloot binnen het Kubernetes cluster. Deze Dienst is alleen bereikbaar van binnen het cluster. Hij kan niet van buiten het cluster benaderd worden. - NodePort:
Het stelt de dienst bloot op een statische poort op de ingezette node. Deze dienst is van buiten het cluster te bereiken met de NodeIP:Nodeport. - Load Balancer:
Stelt de dienst extern bloot met behulp van de load balancer van een cloud provider, dit maakt een Public IP aan op de Cloud provider - ExternalName:
Het mapt de Dienst aan de inhoud van het externalName veld door een CNAME record terug te geven
Klikhier om meer te weten over Kubernetes Service.
In dit artikel bekijken we de stappen om een Serice van het type NodePort te maken.
Vereisten
- Kubernetes Cluster met minstens 1 worker node.
Als je wilt leren hoe je een Kubernetes Cluster maakt, klik dan hier. Deze gids helpt je een Kubernetes cluster te maken met 1 Master en 2 Nodes op AWS Ubuntu 18l04 EC2 Instances.
Wat we zullen doen
- Maak een Dienst
Maak een Dienst
Eerst maken we een deployment aan met de volgende definitie waarnaar de dienst alle verzoeken die er op af komen zal omleiden.
Maak een nieuw bestand en voeg er de volgende inhoud aan toe, dit zal een inzet voor Nginx maken.
vim my-deployment.yml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: strategy: type: Recreate selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
Om een inzet aan te maken voer je het volgende commando uit.
kubectl create -f my-deployment.yml
Dit zal een inzet voor Nginx aanmaken met 3 replica’s.
Je kunt de details van de inzet, replicaset en pod krijgen met de volgende commando’s.
kubectl get deployment | grep nginx
kubectl get replicaset | grep nginx
kubectl get pod | grep nginx
In de bovenstaande schermafbeelding zie je dat er 3 replicas van de Nginx zijn aangemaakt.
Maak nu een Dienstdefinitie met de volgende inhoud.
vim my-service.yml
apiVersion: v1 kind: Service metadata: name: nginx namespace: default labels: app: nginx spec: externalTrafficPolicy: Local ports: - name: http port: 80 protocol: TCP targetPort: 80 selector:
app: nginx type: NodePort
De bovenstaande dienstdefinitie zal een Dienst van het type NodePort maken en verzoeken omleiden naar Pods die overeenkomen met het label nginx, d.w.z. pods die we maakten met de vorige stap voor het maken van inzet.
Voer het volgende commando uit om een Dienst te maken.
kubectl create -f my-service.yml
Vraag de details van de dienst op en controleer de NodePort waarop de dienst beschikbaar zal zijn.
kubectl get service | grep nginx
kubectl describe service nginx
In de bovenstaande schermafbeelding is te zien dat de dienst beschikbaar is op poort 30747. Dit kan voor jou anders zijn, want de poort wordt willekeurig toegewezen uit de beschikbare reeks.
Nu kan de nginx toepassing via deze dienst benaderd worden op NodeIp:NodePort
Hier is dat:106.210.138.189:30747
Conclusie
In dit artikel maakten we een inzet voor Nginx met 3 replica’s en creĆ«erden een Dienst van het type NodePort. We zagen hoe de met de inzet gemaakte Nginx toepassing op NodeIP:Port benaderd kan worden.