Než přistoupíme k instalaci Nginx Ingress Controller, podívejme se ve zkratce, co je Ingress a Ingress Controller. Tento článek se zaměřuje na nastavení, předpokládá se, že jste obeznámeni se všemi předpoklady pro nastavení Nginx Ingress Controller v Kubernetes Cluster.
Kubernetes Ingress
Jedná se o objekt Kubernetes, který spravuje externí přístup ke službám v clusteru Kubernetes. Zpřístupňuje směrování HTTP a HTTPS z vnějšku clusteru Kubernetes do služeb v klastru Kubernetes.
Ovladač vstupu
Chcete-li používat Ingress, musíte mít Ingress Controller v clusteru Kubernetes. Nepřichází jako součást clusteru Kubernetes jako ostatní řadiče v clusteru, nespouští se automaticky v clusteru. V clusteru Kubernetes můžeme nasadit libovolný počet Ingress Controllerů. Abychom tak učinili, měli bychom každý vstup označit příslušnou třídou ingress. K dispozici je mnoho různých typů Ingress Controllerů. Ingress Controller je LoadBalancer pro prostředí Kubernetes. Používá se jako řešení správy provozu pro prostředí Kubernetes.
V tomto článku uvidíme instalaci Nginx Ingress Controller pomocí Helm na Kubernetes Cluster nastaveném pomocí Kops. Chcete-li vědět o Nginx Ingress Controller podrobně, navštivte oficiální dokumentaci zde.
Předpoklady
- Účet AWS (vytvořte jej, pokud jej nemáte).
- Kops 1.18.2 nainstalovaný na vašem počítači (Kliknutím sem se naučíte vytvářet cluster Kubernetes pomocí Kops a dozvíte se o něm více.)
- Helm v3.5.3 (Kliknutím sem se dozvíte, jak nainstalovat Helm na server Ubuntu)
- Bucket S3 (Kliknutím sem se dozvíte, jak vytvořit Bucket S3 na AWS).
- Název domény (kliknutím sem se dozvíte, jak zaregistrovat doménu na AWS).
- Role IAM s oprávněními správce (Kliknutím sem se dozvíte, jak vytvořit roli IAM na AWS).
Co budeme dělat?
- Vytvořte cluster Kubernetes pomocí Kops
- Nastavte Nginx Ingress Controller pomocí Helm
- Vytvořte sadu záznamů v Route53 směřující na LoadBalancer vytvořený Nginx Ingress Controller
- Vytvořte soubory definice objektů pro ukázkovou aplikaci
- Nasazení ukázkové aplikace
- Nasazení vstupního objektu
Vytvoření clusteru Kubernetes pomocí Kops
Než budete pokračovat ve vytváření clusteru, exportujte svůj uživatelský přístup a tajné klíče AWS IAM pomocí následujících příkazů.
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>
Pokud vytváříte cluster poprvé pomocí Kops a používáte výše uvedený S3 Bucket pro ukládání konfigurace clusteru, neměli byste vidět žádné clustery, když se pokusíte získat clustery pomocí následujícího příkazu.
kops get clusters
Chcete-li podrobně porozumět Kopsovi, navštivte dokumentaci uvedenou v předpokladech. Chcete-li vytvořit cluster Kubernetes, spusťte následující příkaz nahrazením hodnot. Nebudu zde zacházet do podrobností.
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
V návrhu můžete vidět několik příkazů.
Tentokrát, když se pokusíte získat konfiguraci clusteru, uvidíte ve výstupu název clusteru spolu s Cloud a Zones.
Do této chvíle nebyl cluster vytvořen, proveďte následující příkaz pro aktualizaci konfigurace clusteru.
kops update cluster --name kops.devopslee.com
Stále budete muset provést výše uvedený příkaz s volbou --yes, aby se vytvořily prostředky clusteru.
kops update cluster --name kops.devopslee.com --yes
Ověřte, zda je cluster připraven nebo ne.
kops validate cluster --wait 10m
Než bude cluster v pořádku, musíte nějakou dobu počkat.
kops validate cluster --wait 10m
Jakmile je cluster v pořádku, můžete pomocí následujícího příkazu zkontrolovat výchozí pody ve všech jmenných prostorech.
kubectl get pods -A
Nastavit ovladač vstupu Nginx pomocí Helm
Jakmile bude Kubernetes Cluster připraven a v pořádku, je dobré jít a nainstalovat Nginx Ingress Controller pomocí Helm.
Než budete pokračovat, ověřte, že máte Helm v3.5.3.
Poznámka:Použil jsem binární program Helm přítomný na svém aktuálním místě, takže na snímcích obrazovky můžete vidět ./helm.
helm version
Přidejte repo a nainstalujte graf Nginx Ingress Controller Helm pomocí následujících příkazů. Chcete-li porozumět Helmu, podívejte se na dokumentaci uvedenou v části předpoklady.
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
Na výše uvedeném snímku obrazovky můžete vidět, že byl nainstalován graf kormidla.
Můžete zkontrolovat zdroje, které byly vytvořeny jako součást Ingress Controller.
kubectl get pods
kubectl get deployment
kubectl get service
Na výše uvedeném snímku obrazovky můžete vidět, že byla také vytvořena služba „nginx-ingress-ingress-nginx-controller“ typu LoadBalancer. Znamená to, že v účtu AWS byl vytvořen LoadBalancer.
Vytvořte sadu záznamů v Route53 ukazující na LoadBalancer vytvořený Nginx Ingress Ovladač
Přejděte na svůj účet AWS v oblasti, kde jste vytvořili svůj Kubernetes Cluster. Zkontrolujte LoadBalancer a zkopírujte jeho název DNS.
Nyní přejděte na Route53 a vytvořte jeden záznam A v HostedZone.
Jakmile vytvoříme platný záznam, záznam, který jsme vytvořili, bude použit ke směrování provozu do Kubernetes Cluster prostřednictvím Nginx Ingress Controller, který jsme vytvořili. V tomto případě bude kops.devopslee.com směrovat provoz do služeb v clusteru Kubernetes prostřednictvím řadiče vstupu Nginx.
Vytvoření definičních souborů objektů pro ukázkovou aplikaci
Nyní vytvoříme soubory definice objektů pro nasazení ukázkové aplikace. Pro nasazení nasadíme 3 aplikace pomocí 3 Nasazení a 3 příslušných Služeb. Poté vytvoříme zdroj Ingress se směrováním na základě cesty, abychom směrovali provoz do našich aplikací pomocí kops.devopslee.com na základě cesty.
Vytvořte 1-nginx-main-app.yaml pro aplikaci 1.
Odkaz Github:Kliknutím sem zkopírujete soubor z mého úložiště Github.
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
Vytvořte 2-nginx-green-app.yaml pro aplikaci 2.
Odkaz Github:Kliknutím sem zkopírujete soubor z mého úložiště Github.
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
Vytvořte 3-nginx-blue-app.yaml pro aplikaci 3
Odkaz Github:Kliknutím sem zkopírujete soubor z mého úložiště Github.
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
Vytvořte soubor 4-ingress.yaml pro vytváření pravidel Ingress založených na cestě.
Odkaz Github:Kliknutím sem zkopírujete soubor z mého úložiště Github.
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
Všechny tyto soubory můžete najít v mém úložišti Github zde.
Nasazení ukázkových aplikací
Pojďme nasadit ukázkové aplikace jednu po druhé a zkontrolovat jejich stav.
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 deployment
kubectl get pods
kubectl get service
Nasazení vstupního objektu
Nyní je čas vytvořit zdroj Ingress pro směrování založený na cestě. Současně zkontrolujte protokoly Nginx Pod.
kubectl logs nginx-ingress-ingress-nginx-controller-5c97c6b4d5-btvpl -f
kubectl apply -f 4-ingress.yaml
Jakmile je vytvořen zdroj Ingress, můžete vidět, že Nginx načetl svou konfiguraci.
A nyní jsou 3 různé aplikace připraveny k přístupu pomocí stejného názvu hostitele, tj. kops.devopslee.com, na různých cestách.
Adresy URL pro aplikace, název hostitele zde se pro vás bude lišit.
nginx-deploy-main je přístupný na kops.devopslee.com
nginx-deploy-green je přístupný na kops.devopslee.com/green a
nginx-deploy-blue je přístupný na kops.devopslee.com/blue
Můžete vidět, že pomocí stejného názvu hostitele na základě cesty lze přistupovat ke 3 různým aplikacím.
Závěr
V tomto článku jsme viděli kroky k vytvoření clusteru Kubernetes pomocí Kops. Tento článek se zaměřil hlavně na nastavení Nginx Ingress Controller pomocí Helm a vytvoření směrování založeného na cestě pomocí zdroje Ingress. Nasadili jsme 3 různé vzorové aplikace a zkusili jsme k nim přistupovat pomocí stejného názvu hostitele a různých cest.