Pencerminkan lalu lintas lintas kluster adalah proses mencerminkan lalu lintas dari lingkungan produksi ke lingkungan staging untuk menjalankan uji simulasi atau memecahkan masalah. Metode ini memungkinkan Anda melakukan pengujian dan pemecahan masalah tanpa mengganggu operasi bisnis di lingkungan produksi. Topik ini menjelaskan cara menggunakan NGINX Ingress controller untuk mencerminkan lalu lintas antar kluster Container Service for Kubernetes (ACK).
Prasyarat
Dua kluster ACK telah dibuat. Untuk informasi lebih lanjut, lihat Buat kluster ACK yang dikelola.
NGINX Ingress controller telah diinstal dengan versi v1.2.1 atau lebih baru. Untuk informasi lebih lanjut, lihat Kelola NGINX Ingress controller.
File kubeconfig kluster telah diperoleh dan digunakan untuk terhubung ke kluster menggunakan kubectl.
Skenario Penggunaan
Pencerminkan lalu lintas dapat digunakan dalam skenario berikut:
Simulasi beban kerja produksi:
Sebelum membuat perubahan penting pada sistem atau merilis fitur baru, Anda harus menjalankan uji stres untuk mengevaluasi stabilitas sistem. Dalam banyak kasus, beban kerja produksi disimulasikan di lingkungan staging untuk menguji stabilitas sistem baru sebelum dirilis. Namun, beban aktual sulit diperkirakan karena sistem mungkin menerima baik lalu lintas jaringan normal maupun abnormal. Untuk mengatasi masalah ini, Anda dapat mencerminkan lalu lintas jaringan dari aplikasi di lingkungan produksi ke lingkungan staging. Kemudian, Anda dapat mensimulasikan beban kerja produksi di lingkungan staging.
Pemecahan Masalah:
Ketika sistem di lingkungan produksi mengalami hambatan performa dan penyebabnya tidak dapat ditemukan, Anda dapat mencerminkan lalu lintas jaringan sistem ke lingkungan staging. Dengan cara ini, Anda dapat memecahkan kesalahan di lingkungan staging.
Dalam contoh ini, kluster ACK bernama K8s Product Cluster berada di lingkungan produksi, sedangkan kluster ACK bernama K8s Stage Cluster berada di lingkungan staging.
Persiapan
Untuk mencerminkan 100% lalu lintas produksi dari K8s Product Cluster ke aplikasi di K8s Stage Cluster, replikasi semua permintaan yang ditujukan untuk example.com dan alihkan mereka ke example1.com.
Langkah 1: Terapkan aplikasi di lingkungan staging
Buat file bernama my-nginx.yaml di K8s Stage Cluster dan tambahkan konten berikut ke file tersebut.
CatatanAnda hanya perlu menerapkan aplikasi di K8s Stage Cluster untuk menerima lalu lintas yang dicerminkan. Jangan ubah konfigurasi kluster.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 imagePullPolicy: Always name: nginx ports: - containerPort: 80 protocol: TCP restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePort --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress spec: rules: - host: example1.com http: paths: - path: / backend: service: name: nginx-service port: number: 80 pathType: ImplementationSpecificJalankan perintah berikut untuk menerapkan aplikasi my-nginx:
kubectl apply -f my-nginx.yamlJalankan perintah berikut untuk melihat konfigurasi Ingress:
kubectl get ing nginx-ingressOutput yang Diharapkan:
NAME HOSTS ADDRESS PORTS AGE nginx-ingress example1.com 47.**.**.53 80 8mJalankan perintah berikut untuk mengakses nama domain aplikasi guna menguji pengaturan resolusi nama domain:
curl http://example1.com
Langkah 2: Konfigurasikan pencerminkan lalu lintas di lingkungan produksi
Setelah aplikasi diterapkan di K8s Product Cluster, Anda perlu menambahkan anotasi pencerminkan lalu lintas ke Ingress.
Buat file bernama my-nginx.yaml di K8s Product Cluster dan tambahkan konten berikut ke file tersebut:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 imagePullPolicy: Always name: nginx ports: - containerPort: 80 protocol: TCP restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePortJalankan perintah berikut untuk menerapkan aplikasi my-nginx:
kubectl apply -f my-nginx.yamlBuat file bernama my-ingress.yaml dan tambahkan konfigurasi Ingress berikut ke file tersebut.
Tambahkan
nginx.ingress.kubernetes.io/mirror-targetdan atur nilainya menjadiADDRESSdari K8s Stage Cluster di Langkah 3. Anotasi ini hanya berlaku untuk HTTP dan HTTPS. Untuk informasi lebih lanjut, lihat ingress-nginx_mirror.Tambahkan
nginx.ingress.kubernetes.io/mirror-hostdan atur nilainya menjadiHOSTSdari K8s Stage Cluster di Langkah 3.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress annotations: nginx.ingress.kubernetes.io/mirror-target: "http://47.**.**.53$request_uri" #Tentukan alamat tujuan lalu lintas yang dicerminkan. nginx.ingress.kubernetes.io/mirror-request-body: "off" # Badan permintaan tidak dikirim ke tujuan. Untuk mengirim badan permintaan ke tujuan, hapus anotasi ini. nginx.ingress.kubernetes.io/mirror-host: "example1.com" # Atur header Host dari lalu lintas yang dicerminkan. spec: rules: - host: example.com http: paths: - path: / backend: service: name: nginx-service port: number: 80 pathType: ImplementationSpecificJalankan perintah berikut untuk menerapkan Ingress:
kubectl apply -f my-ingress.yamlJalankan perintah berikut untuk melihat konfigurasi Ingress:
kubectl get ing nginx-ingressOutput yang Diharapkan:
NAME HOSTS ADDRESS PORTS AGE nginx-ingress example.com 39.**.**.54 80 1mJalankan perintah berikut untuk memeriksa apakah Anda dapat mengakses nama domain aplikasi:
curl http://example.com
Verifikasi konfigurasi
Akses nama domain example.com di K8s Product Cluster. Setelah menjalankan perintah berikut, output menunjukkan bahwa permintaan yang ditujukan untuk nama domain direplikasi. Permintaan yang direplikasi dialihkan ke aplikasi di K8s Stage Cluster.
kubectl -n kube-system logs --tail=0 -f nginx-ingress-controller-674c96ffbc-9mc8n