Migrasikan Pengontrol Ingress NGINX saat mengaktifkan Mode Otomatis Amazon EKS - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Migrasikan Pengontrol Ingress NGINX saat mengaktifkan Mode Otomatis Amazon EKS

Olawale Olaleye dan Shamanth Devagari, Amazon Web Services

Ringkasan

Mode Otomatis EKS untuk Amazon Elastic Kubernetes Service (Amazon EKS) dapat mengurangi overhead operasional menjalankan beban kerja Anda di klaster Kubernetes. Mode ini memungkinkan AWS untuk juga mengatur dan mengelola infrastruktur atas nama Anda. Ketika Anda mengaktifkan Mode Otomatis EKS pada cluster yang ada, Anda harus hati-hati merencanakan migrasi konfigurasi NGINX Ingress Controller. Ini karena transfer langsung Network Load Balancers tidak dimungkinkan.

Anda dapat menggunakan strategi blue/green penerapan untuk memigrasikan instans NGINX Ingress Controller saat Anda mengaktifkan Mode Otomatis EKS EKS di klaster Amazon EKS yang ada.

Prasyarat dan batasan

Prasyarat

Arsitektur

Penerapan biru/hijau adalah strategi penyebaran di mana Anda membuat dua lingkungan yang terpisah namun identik. Blue/green deployment menyediakan kemampuan rilis downtime dan rollback mendekati nol. Ide dasarnya adalah untuk menggeser lalu lintas antara dua lingkungan identik yang menjalankan versi berbeda dari aplikasi Anda.

Gambar berikut menunjukkan migrasi Network Load Balancers dari dua instance NGINX Ingress Controller yang berbeda saat mengaktifkan Mode Otomatis EKS. Anda menggunakan blue/green penyebaran untuk mengalihkan lalu lintas antara dua Network Load Balancers.

Menggunakan strategi blue/green penerapan untuk memigrasikan instance NGINX Ingress Controller.

Namespace asli adalah namespace biru. Di sinilah layanan dan instance NGINX Ingress Controller asli berjalan, sebelum Anda mengaktifkan Mode Otomatis EKS. Layanan dan instance asli terhubung ke Network Load Balancer yang memiliki nama DNS yang dikonfigurasi di Route 53. AWS Load Balancer Controller menggunakan Network Load Balancer ini di target virtual private cloud (VPC).

Diagram menunjukkan alur kerja berikut untuk menyiapkan lingkungan untuk blue/green penerapan:

  1. Instal dan konfigurasikan instance NGINX Ingress Controller lain di namespace yang berbeda, namespace hijau.

  2. Di Route 53, konfigurasikan nama DNS untuk Network Load Balancer baru.

Alat

