通过K8S Ingress Controller来实现应用的流量复制

摘要: 本文主要跟大家分享下如何在阿里云容器服务不同K8S集群内进行应用的流量复制

仿真测试

通常在系统进行重大重构或者发布新功能时,我们都需要进行压测以事先评估新系统的承载能力,传统情况下我们一般会在线下环境来模拟线上各种测试数据来对新系统进行测试,但是这种方式往往并不能有效地模拟出线上真实的访问量,尤其是模拟出正常流量中混杂着各色的异常流量,针对这种情况我们可以通过将线上的应用流量复制到指定的线下环境来对新系统进行仿真测试;另外一种情况假若我们线上系统遇到了性能瓶颈,但是又不能快速地定位出问题点,我们同样可以采用流量复制的方式来将应用的真实流量引导到线下环境来进行定位。下面主要跟大家分享下如何在 阿里云容器服务不同K8S集群内进行应用的流量复制:
8e1f08c232a0d0365702113d2064f2d9674.jpg

部署基础应用

这里假设您已经在 阿里云容器服务控制台申请了两个不同的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上:
image

说明:由于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中对应的应用服务中:

image

同时,由于前面我们在流量复制配置中配置了proxy_set_header X-Shadow-Service $shadow_service_name,因此在K8S Stage Cluster目标应用接收的请求中,都会携带一个X-Shadow-Service头来指明该镜像流量来源于哪个线上应用。

作者: chenqz
原文链接
本文为云栖社区原创内容,未经允许不得转载。 

转载于:https://my.oschina.net/yunqi/blog/2873525

weixin_33937913
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s nginx-ingress 流量复制
qq_19757081的博客
04-17 2992
配置ingress apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: field.cattle.io/creatorId: user-jg5xj field.cattle.io/ingressState: '{"YWFhLXB0bWluZC1jb20vZGVmYXVsdC9hYWEucHRtaW5kLmNvbS8vODA=":""}' field.cattle.io/publicEndpoi
k8s traefik2.4流量复制
qq_19757081的博客
04-21 364
安装ingress-route和traefik-service apiVersion: traefik.containo.us/v1alpha1 kind: TraefikService metadata: name: app-mirror spec: mirroring: name: nginxv1 # 发送 100% 的请求到 K8S 的 Service "v1" port: 80 mirrors: - name: nginxv2 # 然后复制
Kubenetes 中使用 Traefik 作为 Ingress 转发流量
啦啦啦啦 la
09-08 1291
Kubenetes 中使用 Traefik 作为 Ingress 转发流量 Ingress 就是 Kubernetes 机器外访问集群的入口,将请求的 URL 转发到不同的 Service 上,相当于 Nginx 等代理服务器 路由信息由 Ingress Controller 提供,Ingress Controller 可以理解为监视器,不断请求 Kubernetes API 实时感知 Servi...
通过 Ingress 进行灰度发布
zouyang920的博客
06-09 580
创建如下 YAML 文件(app-v1.yaml) 执行如下命令部署 Deployement V1 应用: 创建如下 Ingress YAML文件(ingress-v1.yaml) 执行如下命令部署 Ingress 资源 部署完成后通过 curl 命令进行测试: 会看到如下返回: 2、部署 Deployment V2 应用 创建如下 YAML 文件(app-v2.yaml) 执行如下命令部署 Deployement V2 应用: 3、按照权重策略灰度到 Deployment V2 应用 创建如下 Ingre
apisix-ingress-controller:K8的入口控制器
04-01
适用于Kubernetes的Apache APISIX 使用进行Kubernetes 。...使用具有最小学习曲线的k8s yaml结构,对具有自定义资源定义(CRD)的Apache APISIX进行声明式配置。 适用于Yaml期间的热重装。 本机Ku
K8S之ingress-controller-v1.1.2资源清单文件及镜像文件
03-21
原文链接:https://blog.csdn.net/m0_37814112/article/details/123423478
ingresscontroller.yaml
11-08
通过K8S的Ingress资源可以实现类似Nginx的基于域名访问,从而实现Pod的负载均衡访 问。
k8s.gcr.io-ingress-nginx-controller-v0.41.2.tar
02-08
k8s.gcr.io-ingress-nginx-controller-v0.41.2.tar
citrix-k8s-ingress-controller:适用于Kubernetes的Citrix ADC(NetScaler)入口控制器:
02-03
citrix-k8s-ingress-controller:适用于Kubernetes的Citrix ADC(NetScaler)入口控制器:
容器编排之战-k8s的部署
qq_46389566的博客
08-08 683
Kubernetes集群部署 一、Kubernetes集群部署方式 方式1. minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。 官方地址:https://kubernetes.io/docs/setup/minikube/ 方式2. kubeadm Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 官方地址:https
Docker 使用心得以及部署一个Mysql container
Sven
06-14 734
最近公司在使用Docker,确实是一个很好用的东西,就像集装箱一样,一层一层的堆叠,操作简单,实用性强,性能也特别好,玩法有很多,可以结合自己项目的实际情况来定制。   安装 Docker   方法可以在官网上看,www.docker.com在Ubuntu 14.x 以上版本是无缝安装: $ which curl $ sudo apt-get update $ sudo apt...
Ingress:集群进出流量的总管
最新发布
key_3_feng的博客
07-18 137
Ingress 只是规则的集合,自身不具备流量管理能力,需要 Ingress Controller 应用 Ingress 规则才能真正发挥作用。
【云原生】k8s Ingress 实现流量路由规则控制
DreamSun的博客
04-09 1740
在 Kubernetes 中,Ingress 是一个非常重要的概念。它可以将外部流量路由到 Kubernetes 集群内的不同服务。Ingress 可以让你更加方便地管理 HTTP 和 HTTPS 流量,并且可以配置负载均衡、SSL 证书等功能。本文将会介绍 Ingress 的定义、类型、更新、以及相关的控制器和类别。通常情况下,service 和 pod 的 IP 仅可在集群内部访问。
第十六部分 Istion控制 Ingress 流量
小郑的专栏
05-13 762
简介 在 Kubernetes 环境中,Kubernetes Ingress 资源 用于指定应在集群外部公开的服务。在 Istio 服务Mesh中,更好的方法(也适用于 Kubernetes 和其他环境)是使用不同的配置模型,即Istio Gateway 。Gateway允许Istio功能(例如,监控和路由规则)应用于进入集群的流量。 本文描述如何配置 Istio Ingress Gatewa...
Ingress资源
yuan_jiaoyoung的博客
03-02 255
下载慢可以去Github下载。
在Kubernetes平台上,应对不同场景外部流量引入集群,这3种工具改如何选择?
liukuan73的专栏
03-29 3874
https://mp.weixin.qq.com/s/wsURTN7eAng2HHofReBU3Q 作者:Sandeep Dinesh 翻译:狄卫华 原文:Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what? 原文链接:https://medium.com/google-clo
K8S-ingress
屈帅波的技术博客
09-29 525
概述:客户使用https进行访问,域名会被解析为IP,而这个IP是你调度器的IP地址,但是客户连接的是你后端节点真实服务器,如果你认为集群足够安全那么在调度器可以卸载ssl,客户和调度器之间使用https,而调度器和后端节点使用http,但是service的NodePort是基于iptables或者ipvs的4层调度转发,不支持ssl卸载,那么就需要在每一个提供服务的节点配置https的sll证...
kubeneters k8s 集群的ingress获取客户端真实IP地址
bee-factory
06-22 2600
本文基于rancher界面化操作 如果使用k8s方式 执行kubectl -n kube-system edit cm nginx-configuration 添加如下内容 compute-full-forwarded-for: "true" forwarded-for-header: "X-Forwarded-For" use-forwarded-headers: "true" 最后在业务程序获取使用x-Original-Forwarded-For。 ...
k8s ingress controller
04-11
k8s ingress controller是指Kubernetes中的一个组件,用于管理应用程序的入口流量。它可以配置应用程序路由规则、TLS证书、负载均衡等功能,使得应用程序可以通过单一入口来访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 爬取7160美女图片 33852
  • (转载)解决NVIDIA显卡驱动“没有找到兼容的图形硬件”的问题 20425
  • iOS:特殊符号大全 16287
  • jmeter接口测试报java.net.SocketException: Socket closed错误。 12728
  • js获取移动端设备信息(IMEM,IMIS,手机型号,系统版本,浏览器信息等) 12482

