# 为Nginx Ingress配置应用流量镜像
Nginx Ingress支持在不同集群内进行流量镜像（Traffic Mirror），将访问请求复制一份路由到镜像后端，但会忽略镜像后端的返回值，因此不会对原有请求造成影响，可用于系统的仿真测试和问题定位。本文介绍如何使用Nginx Ingress进行不同集群应用间的流量镜像。
图1流量镜像   
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000001873166157.png)
#### 准备工作
- 已创建2个CCE Standard集群cluster-1和cluster-2，详情请参见[购买Standard/Turbo集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0028.html)。
- 两个集群中均已安装[NGINX Ingress控制器](https://support.huaweicloud.com/usermanual-cce/cce_10_0034.html)。
- 已安装和配置kubectl分别连接两个集群，详情请参见[通过kubectl对接多个集群](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_00254.html)。
 
#### 步骤1：创建工作负载，并通过Ingress对外暴露服务
1. 在cluster-1集群中部署应用，并测试访问。 
   复制以下文件保存到nginx-deploy.yaml文件。
   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     labels:
       version: v1
     name: nginx
     namespace: default
   spec:
     selector:
       matchLabels:
         app: nginx
         version: v1
     template:
       metadata:
         labels:
           app: nginx
           version: v1
       spec:
         containers:
           - name: container-1
             image: nginx:latest
             imagePullPolicy: IfNotPresent
         terminationGracePeriodSeconds: 30
         dnsPolicy: ClusterFirst
     replicas: 1
   ---
   apiVersion: v1
   kind: Service
   metadata:
     name: nginx
     labels:
       app: nginx
     namespace: default
   spec:
     selector:
       app: nginx
     externalTrafficPolicy: Cluster
     ports:
       - name: cce-service-0
         targetPort: 80
         port: 80
         protocol: TCP
     type: NodePort
   ---
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: nginx
     namespace: default
   spec:
     rules:
       - host: example.com
         http:
           paths:
             - path: /
               backend:
                 service:
                   name: nginx
                   port:
                     number: 80
               property:
                 ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
               pathType: ImplementationSpecific
     ingressClassName: nginx
   ```
   
   
2. 对cluster-1集群执行以下命令，创建工作负载。 
   ```
   kubectl apply -f nginx-deploy.yaml
   ```
   
   
3. 在cluster-2集群中部署相同的应用，重复执行以上命令，创建相同的工作负载。
 
#### 步骤2：配置流量复制
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
- cluster-2作为流量的接收方，不需要进行任何配置修改，只需要在cluster-1上配置即可。
- 在将cluster-1中应用的访问流量复制到cluster-2中对应的应用服务后，客户端只会收到cluster-1中的请求响应，cluster-2中的请求响应会被丢弃。
 
对cluster-1执行以下命令来配置流量镜像。更多关于Nginx Ingress流量镜像的配置请参考[Nginx Ingress Mirror](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#mirror)。
```
kubectl patch ingress nginx --type merge --patch '"metadata": {"annotations": {"nginx.ingress.kubernetes.io/mirror-target": "http://<cluster_2_ingress_ip_address>:80/", "nginx.ingress.kubernetes.io/mirror-host": "example.com"}}'
```
其中\<cluster_2_ingress_ip_address\>为cluster-2中Ingress负载均衡器的对外IP地址。
#### 结果验证
执行以下命令，访问cluster-1的应用域名example.com，进行结果验证：
```
curl http://<cluster_1_ingress_ip_address>:80/ -H "Host: example.com"
```
同时查看cluster-1中nginx-ingress controller的日志：
```
kubectl logs -f <cceaddon-nginx-ingress-controller_pod_name> -n kube-system
```
其中\<cceaddon-nginx-ingress-controller_pod_name\>为nginx-ingress controller的Pod名字。
从日志中可以看到每次请求cluster-1中ingress对应的域名时，都将其复制一份同样的请求转发到cluster-2中对应的服务中。
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000001826310400.png "点击放大")
