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
- Akun AWS ( Buat jika Anda belum memilikinya).
- Kops 1.18.2 terinstal di komputer Anda (Klik di sini untuk mempelajari cara membuat Cluster Kubernetes menggunakan Kops dan mengetahui lebih banyak tentangnya.)
- Helm v3.5.3 (Klik di sini untuk mempelajari cara menginstal Helm di Server Ubuntu)
- S3 Bucket ( Klik di sini untuk mempelajari cara membuat Bucket S3 di AWS).
- Nama Domain (Klik di sini untuk mempelajari cara mendaftarkan Domain di AWS).
- Peran IAM dengan izin admin(Klik di sini untuk mempelajari cara membuat peran IAM di AWS).
Apa yang akan kita lakukan?
- Buat Cluster Kubernetes menggunakan Kops
- Menyiapkan Nginx Ingress Controller menggunakan Helm
- Buat Recordset di Route53 yang menunjuk ke LoadBalancer yang dibuat oleh Nginx Ingress Controller
- Membuat File definisi objek untuk aplikasi sampel
- Menerapkan contoh aplikasi
- 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.