最新评论

  • Firefox经常会出现一些停顿

    weixin_38493633: 有什么解决办法吗

  • Linux下tomcat修改成的80端口无法访问

    xchener1230: 感谢 已解决

  • 爬虫不得不学之 JavaScript 入门篇

    绿蝴蝶: 后面内容呢?

  • 阿里云效是什么,阿里云效可以做什么

    云效DevOps平台: 使用云效体验一站式研发实现10 倍效能提升,阿里云云效,云原生时代新 DevOps 平台,支持公共云、专有云和混合云多种部署形态,云效通过云原生新技术和研发新模式,助力创新创业和数字化转型企业快速实现研发敏捷和组织敏捷,打造“双敏”组织,实现 10 倍效能提升。 立即体验:https://blog.csdn.net/BYvonne/article/details/121247259

  • jmeter接口测试报java.net.SocketException: Socket closed错误。

    jiangliuer_11: 请问解决了吗?

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Sessions, Window Stations and Desktops
  • 如何判断一个C++对象是否在堆栈上
  • 对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
2019年390篇
2018年700篇
2017年903篇
2016年533篇
2015年390篇
2014年311篇
2013年297篇
2012年258篇
2011年190篇
2010年144篇
2009年127篇
2008年107篇
2007年85篇
2006年52篇
2005年22篇
2004年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司自贡企业网站建设多少钱龙岗网站搜索优化公司天水外贸网站建设多少钱岳阳品牌网站设计哪家好朝阳网络广告推广价格珠海网络广告推广多少钱玉溪网络广告推广报价襄阳百度标王公司百色SEO按天计费楚雄建网站公司黔东南百搜标王黔南seo网站优化永新网站开发公司济宁如何制作网站公司襄阳网站优化推广阳泉网站seo优化报价长沙seo网站优化推荐潜江英文网站建设公司德州网站关键词优化光明关键词排名包年推广多少钱无锡SEO按效果付费报价梅州企业网站建设哪家好文山建站多少钱娄底百度竞价包年推广多少钱吉安高端网站设计哪家好池州关键词按天计费报价南充网站优化软件公司河源百度seo南宁模板网站建设价格莱芜模板推广哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化