All Products
Search
Document Center

Container Service for Kubernetes:Gunakan Controller Ingress untuk Mencerminkan Lalu Lintas Jaringan

Last Updated:Jul 02, 2025

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

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

  1. Buat file bernama my-nginx.yaml di K8s Stage Cluster dan tambahkan konten berikut ke file tersebut.

    Catatan

    Anda 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: ImplementationSpecific
  2. Jalankan perintah berikut untuk menerapkan aplikasi my-nginx:

    kubectl apply -f my-nginx.yaml
  3. Jalankan perintah berikut untuk melihat konfigurasi Ingress:

    kubectl get ing nginx-ingress

    Output yang Diharapkan:

    NAME            HOSTS         ADDRESS      PORTS       AGE                                                         
    nginx-ingress   example1.com  47.**.**.53   80          8m
  4. Jalankan 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

Catatan

Setelah aplikasi diterapkan di K8s Product Cluster, Anda perlu menambahkan anotasi pencerminkan lalu lintas ke Ingress.

  1. 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: NodePort
  2. Jalankan perintah berikut untuk menerapkan aplikasi my-nginx:

    kubectl apply -f my-nginx.yaml
  3. Buat file bernama my-ingress.yaml dan tambahkan konfigurasi Ingress berikut ke file tersebut.

    • Tambahkan nginx.ingress.kubernetes.io/mirror-target dan atur nilainya menjadi ADDRESS dari 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-host dan atur nilainya menjadi HOSTS dari 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: ImplementationSpecific
  4. Jalankan perintah berikut untuk menerapkan Ingress:

    kubectl apply -f my-ingress.yaml
  5. Jalankan perintah berikut untuk melihat konfigurasi Ingress:

    kubectl get ing nginx-ingress

    Output yang Diharapkan:

    NAME            HOSTS          ADDRESS        PORTS     AGE                                                       
    nginx-ingress   example.com   39.**.**.54   80        1m
  6. Jalankan 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

流量复制结果验证