You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
Nginx Ingress
Nginx Ingress 配置流量复制
复制全文
下载 pdf
Nginx Ingress 配置流量复制
Nginx Ingress 支持通过流量复制,将集群中的流量复制到其他集群中,常用于仿真测试或压力测试。本文为您介绍如何使用 Nginx Ingress 配置流量复制。​
注意​
Nginx Ingress 功能即将下线,详情请参见 【产品公告】NGINX Ingress 停止维护公告。​
背景信息​
Nginx Ingress 的流量复制功能,也被称作请求复制或流量镜像,是一种将集群中的请求流量复制到多个目标集群的能力。支持多种应用场景,包括:​
  • 压力测试:当用户应用发布新版本时,可以将生产集群中的流量复制到测试集群,使用实际的流量对新版本应用进行压测。这种场景下,能够在不影响生产环境的情况下测试新版本应用的可用性和性能。​
  • 故障排查:当生产环境出现故障时,为了不影响生产环境的正常运行,可以将生产环境的流量复制到测试环境进行故障排查和处理。​
​alt​​
前提条件​
  • 已创建 2 个集群,本例中为方便描述,定义为集群 A 和集群 B。​
  • 已安装 ingress-nginx 组件,并升级至最新版本。​
在集群中部署业务​
在集群 A 中部署业务​
在集群 A 中部署旧版本的应用和服务。操作步骤如下:​
  1. 使用如下 YAML 配置,创建旧版本应用和服务。​
  • ​
    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​
    ​
  1. 使用如下 YAML 配置,创建 Nginx Ingress,并指向旧版本服务。​
  • ​
    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 # 需要对接服务的端口号​
    ​
  1. 执行以下命令,验证是否可以访问到旧版本服务。其中,<EXTERNAL_IP>为 Nginx Ingress 对外暴露的 IP 地址。​
  • ​
    curl -H "Host: example.com" http://<EXTERNAL_IP>​
    ​
  • 预期结果如下,访问到了后端旧版本的应用。​
  • ​
    This is the old version of nginx​
    ​
在集群 B 中部署业务​
在集群 B 中部署新版本的应用和服务。操作步骤如下:​
  1. 使用如下 YAML 配置,创建新版本的应用和服务。​
  • ​
    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​
    ​
  1. 使用如下 YAML 配置,创建 Nginx Ingress,并指向新版本服务。​
  • ​
    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 # 需要对接服务的端口号​
    ​
  1. 执行以下命令,验证是否可以访问到新版本服务。其中,<EXTERNAL_IP>为 Nginx Ingress 对外暴露的 IP 地址。​
  • ​
    curl -H "Host: example1.com" http://<EXTERNAL_IP>​
    ​
  • 预期结果如下,访问到了后端新版本的应用。​
  • ​
    This is the new version of nginx​
    ​
配置流量复制​
说明​
  • 集群 B(测试集群)作为镜像流量的接收方,无需配置额外的流量复制功能。仅在集群 A(生产集群)中配置流量复制功能即可。​
  • 流量由集群 A 复制到集群 B 后,客户端仅能接收到集群 A 客户端的请求响应。集群 B 的客户端请求响应会被丢弃。​
为了将集群 A(生产集群)上访问旧应用的流量,全部复制到集群 B(测试集群)上,需要在集群 A 上配置流量复制功能。操作步骤如下:​
  1. 使用 kubectl 连接生产集群 A。​
  1. 执行以下命令,编辑 Nginx-Ingress。​
  • ​
    kubectl edit ingress ingress-old​
    ​
  1. 在 Nginx Ingress 配置中添加流量复制功能的 Annotation。​
  • ​
    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 流量复制功能的更多配置详情,请参见 官方文档。​
结果验证​
  1. 查看集群 B 中,新版本应用的 ingress-nginx-controller 日志,可以看到转发 IP 是集群 A 的 IP 地址。​
  • ​alt​​
  1. 查询新版本应用的日志request: "GET /_mirror-30b2558b-5eab-42eb-8ffc-9c128a703479 HTTP/1.1。​
  • ​alt​​
  1. 旧版本的日志查询,调用正常,不影响线上调用。​
  • ​alt​​
  • ​alt​​
​
​
最近更新时间:2026.05.20 10:54:36
这个页面对您有帮助吗?
有用
有用
无用
无用