GNU/Linux >> Belajar Linux >  >> Linux

Apa itu Ingress Controller dan bagaimana cara men-deploy Nginx Ingress Controller di Kubernetes Cluster di AWS menggunakan Helm

Sebelum kita melanjutkan instalasi Nginx Ingress Controller, mari kita lihat secara singkat apa itu Ingress dan Ingress Controller. Fokus artikel ini adalah pada setup, diasumsikan bahwa Anda sudah familiar dengan semua prasyarat untuk setup Nginx Ingress Controller di Kubernetes Cluster.

Masukan Kubernetes

Ini adalah objek Kubernetes yang mengelola akses eksternal ke layanan di Cluster Kubernetes. Ini memperlihatkan rute HTTP dan HTTPS dari luar cluster Kubernetes ke layanan di dalam cluster Kubernetes.

Pengontrol Masuknya

Untuk menggunakan Ingress, Anda harus memiliki Ingress Controller di cluster Kubernetes. Itu tidak datang sebagai bagian dari cluster Kubernetes seperti pengontrol lain di cluster, itu tidak dimulai secara otomatis di cluster. Kami dapat menerapkan Ingress Controller dalam jumlah berapa pun di cluster Kubernetes. Untuk melakukannya, kita harus memberi anotasi pada setiap ingress dengan kelas ingress.class yang sesuai. Ada banyak jenis Ingress Controller yang tersedia. Ingress Controller adalah LoadBalancer untuk Lingkungan Kubernetes. Ini digunakan sebagai solusi pengelolaan lalu lintas untuk lingkungan Kubernetes.

Pada artikel ini, kita akan melihat instalasi Nginx Ingress Controller menggunakan Helm pada Cluster Kubernetes yang diatur menggunakan Kops. Untuk mengetahui tentang Nginx Ingress Controller secara detail, kunjungi dokumentasi resmi di sini.

Prasyarat

  1. Akun AWS ( Buat jika Anda belum memilikinya).
  2. Kops 1.18.2 terinstal di komputer Anda (Klik di sini untuk mempelajari cara membuat Cluster Kubernetes menggunakan Kops dan mengetahui lebih banyak tentangnya.)
  3. Helm v3.5.3  (Klik di sini untuk mempelajari cara menginstal Helm di Server Ubuntu)
  4. S3 Bucket ( Klik di sini untuk mempelajari cara membuat Bucket S3 di AWS).
  5. Nama Domain (Klik di sini untuk mempelajari cara mendaftarkan Domain di AWS).
  6. Peran IAM dengan izin admin(Klik di sini untuk mempelajari cara membuat peran IAM di AWS).

Apa yang akan kita lakukan?

  1. Buat Cluster Kubernetes menggunakan Kops
  2. Menyiapkan Nginx Ingress Controller menggunakan Helm
  3. Buat Recordset di Route53 yang menunjuk ke LoadBalancer yang dibuat oleh Nginx Ingress Controller
  4. Membuat File definisi objek untuk aplikasi sampel
  5. Menerapkan contoh aplikasi
  6. Menerapkan Objek Ingress

Buat Cluster Kubernetes menggunakan Kops

Sebelum melanjutkan pembuatan cluster, ekspor akses Pengguna AWS IAM dan kunci rahasia Anda menggunakan perintah berikut.

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>

Jika Anda membuat cluster untuk pertama kalinya menggunakan Kops dan menggunakan Bucket S3 yang ditentukan di atas untuk menyimpan konfigurasi cluster, Anda tidak akan melihat cluster apa pun saat mencoba mendapatkan cluster menggunakan perintah berikut.

kops get clusters

Kunjungi dokumentasi yang ditentukan dalam prasyarat untuk memahami Kops secara mendetail. Di sini, untuk membuat cluster Kubernetes, jalankan perintah berikut dengan mengganti nilai. Saya tidak akan membahas detailnya di sini.

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

Anda dapat melihat beberapa perintah di saran.

Sekarang, kali ini jika Anda mencoba untuk mendapatkan konfigurasi cluster, Anda akan melihat nama cluster di output bersama dengan Cloud dan Zones.

Sampai saat ini, cluster belum dibuat, jalankan perintah berikut untuk memperbarui konfigurasi Cluster.

kops update cluster --name kops.devopslee.com

Anda masih perlu menjalankan perintah di atas dengan --yes sebagai opsi agar sumber daya cluster dapat dibuat.

kops update cluster --name kops.devopslee.com --yes

Validasi apakah cluster sudah siap atau belum.

kops validate cluster --wait 10m

Anda perlu menunggu beberapa saat hingga cluster menjadi sehat.

kops validate cluster --wait 10m

Setelah cluster sehat, Anda dapat memeriksa pod default di semua namespace menggunakan perintah berikut.

kubectl get pods -A

Setup Nginx Ingress Controller menggunakan Helm

Setelah Cluster Kubernetes siap dan sehat, Anda dapat menginstal Nginx Ingress Controller menggunakan Helm.

Sebelum melanjutkan, pastikan Anda memiliki Helm v3.5.3.

