日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過Ingress Controller來實現應用的流量復制

跨集群流量復制是通過將生產環境的流量鏡像到另一個測試環境中,幫助進行系統仿真測試和問題定位。這種方式可以在不影響生產環境的情況下,對應用服務進行全面的測試和故障排查。本文將介紹如何通過Nginx Ingress Controller實現在不同ACK集群間的流量復制。

前提條件

應用場景

流量復制(Traffic Mirror)功能應用于以下兩個場景:

  • 真實流量模擬測試:

    在系統進行重大重構或者發布新功能時,往往需要對系統進行壓測以事先評估新系統的承載能力。傳統情況下,在線下環境模擬線上各種測試數據來對新系統進行測試,但是這種方式往往并不能有效地模擬出線上真實的訪問量,尤其是模擬正常流量中混雜著各色的異常流量。針對這種情況,可以通過將線上的應用流量復制到指定的線下環境來對新系統進行仿真測試。

  • 問題排查:

    線上系統遇到性能瓶頸,但是又不能快速地定位出問題時,這時可以采用流量復制的方式來將應用的真實流量引導到線下環境來進行問題定位。

本示例場景中ACK集群一個名為K8s Product Cluster(生產環境),另一個名為K8s Stage Cluster(測試環境)。

image

前置說明

將K8s Product Cluster(生產環境)中的應用100%的訪問流量鏡像,到K8s Stage Cluster(測試環境)中對應的應用服務,即將所有訪問域名example.com的請求復制并轉發到example1.com

image

步驟一:測試環境中部署基礎應用

  1. 在K8s Stage Cluster(測試環境)中使用以下示例應用的YAML內容,創建名為my-nginx.yaml文件。

    說明

    K8s Stage Cluster(測試環境)作為復制流量的接收方,只部署接收流量的應用服務,不用做任何配置修改。

    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. 執行以下命令,部署示例應用my-nginx。

    kubectl apply -f my-nginx.yaml
  3. 執行以下命令,查看該應用的Ingress配置。

    kubectl get ing nginx-ingress

    預期輸出:

    NAME            HOSTS         ADDRESS      PORTS       AGE                                                         
    nginx-ingress   example1.com  47.**.**.53   80          8m
  4. 域名解析后,執行以下命令,測試訪問應用域名。

    curl http://example1.com

步驟二:生產環境中配置流量復制

說明

在K8s Product Cluster(生產環境)部署應用服務后,需要在Ingress中添加流量鏡像的注釋。

  1. 在K8s Product Cluster(生產環境)中使用以下示例應用的YAML內容,創建名為my-nginx.yaml文件。

    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. 執行以下命令,部署示例應用my-nginx。

    kubectl apply -f my-nginx.yaml
  3. 使用以下示例Ingress的YAML內容,創建名為my-ingress.yaml文件。

    • 配置nginx.ingress.kubernetes.io/mirror-target,指向在K8s Stage Cluster(測試環境集群)步驟3中獲取的ADDRESS。僅適用于HTTP或HTTPS協議,更多詳情請參見ingress-nginx_mirror

    • 配置nginx.ingress.kubernetes.io/mirror-host指向在K8s Stage Cluster(測試環境集群)步驟3中獲取的HOSTS

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: nginx-ingress
      annotations:
        nginx.ingress.kubernetes.io/mirror-target: "http://47.**.**.53$request_uri"  #指定鏡像請求的目標后端地址。
        nginx.ingress.kubernetes.io/mirror-request-body: "off"            # 關閉將請求體(request body)發送到鏡像目標后端,如果需要請求體去掉此注釋即可。
        nginx.ingress.kubernetes.io/mirror-host: "example1.com"           # 設置流量鏡像請求的Host頭。
    spec:
      rules:
      - host: example.com
        http: 
          paths:
          - path: /
            backend:
              service: 
                name: nginx-service
                port:
                  number: 80
            pathType: ImplementationSpecific
  4. 執行以下命令,部署示例鏡像Ingress。

    kubectl apply -f my-ingress.yaml
  5. 執行以下命令,查看該應用的Ingress配置。

    kubectl get ing nginx-ingress

    預期輸出:

    NAME            HOSTS          ADDRESS        PORTS     AGE                                                       
    nginx-ingress   example.com   39.**.**.54   80        1m
  6. 執行以下命令,測試訪問應用域名。

    curl http://example.com

結果驗證

訪問K8s Product Cluster(生產環境)中的應用域名example.com。通過執行以下命令,可以看到每次請求該域名時,都會生成一個相同的請求并轉發到K8s Stage Cluster(測試環境)中對應的服務。

kubectl -n kube-system logs --tail=0 -f nginx-ingress-controller-674c96ffbc-9mc8n

流量復制結果驗證