Nginx Ingress 支持通过流量复制,将集群中的流量复制到其他集群中,常用于仿真测试或压力测试。本文为您介绍如何使用 Nginx Ingress 配置流量复制。
Nginx Ingress 的流量复制功能,也被称作请求复制或流量镜像,是一种将集群中的请求流量复制到多个目标集群的能力。支持多种应用场景,包括:
说明
【邀测·申请试用】:ingress-nginx 组件的 v1.8.4-vke.1 版本目前处于邀测阶段,如需使用,请提交申请。
在集群 A 中部署旧版本的应用和服务。操作步骤如下:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-old spec: replicas: 1 selector: matchLabels: app: nginx-old template: metadata: labels: app: nginx-old spec: containers: - name: nginx image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v2.0 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: service-old spec: selector: app: nginx-old ports: - name: rule protocol: TCP port: 80 targetPort: 80 type: NodePort
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-old # 路由规则的名称 spec: ingressClassName: nginx # 指定 Ingress Controller rules: - host: example.com # 需要对外提供访问的域名 http: paths: - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配) path: / # 请求匹配的路径 backend: service: name: service-old # 需要对接的服务名称 port: number: 80 # 需要对接服务的端口号
<EXTERNAL_IP>
为 Nginx Ingress 对外暴露的 IP 地址。curl -H "Host: example.com" http://<EXTERNAL_IP>
预期结果如下,访问到了后端旧版本的应用。
This is the old version of nginx
在集群 B 中部署新版本的应用和服务。操作步骤如下:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-new spec: replicas: 1 selector: matchLabels: app: nginx-new template: metadata: labels: app: nginx-new spec: containers: - name: nginx image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v3.0 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: service-new spec: selector: app: nginx-new ports: - name: rule protocol: TCP port: 80 targetPort: 80 type: NodePort
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-new # 路由规则的名称 spec: ingressClassName: nginx # 指定 Ingress Controller rules: - host: example1.com # 需要对外提供访问的域名 http: paths: - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配) path: / # 请求匹配的路径 backend: service: name: service-new # 需要对接的服务名称 port: number: 80 # 需要对接服务的端口号
<EXTERNAL_IP>
为 Nginx Ingress 对外暴露的 IP 地址。curl -H "Host: example1.com" http://<EXTERNAL_IP>
预期结果如下,访问到了后端新版本的应用。
This is the new version of nginx
说明
为了将集群 A(生产集群)上访问旧应用的流量,全部复制到集群 B(测试集群)上,需要在集群 A 上配置流量复制功能。操作步骤如下:
kubectl edit ingress ingress-old
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-old annotations: nginx.ingress.kubernetes.io/mirror-host: example1.com # 流量复制目标域名 nginx.ingress.kubernetes.io/mirror-target: http://14.xxx.xxx.xxx # 跨集群场景时,填写对应 Nginx Ingress 的 VIP。同集群场景时,填写 service spec: ingressClassName: nginx rules: - host: example.com http: paths: - pathType: Prefix path: / backend: service: name: service-old port: number: 80
说明
Nginx Ingress 流量复制功能的更多配置详情,请参见 官方文档。
request: "GET /_mirror-30b2558b-5eab-42eb-8ffc-9c128a703479 HTTP/1.1
。