网站首页 > 技术教程 正文
摘要: 本文主要跟大家分享下如何在阿里云容器服务不同K8S集群内进行应用的流量复制
仿真测试
通常在系统进行重大重构或者发布新功能时,我们都需要进行压测以事先评估新系统的承载能力,传统情况下我们一般会在线下环境来模拟线上各种测试数据来对新系统进行测试,但是这种方式往往并不能有效地模拟出线上真实的访问量,尤其是模拟出正常流量中混杂着各色的异常流量,针对这种情况我们可以通过将线上的应用流量复制到指定的线下环境来对新系统进行仿真测试;另外一种情况假若我们线上系统遇到了性能瓶颈,但是又不能快速地定位出问题点,我们同样可以采用流量复制的方式来将应用的真实流量引导到线下环境来进行定位。下面主要跟大家分享下如何在阿里云容器服务不同K8S集群内进行应用的流量复制:
部署基础应用
这里假设您已经在阿里云容器服务控制台申请了两个不同的K8S集群(暂定一个为K8S Product Cluster,一个为K8S Stage Cluster)。
一、在K8S Product Cluster中部署一个应用,并通过Ingress来对外暴露服务访问:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: # 当前配置为老版本镜像 - image: registry.cn-hangzhou.aliyuncs.com/xianlu/old-nginx 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: extensions/v1beta1 kind: Ingress metadata: name: nginx-ingress spec: rules: # 这里配置使用了集群默认域名(您也可以使用自定义域名并作DNS解析) - host: nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com http: paths: - path: / backend: serviceName: nginx-service servicePort: 80
二、部署完成后可通过如下命令测试访问:
# 查看该应用的ingress配置 kubectl get ing nginx-ingress NAME HOSTS ADDRESS PORTS AGE nginx-ingress nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com 47.110.199.44 80 8m # 测试访问应用域名 curl http://nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com old
三、在K8S Stage Cluster中部署一个相同应用,同样通过Ingress来对外暴露服务访问:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: # 当前配置为新版本镜像 - image: registry.cn-hangzhou.aliyuncs.com/xianlu/new-nginx 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: extensions/v1beta1 kind: Ingress metadata: name: nginx-ingress spec: rules: # 这里配置使用了集群默认域名(您也可以使用自定义域名并作DNS解析) - host: nginx.c41eb6ca34a3e49f7aea63b8bc9e8ad98.cn-beijing.alicontainer.com http: paths: - path: / backend: serviceName: nginx-service servicePort: 80
四、部署完成后可通过如下命令测试访问:
# 查看该应用的ingress配置 kubectl get ing nginx-ingress NAME HOSTS ADDRESS PORTS AGE nginx-ingress nginx.c41eb6ca34a3e49f7aea63b8bc9e8ad98.cn-beijing.alicontainer.com 39.106.233.1 80 1m # 测试访问应用域名 curl http://nginx.c41eb6ca34a3e49f7aea63b8bc9e8ad98.cn-beijing.alicontainer.com new
配置流量复制
这里假设我们希望将K8S Product Cluster中该应用 100% 的访问流量复制到K8S Stage Cluster中对应的应用服务上,即将所有访问域名nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com的请求复制转发一份到nginx.c41eb6ca34a3e49f7aea63b8bc9e8ad98.cn-beijing.alicontainer.com上:
说明:由于K8S Stage Cluster Ingress仅仅只作为复制流量的接收方,因此它不需要做任何配置修改,这里我们只需要在K8S Product Cluster Ingress上进行配置即可。
一、配置复制流量百分比和接收复制流量的应用域名
通过如下命令来修改K8S Ingress Controller的ConfigMap配置增加http-snippet配置片段,配置期望的复制流量百分比和接收复制流量的目标应用域名:
~ kubectl -n kube-system edit cm nginx-configuration
配置如下KV对:
http-snippet: | split_clients "$date_gmt" $mirror_servers { 100% nginx.c41eb6ca34a3e49f7aea63b8bc9e8ad98.cn-beijing.alicontainer.com; } # 配置说明: # 1. 流量百分比取值范围:(0, 100],百分比总和必须不大于100% # 2. 支持同时配置多个不同的复制流量接收目标应用
二、配置流量复制
这里我们通过configuration-snippet和server-snippet来修改源Ingress增加应用的流量复制配置(YAML参考如下):
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: nginx-ingress annotations: nginx.ingress.kubernetes.io/configuration-snippet: | mirror /mirror; nginx.ingress.kubernetes.io/server-snippet: | location = /mirror { internal; set $shadow_service_name "nginx-product-service"; proxy_set_header X-Shadow-Service $shadow_service_name; proxy_pass http://$mirror_servers$request_uri; } spec: rules: - host: nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com http: paths: - path: / backend: serviceName: nginx-service servicePort: 80
至此,基于K8S Ingress Controller的应用流量复制配置已经完成。
测试流量复制
这里我们尝试访问K8S Product Cluster中的应用域名nginx.c37bf6b77bded43669ba2fb67448b4146.cn-hangzhou.alicontainer.com,可以看到每次请求K8S Product Cluster中的Ingress应用域名时,其都将复制一份同样的请求转发到K8S Stage Cluster中对应的应用服务中:
同时,由于前面我们在流量复制配置中配置了proxy_set_header X-Shadow-Service $shadow_service_name,因此在K8S Stage Cluster目标应用接收的请求中,都会携带一个X-Shadow-Service头来指明该镜像流量来源于哪个线上应用。
作者: chenqz
猜你喜欢
- 2024-10-14 白话解析:一致性哈希算法 consistent hashing
- 2024-10-02 如何用nginx反向代理处理rabbitMQ的特殊字符问题?
- 2024-10-02 通过移除 Nginx,Raygun 公司怎样将 TPS 提高了 44%?
- 2024-10-02 架构师分享 提升Nginx SSL/HTTPS性能的7条建议
- 2024-10-02 每日学点---nginx变量使用方法详解(8)
- 2024-10-02 nginx运维小纪(nginx yum)
- 2024-10-02 记一次服务Full GC背后的内存泄漏问题,真是匪夷所思
- 2024-10-02 nginx移动端%23兼容#配置(nginx区分移动端和pc端)
你 发表评论:
欢迎- 最近发表
-
- 阿里P8大佬总结的Nacos入门笔记,从安装到进阶小白也能轻松学会
- Linux环境下,Jmeter压力测试的搭建及报错解决方法
- Java 在Word中合并单元格时删除重复值
- 解压缩软件哪个好用?4款大多数人常用的软件~
- Hadoop高可用集群搭建及API调用(hadoop3高可用)
- lombok注解@Data没有toString和getter、setter问题
- Apache Felix介绍(apache fineract)
- Spring Boot官方推荐的Docker镜像编译方式-分层jar包
- Gradle 使用手册(gradle详细教程)
- 字节二面:为什么SpringBoot的 jar可以直接运行?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)