GNU/Linux >> Znalost Linux >  >> Linux

Co je Ingress Controller a jak nasadit Nginx Ingress Controller v Kubernetes Cluster na AWS pomocí Helm

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

  1. Účet AWS (vytvořte jej, pokud jej nemáte).
  2. 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.)
  3. Helm v3.5.3  (Kliknutím sem se dozvíte, jak nainstalovat Helm na server Ubuntu)
  4. Bucket S3 (Kliknutím sem se dozvíte, jak vytvořit Bucket S3 na AWS).
  5. Název domény (kliknutím sem se dozvíte, jak zaregistrovat doménu na AWS).
  6. 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?

  1. Vytvořte cluster Kubernetes pomocí Kops
  2. Nastavte Nginx Ingress Controller pomocí Helm
  3. Vytvořte sadu záznamů v Route53 směřující na LoadBalancer vytvořený Nginx Ingress Controller
  4. Vytvořte soubory definice objektů pro ukázkovou aplikaci
  5. Nasazení ukázkové aplikace
  6. 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.


Linux
  1. Co je NGINX? Jak to funguje?

  2. Jak nasadit Nginx Load Balancing na Kubernetes Cluster na Ubuntu 18.04 LTS

  3. Jak nasadit svůj první modul na clusteru Kubernetes

  1. Co je Helm? Vysvětlení map kormidla a kormidla

  2. Jak nasadit instanci WordPress na Kubernetes

  3. Jak nasadit Redis Cluster na Kubernetes

  1. Co je to chroot jail a jak jej používat?

  2. Co je Kubernetes DaemonSet a jak jej používat?

  3. Jak nasadit PostgreSQL na Kubernetes