Layanan AWS

  • Amazon Elastic Kubernetes Service (Amazon EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.

  • Elastic Load Balancing mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Misalnya, Anda dapat mendistribusikan lalu lintas di seluruh instans, container, dan alamat IP Amazon Elastic Compute Cloud (Amazon EC2) di satu atau beberapa Availability Zone.

  • Amazon Route 53 adalah layanan web DNS yang sangat tersedia dan dapat diskalakan.

  • Amazon Virtual Private Cloud (Amazon VPC) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS

Alat lainnya

  • Helm adalah pengelola paket open source untuk Kubernetes yang membantu Anda menginstal dan mengelola aplikasi di klaster Kubernetes Anda.

  • kubectl adalah antarmuka baris perintah yang membantu Anda menjalankan perintah terhadap klaster Kubernetes.

  • NGINX Ingress Controller menghubungkan aplikasi dan layanan Kubernetes dengan penanganan permintaan, auth, sumber daya kustom swalayan, dan debugging.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Konfirmasikan bahwa instans NGINX Ingress Controller asli beroperasi.

Masukkan perintah berikut untuk memverifikasi bahwa sumber daya di ingress-nginx namespace beroperasi. Jika Anda telah menerapkan NGINX Ingress Controller di namespace lain, perbarui nama namespace dalam perintah ini.

kubectl get all -n ingress-nginx

Pada output, konfirmasikan bahwa pod NGINX Ingress Controller dalam status berjalan. Berikut ini adalah contoh output:

NAME READY STATUS RESTARTS AGE pod/ingress-nginx-admission-create-xqn9d 0/1 Completed 0 88m pod/ingress-nginx-admission-patch-lhk4j 0/1 Completed 1 88m pod/ingress-nginx-controller-68f68f859-xrz74 1/1 Running 2 (10m ago) 72m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/ingress-nginx-controller LoadBalancer 10.100.67.255 k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com 80:30330/TCP,443:31462/TCP 88m service/ingress-nginx-controller-admission ClusterIP 10.100.201.176 <none> 443/TCP 88m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/ingress-nginx-controller 1/1 1 1 88m NAME DESIRED CURRENT READY AGE replicaset.apps/ingress-nginx-controller-68f68f859 1 1 1 72m replicaset.apps/ingress-nginx-controller-d8c96cf68 0 0 0 88m NAME STATUS COMPLETIONS DURATION AGE job.batch/ingress-nginx-admission-create Complete 1/1 4s 88m job.batch/ingress-nginx-admission-patch Complete 1/1 5s 88m
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat sumber daya Kubernetes.

Masukkan perintah berikut untuk membuat contoh deployment, service, dan ingress Kubernetes:

kubectl create deployment demo --image=httpd --port=80
kubectl expose deployment demo
kubectl create ingress demo --class=nginx \ --rule nginxautomode.local.dev/=demo:80
DevOps insinyur

Tinjau sumber daya yang digunakan.

Masukkan perintah berikut untuk melihat daftar sumber daya yang digunakan:

kubectl get all,ingress

Pada output, konfirmasikan bahwa HTTPd pod sampel berada dalam status berjalan. Berikut ini adalah contoh output:

NAME READY STATUS RESTARTS AGE pod/demo-7d94f8cb4f-q68wc 1/1 Running 0 59m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/demo ClusterIP 10.100.78.155 <none> 80/TCP 59m service/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 117m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/demo 1/1 1 1 59m NAME DESIRED CURRENT READY AGE replicaset.apps/demo-7d94f8cb4f 1 1 1 59m NAME CLASS HOSTS ADDRESS PORTS AGE ingress.networking.k8s.io/demo nginx nginxautomode.local.dev k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com 80 56m
DevOps insinyur

Konfirmasikan bahwa layanan dapat dijangkau.

Masukkan perintah berikut untuk mengonfirmasi bahwa layanan dapat dijangkau melalui nama DNS Network Load Balancer:

curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com

Berikut ini adalah output yang diharapkan:

<html><body><h1>It works!</h1></body></html>
DevOps insinyur

(Opsional) Buat catatan DNS.

  1. Ikuti petunjuk dalam Membuat catatan menggunakan konsol Amazon Route 53 (dokumentasi Route 53) untuk membuat catatan DNS untuk domain yang dikonfigurasi.

  2. Masukkan perintah berikut untuk mengonfirmasi bahwa layanan dapat dijangkau melalui nama domain yang dikonfigurasi:

    curl "http://nginxautomode.local.dev/?[1-5]"

    Berikut ini adalah output yang diharapkan:

    <html><body><h1>It works!</h1></body></html> <html><body><h1>It works!</h1></body></html> <html><body><h1>It works!</h1></body></html> <html><body><h1>It works!</h1></body></html> <html><body><h1>It works!</h1></body></html>
DevOps insinyur, AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Aktifkan Mode Otomatis EKS.

Ikuti petunjuk di Aktifkan Mode Otomatis EKS pada klaster yang ada (dokumentasi Amazon EKS).

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Konfigurasikan instance NGINX Ingress Controller baru.

  1. Unduh template deploy.yaml.

  2. Buka template deploy.yaml di editor pilihan Anda.

  3. Di kind: Namespace bagian ini, masukkan nama unik untuk namespace, seperti: ingress-nginx-v2

    apiVersion: v1 kind: Namespace metadata: labels: app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx name: ingress-nginx-v2
  4. Untuk setiap bagian, perbarui namespace nilai ke nama baru.

  5. Di kind: Deployment bagian ini, lakukan hal berikut:

    1. Masukkan nilai unik untuk--controller-class, sepertik8s.io/ingress-nginx-v2.

    2. Masukkan nilai unik untuk--ingress-class, sepertinginx-v2.

    apiVersion: apps/v1 kind: Deployment name: ingress-nginx-controller namespace: ingress-nginx-v2 ... spec: containers: - args: - /nginx-ingress-controller - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller - --election-id=ingress-nginx-leader - --controller-class=k8s.io/ingress-nginx-v2 - --ingress-class=nginx-v2
  6. Di kind: IngressClass bagian tersebut, masukkan nilai yang sama untuk --controller-class dan --ingress-class yang Anda gunakan di bagian sebelumnya:

    apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx app.kubernetes.io/version: 1.12.0 name: nginx-v2 spec: controller: k8s.io/ingress-nginx-v2
  7. Di bagian berikut, tambahkan loadBalancerClass: eks.amazonaws.com/nlb untuk menyediakan Network Load Balancer untuk instance NGINX Ingress Controller:

    apiVersion: v1 kind: Service metadata: name: ingress-nginx-controller namespace: ingress-nginx-v2 spec: ... selector: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx type: LoadBalancer loadBalancerClass: eks.amazonaws.com/nlb
  8. Simpan dan tutup template deploy.yaml.

DevOps insinyur

Menerapkan instance NGINX Instance Controller baru.

Masukkan perintah berikut untuk menerapkan file manifes yang dimodifikasi:

kubectl apply -f deploy.yaml
DevOps insinyur

Konfirmasikan penerapan yang berhasil.

Masukkan perintah berikut untuk memverifikasi bahwa sumber daya di ingress-nginx-v2 namespace beroperasi:

kubectl get all -n ingress-nginx-v2

Pada output, konfirmasikan bahwa pod NGINX Ingress Controller berada dalam keadaan berjalan. Berikut ini adalah contoh output:

NAME READY STATUS RESTARTS AGE pod/ingress-nginx-admission-create-7shrj 0/1 Completed 0 24s pod/ingress-nginx-admission-patch-vkxr5 0/1 Completed 1 24s pod/ingress-nginx-controller-757bfcbc6d-4fw52 1/1 Running 0 24s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/ingress-nginx-controller LoadBalancer 10.100.208.114 k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com 80:31469/TCP,443:30658/TCP 24s service/ingress-nginx-controller-admission ClusterIP 10.100.150.114 <none> 443/TCP 24s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/ingress-nginx-controller 1/1 1 1 24s NAME DESIRED CURRENT READY AGE replicaset.apps/ingress-nginx-controller-757bfcbc6d 1 1 1 24s NAME STATUS COMPLETIONS DURATION AGE job.batch/ingress-nginx-admission-create Complete 1/1 4s 24s job.batch/ingress-nginx-admission-patch Complete 1/1 5s 24s
DevOps insinyur

Buat ingress baru untuk beban HTTPd kerja sampel.

Masukkan perintah berikut untuk membuat ingress baru untuk beban HTTPd kerja sampel yang ada:

kubectl create ingress demo-new --class=nginx-v2 \ --rule nginxautomode.local.dev/=demo:80
DevOps insinyur

Konfirmasikan bahwa ingress baru berfungsi.

Masukkan perintah berikut untuk mengonfirmasi bahwa ingress baru berfungsi:

curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com

Berikut ini adalah output yang diharapkan:

<html><body><h1>It works!</h1></body></html>
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Potong ke namespace baru.

  1. (Opsional) Ikuti petunjuk dalam Mengedit catatan (Dokumentasi Route 53) untuk memperbarui catatan DNS.

  2. Ketika Anda telah mengonfirmasi bahwa instans NGINX Ingress Controller baru beroperasi seperti yang diharapkan, hapus yang asli.

  3. Hapus Pengontrol AWS Load Balancer yang dikelola sendiri. Untuk petunjuknya, lihat Memigrasi aplikasi dari ALB Ingress Controller (dokumentasi Amazon EKS) yang tidak digunakan lagi.

  4. Kuras grup node terkelola. Untuk petunjuk, lihat Menghapus dan menguras grup simpul (dokumentasi eksctl).

AWS DevOps, DevOps insinyur

Tinjau dua masuknya.

Masukkan perintah berikut untuk meninjau dua ingress yang dibuat untuk beban kerja sampel HTTPd :

kubectl get ingress

Berikut ini adalah contoh output:

NAME CLASS HOSTS ADDRESS PORTS AGE demo nginx nginxautomode.local.dev k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com 80 95m demo-new nginx-v2 nginxautomode.local.dev k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com 80 33s
DevOps insinyur

Sumber daya terkait