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:

  1. 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.
  2. 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.
  3. 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
  4. 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

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

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

mijn-inzet

Om een inzet aan te maken voer je het volgende commando uit.

kubectl create -f my-deployment.yml

create-deployment

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

get-deployment-details

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

mijn-dienst

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

create-service

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

get-service-details

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

toegangsdienst

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.