Catatan:Saya telah menggunakan Helm binary present di lokasi saya saat ini, sehingga Anda dapat melihat ./helm di tangkapan layar.

helm version

Tambahkan repo dan instal bagan Nginx Ingress Controller Helm menggunakan perintah berikut. Untuk memahami Helm, lihat dokumentasi yang disebutkan di bagian prasyarat.

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

Pada tangkapan layar di atas, Anda dapat melihat bahwa bagan Helm telah dipasang.

Anda dapat memeriksa sumber daya yang telah dibuat sebagai bagian dari Ingress Controller.

kubectl get pods
kubectl get deployment
kubectl get service

Pada tangkapan layar di atas, Anda dapat melihat bahwa Layanan "nginx-ingress-ingress-nginx-controller" tipe LoadBalancer juga telah dibuat. Itu berarti LoadBalancer telah dibuat di akun AWS.

Buat Recordset di Route53 yang menunjuk ke LoadBalancer yang dibuat oleh Nginx Ingress Pengontrol

Buka akun AWS Anda di wilayah tempat Anda membuat Cluster Kubernetes. Periksa LoadBalancer dan salin Nama DNS-nya.

Sekarang, buka Route53 dan buat satu Record A di HostedZone.

Setelah kami membuat record yang valid, record yang kami buat akan digunakan untuk merutekan traffic ke Kubernetes Cluster melalui Nginx Ingress Controller yang kami buat. Dalam hal ini, kops.devopslee.com akan mengarahkan traffic ke Layanan di cluster Kubernetes melalui Nginx Ingress Controller.

Buat File definisi objek untuk aplikasi sampel

Sekarang, mari buat file definisi objek untuk menerapkan aplikasi sampel. Kami akan menerapkan 3 aplikasi menggunakan 3 Penerapan dan 3 Layanan masing-masing untuk penerapan. Kami kemudian akan membuat resource Ingress dengan perutean berbasis jalur untuk merutekan lalu lintas ke aplikasi kami menggunakan kops.devopslee.com berdasarkan jalur tersebut.

Buat 1-nginx-main-app.yaml untuk aplikasi 1.

Tautan Github:Klik di sini untuk menyalin file dari repo Github saya.

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

Buat 2-nginx-green-app.yaml untuk aplikasi 2.

Tautan Github:Klik di sini untuk menyalin file dari repo Github saya.

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          

Buat 3-nginx-blue-app.yaml untuk aplikasi 3

Tautan Github:Klik di sini untuk menyalin file dari repo Github saya.

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

Buat 4-ingress.yaml untuk membuat aturan Ingress berbasis jalur.

Tautan Github:Klik di sini untuk menyalin file dari repo Github saya.

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

Anda dapat menemukan semua file ini di repo Github saya di sini.

Terapkan contoh aplikasi

Mari kita terapkan contoh aplikasi satu per satu dan periksa statusnya.

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

Menerapkan Objek Ingress

Sekarang, saatnya untuk membuat resource Ingress perutean berbasis jalur. Pada saat yang sama, periksa log Nginx Pod.

kubectl logs nginx-ingress-ingress-nginx-controller-5c97c6b4d5-btvpl -f
kubectl apply -f 4-ingress.yaml

Segera setelah sumber daya Ingress dibuat, Anda dapat melihat bahwa Nginx telah memuat konfigurasinya.

Dan sekarang, 3 aplikasi berbeda siap diakses menggunakan Host Name yang sama, yaitu kops.devopslee.com, di jalur yang berbeda.

URL untuk aplikasi, Nama Host di sini nama akan berbeda untuk Anda.

nginx-deploy-main dapat diakses di kops.devopslee.com

nginx-deploy-green dapat diakses di kops.devopslee.com/green dan 

nginx-deploy-blue dapat diakses di kops.devopslee.com/blue

Anda dapat melihat bahwa 3 aplikasi berbeda dapat diakses menggunakan Hostname yang sama berdasarkan jalurnya.

Kesimpulan

Pada artikel ini, kita melihat langkah-langkah untuk membuat Cluster Kubernetes menggunakan Kops. Artikel ini terutama berfokus pada pengaturan Nginx Ingress Controller menggunakan Helm dan membuat perutean berbasis jalur menggunakan sumber daya Ingress. Kami menerapkan 3 contoh aplikasi yang berbeda dan mencoba mengaksesnya menggunakan Nama Inang yang sama dan jalur yang berbeda.


Linux
  1. Apa itu NGINX? Bagaimana cara kerjanya?

  2. Cara Menyebarkan Load Balancing Nginx di Cluster Kubernetes di Ubuntu 18.04 LTS

  3. Cara men-deploy pod pertama Anda di Cluster Kubernetes

  1. Apa itu Helm? Bagan Helm dan Helm Dijelaskan

  2. Cara Menyebarkan Instance WordPress di Kubernetes

  3. Cara Menyebarkan Cluster Redis di Kubernetes

  1. Apa itu chroot jail dan Bagaimana Cara Menggunakannya?

  2. Apa itu Kubernetes DaemonSet dan Bagaimana Cara Menggunakannya?

  3. Cara Menyebarkan PostgreSQL di Kubernetes