Wat is Ingress Controller en Nginx Ingress Controller inzetten in Kubernetes Cluster op AWS met Helm
Voor we verder gaan met de installatie van de Nginx Ingress Controller, laten we in het kort zien wat Ingress en Ingress Controller is. De nadruk van dit artikel ligt op de opstelling, er wordt verondersteld dat je bekend bent met alle voorwaarden voor het opzetten van Nginx Ingress Controller in de Kubernetes Cluster.
Kubernetes Ingress
Het is een Kubernetes object dat externe toegang tot de diensten in de Kubernetes Cluster beheert. Het stelt HTTP en HTTPS routes bloot van buiten het Kubernetes cluster naar de diensten binnen het Kubernetes cluster.
Ingress Controller
Om Ingress te gebruiken, moet je de Ingress Controller in het Kubernetes cluster hebben. Hij komt niet als deel van het Kubernetes cluster zoals andere controllers in het cluster, hij start niet automatisch in het cluster. We kunnen een willekeurig aantal Ingress Controllers in het Kubernetes cluster inzetten. Om dat te doen, moeten we elke ingress annoteren met de juiste ingress.class. Er zijn veel verschillende soorten Ingress Controllers beschikbaar. Ingress Controller is een LoadBalancer voor Kubernetes Omgevingen. Hij wordt gebruikt als een oplossing voor verkeersbeheer voor Kubernetes omgevingen.
In dit artikel bekijken we de installatie van de Nginx Ingress Controller met Helm op de Kubernetes Cluster die met Kops is opgezet. Om meer te weten te komen over Nginx Ingress Controller in detail, bezoek je de officiële documentatie hier.
Vereisten
- AWS Account ( Maak aan als je er geen hebt).
- Kops 1.18.2 geïnstalleerd op je machine(Klikhier om een Kubernetes Cluster te leren maken met Kops en er meer over te weten te komen).
- Helm v3.5.3 (Klik hier om te leren hoe je Helm op Ubuntu Server installeert)
- S3 Bucket ( Klik hier om te leren een S3 Bucket op AWS te maken).
- Domeinnaam (Klikhier om te leren hoe je een Domein op AWS registreert).
- IAM Rol met admin rechten(Klik hier om te leren een IAM rol op AWS te maken).
Wat zullen we doen?
- Maak een Kubernetes Cluster met behulp van Kops
- Stel Nginx Ingress Controller in met Helm
- Maak een Recordset in Route53 die wijst naar de LoadBalancer die door de Nginx Ingress Controller is aangemaakt
- Maak Object definitie bestanden voor een voorbeeld applicatie
- Zet een voorbeeldtoepassing op
- Zet een Ingress Object in
Maak een Kubernetes Cluster met behulp van Kops
Voordat je verder gaat met het maken van het cluster, exporteer je AWS IAM Gebruikers toegang en geheime sleutels met de volgende commando’s.
export AWS_ACCESS_KEY_ID=<your-aws-access-key-here> #Export AWS Access Key
export AWS_SECRET_ACCESS_KEY=<your-aws-secret-key-here> ##Export AWS Secret Key export
Now, export the KOPS_STATE_STORE variable with value as S3 bucket name on your terminal.
KOPS_STATE_STORE=s3://<s3-bucket-name>
Als je voor de eerste keer een cluster maakt met Kops en de hierboven opgegeven S3 Bucket gebruikt voor het opslaan van cluster configuratie, zou je geen clusters moeten zien als je clusters probeert op te halen met het volgende commando.
kops get clusters
Bezoek de documentatie gespecificeerd in de randvoorwaarden om Kops in detail te begrijpen. Voer hier, om een Kubernetes cluster te maken, het volgende commando uit door waarden te vervangen. Ik zal hier niet in detail treden.
kops create cluster --name <subdomain.domain.com> --state s3://<s3-bucket> --cloud aws --master-size t2.small --master-count 1 --master-zones us-east-1a --node-size t2.small --node-count 2 --zones us-east-1a,us-east-1b,us-east-1c
Je ziet een paar commando’s in de suggestie.
Als je nu probeert de cluster configuratie op te halen, zie je in de uitvoer de clusternaam samen met Cloud en Zones.
Tot dit punt is het cluster nog niet aangemaakt, voer het volgende commando uit om de Cluster configuratie bij te werken.
kops update cluster --name kops.devopslee.com
Je moet het bovenstaande commando nog uitvoeren met –yes als optie, zodat er clustermiddelen worden aangemaakt.
kops update cluster --name kops.devopslee.com --yes
Valideer of het cluster klaar is of niet.
kops validate cluster --wait 10m
Je moet enige tijd wachten tot het cluster gezond is.
kops validate cluster --wait 10m
Zodra het cluster gezond is, kun je de standaard pods over alle namespaces controleren met het volgende commando.
kubectl get pods -A
Stel Nginx Ingress Controller in met Helm
Als de Kubernetes Cluster klaar en gezond is, ben je goed om te gaan en Nginx Ingress Controller te installeren met Helm.
Voor je verder gaat, controleer je of je Helm v3.5.3 hebt.
Opmerking: Ik heb Helm binary gebruikt die op mijn huidige locatie aanwezig is, vandaar dat je ./helm in screenshots ziet.
helm version
Voeg de repo toe en installeer de Nginx Ingress Controller Helm kaart met de volgende commando’s. Om Helm te begrijpen, raadpleeg je de documentatie die in de paragraaf Vereisten staat.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx --set controller.publishService.enabled=true
In de bovenstaande schermafbeelding kun je zien dat de Helm kaart geïnstalleerd is.
Je kunt de middelen controleren die als onderdeel van de Ingress Controller zijn aangemaakt.
kubectl get pods
kubectl get deployment
kubectl get service
In de bovenstaande schermafbeelding zie je dat ook de Dienst “nginx-ingress-nginx-controller” van het type LoadBalancer is aangemaakt. Het betekent dat er een LoadBalancer is aangemaakt in het AWS account.
Maak een Recordset in Route53 die wijst naar de LoadBalancer die door de Nginx Ingress Controller is aangemaakt
Ga naar je AWS account in de regio waar je je Kubernetes Cluster hebt aangemaakt. Vink de LoadBalancer aan en kopieer zijn DNS Naam.
Ga nu naar Route53 en maak een enkel A Record aan in de HostedZone.
Zodra we een geldig record hebben aangemaakt, zal dat gebruikt worden om verkeer naar Kubernetes Cluster te routeren via de Nginx Ingress Controller die we gemaakt hebben. In dit geval zal kops.devopslee.com verkeer naar Services in de Kubernetes cluster routeren via de Nginx Ingress Controller.
Object definitie bestanden maken voor een voorbeeld applicatie
Laten we nu object definitie bestanden maken om een voorbeeld toepassing uit te rollen. We zullen 3 applicaties inzetten met behulp van 3 Deployments en 3 respectievelijke Services voor de deployments. We zullen dan een Ingress resource met path-based routing maken om verkeer naar onze toepassingen te routeren met kops.devopslee.com op basis van het pad.
Maak 1-nginx-main-app.yaml voor toepassing 1.
Github Link: Klikhier om het bestand uit mijn Github repo te kopiëren.
apiVersion: apps/v1 kind: Deployment metadata: labels: run: nginx name: nginx-deploy-main spec: replicas: 1 selector: matchLabels: run: nginx-main template: metadata: labels: run: nginx-main spec: containers: - image: nginx name: nginx --- apiVersion: v1 kind: Service metadata: name: nginx-deploy-main spec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: run: nginx-main
Maak 2-nginx-green-app.yaml voor toepassing 2.
Github Link: Klikhier om het bestand uit mijn Github repo te kopiëren.
apiVersion: apps/v1 kind: Deployment metadata: labels: run: nginx name: nginx-deploy-green spec: replicas: 1 selector: matchLabels: run: nginx-green template: metadata: labels: run: nginx-green spec: volumes: - name: webdata emptyDir: {} initContainers: - name: web-content image: busybox volumeMounts: - name: webdata mountPath: "/webdata" command: ["/bin/sh", "-c", 'echo "<h1>I am <font color=green>GREEN</font></h1>" > /webdata/index.html'] containers: - image: nginx name: nginx volumeMounts: - name: webdata mountPath: "/usr/share/nginx/html" --- --- apiVersion: v1 kind: Service metadata: name: nginx-deploy-green spec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: run: nginx-green
Maak 3-nginx-blue-app.yaml voor toepassing 3
Github Link: Klikhier om het bestand uit mijn Github repo te kopiëren.
apiVersion: apps/v1 kind: Deployment metadata: labels: run: nginx name: nginx-deploy-blue spec: replicas: 1 selector: matchLabels: run: nginx-blue template: metadata: labels: run: nginx-blue spec: volumes: - name: webdata emptyDir: {} initContainers: - name: web-content image: busybox volumeMounts: - name: webdata mountPath: "/webdata" command: ["/bin/sh", "-c", 'echo "<h1>I am <font color=blue>BLUE</font></h1>" > /webdata/index.html'] containers: - image: nginx name: nginx volumeMounts: - name: webdata mountPath: "/usr/share/nginx/html" --- apiVersion: v1 kind: Service metadata: name: nginx-deploy-blue spec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: run: nginx-blue
Maak 4-ingress.yaml voor het maken van pad-gebaseerde Ingress regels.
Github Link: Klikhier om het bestand uit mijn Github repo te kopiëren.
apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: / name: ingress-resource spec: rules: - host: kops.devopslee.com http: paths: - path: / backend: serviceName: nginx-deploy-main servicePort: 80 - path: /blue backend: serviceName: nginx-deploy-blue servicePort: 80 - path: /green backend: serviceName: nginx-deploy-green servicePort: 80
Je kunt al deze bestanden hier op mijn Github repo vinden.
Voorbeeld applicaties inzetten
Laten we voorbeeld applicaties een voor een inzetten en hun status controleren.
kubectl apply -f 1-nginx-main-app.yaml
kubectl apply -f 2-nginx-green-app.yaml
kubectl apply -f 3-nginx-blue-app.yaml
kubectl get deployments
kubectl get pods
kubectl get service
Zet een Ingress Object in
Nu is het tijd om een pad-gebaseerde routing Ingress bron aan te maken. Controleer tegelijk de logs van de Nginx Pod.
kubectl logs nginx-ingress-ingress-nginx-controller-5c97c6b4d5-btvpl -f
kubectl apply -f 4-ingress.yaml
Zodra de Ingress resource is aangemaakt, kun je zien dat de Nginx zijn configuratie geladen heeft.
En nu zijn 3 verschillende toepassingen klaar om benaderd te worden met dezelfde Host Naam, nl. kops.devopslee.com, op verschillende paden.
De URL’s voor de toepassingen, de Hostname hier genoemd, zullen voor jou verschillend zijn.
nginx-deploy-main kan benaderd worden op kops.devopslee.com
nginx-deploy-green kan benaderd worden op kops.devopslee.com/green en
nginx-deploy-blue is toegankelijk op kops.devopslee.com/blue
Je ziet dat op basis van het pad 3 verschillende toepassingen met dezelfde Hostname benaderd kunnen worden.
Conclusie
In dit artikel zagen we de stappen om een Kubernetes Cluster te maken met Kops. Dit artikel richtte zich vooral op het opzetten van Nginx Ingress Controller met Helm en het maken van een pad-gebaseerde routering met Ingress resource. We zetten 3 verschillende voorbeeld applicaties in en probeerden ze te benaderen met dezelfde Hostname en verschillende paden.