K8S Nginx Ingress实现金丝雀发布

通过给 Ingress 资源指定 Nginx Ingress 所支持的 annotation 可实现金丝雀发布。

需给服务创建2个 Ingress,其中1个常规 Ingress另1个为带 nginx.ingress.kubernetes.io/canary: "true" 固定的 annotation 的 Ingress,称为 Canary Ingress。

Canary Ingress 一般代表新版本的服务,结合另外针对流量切分策略的 annotation 一起配置即可实现多种场景的金丝雀发布。

以下为相关 annotation 的详细介绍:

  • nginx.ingress.kubernetes.io/canary-by-header
    表示如果请求头中包含指定的 header 名称,并且值为 always,就将该请求转发给该 Ingress 定义的对应后端服务。如果值为 never 则不转发,可以用于回滚到旧版。如果为其他值则忽略该 annotation。

  • nginx.ingress.kubernetes.io/canary-by-header-value
    该 annotation 可以作为 canary-by-header 的补充,可指定请求头为自定义值,包含但不限于 always 或 never。当请求头的值命中指定的自定义值时,请求将会转发给该 Ingress 定义的对应后端服务,如果是其它值则忽略该 annotation。

  • nginx.ingress.kubernetes.io/canary-by-header-pattern
    与 canary-by-header-value 类似,区别为该 annotation 用正则表达式匹配请求头的值,而不是只固定某一个值。如果该 annotation 与 canary-by-header-value 同时存在,该 annotation 将被忽略。

  • nginx.ingress.kubernetes.io/canary-by-cookie
    与 canary-by-header 类似,该 annotation 用于 cookie,仅支持 always 和 never

  • nginx.ingress.kubernetes.io/canary-weight
    表示 Canary Ingress 所分配流量的比例的百分比,取值范围 [0-100]。例如,设置为10,则表示分配10%的流量给 Canary Ingress 对应的后端服务。

一、部署蓝环境版本服务

1、ConfigMap

kind: ConfigMap
apiVersion: v1
metadata:name: nginx-blue-config
data:nginx.conf: |-worker_processes  1;events {accept_mutex on;multi_accept on;use epoll;worker_connections  1024;}http {ignore_invalid_headers off;server {listen 80;location / {access_by_lua 'local header_str = ngx.say("blue")';}}}

2、Deployment

kind: Deployment
apiVersion: apps/v1
metadata:name: nginx-bluelabels:dce.daocloud.io/app: nginx-blueannotations:dce.daocloud.io/last-replicas: '1'deployment.kubernetes.io/revision: '3'kubernetes.io/change-cause: update YAML
spec:replicas: 1selector:matchLabels:dce.daocloud.io/component: nginx-bluetemplate:metadata:name: nginx-bluelabels:dce.daocloud.io/app: nginx-bluedce.daocloud.io/component: nginx-blueannotations:dce.daocloud.io/parcel.egress.burst: '0'dce.daocloud.io/parcel.egress.rate: '0'dce.daocloud.io/parcel.ingress.burst: '0'dce.daocloud.io/parcel.ingress.rate: '0'dce.daocloud.io/parcel.net.type: calicospec:volumes:- name: nginx-blue-configconfigMap:name: nginx-blue-configdefaultMode: 420containers:- name: nginx-blueimage: 'x.x.x.x/library/openresty:1.19.9.1-sw-r4'resources:limits:cpu: 500mmemory: '314572800'requests:cpu: 200mmemory: '314572800'volumeMounts:- name: nginx-blue-configmountPath: /etc/nginx/nginx.confsubPath: nginx.conf

3、Service

kind: Service
apiVersion: v1
metadata:name: nginx-blue-defaultlabels:dce.daocloud.io/app: nginx-blueannotations:io.daocloud.dce.serviceSelectorType: service
spec:ports:- name: nginx-nginx-default-80680-80protocol: TCPport: 80targetPort: 80nodePort: 31046selector:dce.daocloud.io/component: nginx-blueclusterIP: 172.31.69.137type: NodePortsessionAffinity: NoneexternalTrafficPolicy: Cluster

4、修改pod内容

cd /usr/local/openresty/nginx/html/ls
50x.html  index.htmlecho "Hello Blue" > index.htmlcat index.html 
Hello Blue

二、部署绿环境版本服务

1、ConfigMap

kind: ConfigMap
apiVersion: v1
metadata:name: nginx-green-config
data:nginx.conf: |-worker_processes  1;events {accept_mutex on;multi_accept on;use epoll;worker_connections  1024;}http {ignore_invalid_headers off;server {listen 80;location / {access_by_lua 'local header_str = ngx.say("green")';}}}

2、Deployment

kind: Deployment
apiVersion: apps/v1
metadata:name: nginx-greenlabels:dce.daocloud.io/app: nginx-greenannotations:deployment.kubernetes.io/revision: '5'kubernetes.io/change-cause: update YAML
spec:replicas: 1selector:matchLabels:dce.daocloud.io/component: nginx-greentemplate:metadata:name: nginx-greenlabels:dce.daocloud.io/app: nginx-greendce.daocloud.io/component: nginx-greenenv: greenannotations:dce.daocloud.io/parcel.egress.burst: '0'dce.daocloud.io/parcel.egress.rate: '0'dce.daocloud.io/parcel.ingress.burst: '0'dce.daocloud.io/parcel.ingress.rate: '0'dce.daocloud.io/parcel.net.type: calicodce.daocloud.io/parcel.net.value: default-ipv4-ippoolspec:volumes:- name: nginx-green-configconfigMap:name: nginx-green-configdefaultMode: 420containers:- name: nginx-greenimage: 'x.x.x.x/library/openresty:1.19.9.1-sw-r4'resources:limits:cpu: 500mmemory: '314572800'requests:cpu: 200mmemory: '314572800'volumeMounts:- name: nginx-green-configmountPath: /etc/nginx/nginx.confsubPath: nginx.conf

3、Service

kind: Service
apiVersion: v1
metadata:name: nginx-green-defaultlabels:dce.daocloud.io/app: nginx-greenannotations:io.daocloud.dce.serviceSelectorType: service
spec:ports:- name: nginx-nginx-default-15833-80protocol: TCPport: 80targetPort: 80nodePort: 35218selector:dce.daocloud.io/component: nginx-greenclusterIP: 172.31.207.22type: NodePortsessionAffinity: NoneexternalTrafficPolicy: Cluster

 4、修改pod内容

cd /usr/local/openresty/nginx/html/ls
50x.html  index.htmlecho "Hello Green" > index.htmlcat index.html 
Hello Green

三、设置Ingress

1、blue环境Ingress

kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:name: nginx-blue-ingresslabels:dce.daocloud.io/app: nginx-blueannotations:nginx.ingress.kubernetes.io/use-port-in-redirects: 'true'
spec:rules:- host: nginx.ms-sit.xxxxxx.nethttp:paths:- path: /pathType: ImplementationSpecificbackend:serviceName: nginx-blue-defaultservicePort: 80

2、green环境Ingress

kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:name: nginx-green-ingresslabels:dce.daocloud.io/app: nginx-greenannotations:kubernetes.io/ingress.class: nginxnginx.ingress.kubernetes.io/canary: 'true'nginx.ingress.kubernetes.io/canary-by-header: envnginx.ingress.kubernetes.io/canary-by-header-pattern: green
spec:rules:- host: nginx.ms-sit.xxxxxx.nethttp:paths:- path: /pathType: ImplementationSpecificbackend:serviceName: nginx-green-defaultservicePort: 80

四、测试

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美团 Flink 资源调度优化实践

摘要:本文整理自美团数据平台计算引擎组工程师冯斐,在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分: 相关背景和问题解决思路分析资源调度优化实践后续规划 点击查看原文视频 & 演讲PPT 一、相关背景和问题 在…

【Spring Boot】使用XML配置文件实现数据库操作(一)

使用XML配置文件实现数据库操作(一) 1.SQL映射文件 SQL映射文件就是我们通常说的mapper.xml配置文件,主要实现SQL语句的配置和映射,同时实现Java的POJO对象与数据库中的表和字段进行映射关联的功能。 1.1 mapper.xml的结构 下…

100天精通Python(可视化篇)——第99天:Pyecharts绘制多种炫酷K线图参数说明+代码实战

文章目录 专栏导读一、K线图介绍1. 说明2. 应用场景 二、配置说明三、K线图实战1. 普通k线图2. 添加辅助线3. k线图鼠标缩放4. 添加数据缩放滑块5. K线周期图表 书籍推荐 专栏导读 🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专…

Unity中Shader的混合模式Blend

文章目录 前言一、混合的作用就是实现各种半透明效果二、混合操作三、在 Shader 中暴露两个属性 来调节 混合的效果 前言 Unity中Shader的混合模式Blend 一、混合的作用就是实现各种半透明效果 这里用PS里的混合作为例子 没选择混合效果前,显示的效果是这样 选择…

基于 Zookeeper 实现服务注册和服务发现

文章目录 前言声明前置知识服务注册和发现Zookeeper 工作原理实现过程注册中心服务注册服务发现 总结 前言 无论是采用SOA还是微服务架构,都需要使用服务注册和服务发现组件。我刚开始接触 Dubbo 时一直对服务注册/发现以及 Zookeeper 的作用感到困惑,现…

React 18 对 state 进行保留和重置

参考文章 对 state 进行保留和重置 各个组件的 state 是各自独立的。根据组件在 UI 树中的位置,React 可以跟踪哪些 state 属于哪个组件。可以控制在重新渲染过程中何时对 state 进行保留和重置。 UI 树 浏览器使用许多树形结构来为 UI 建立模型。DOM 用于表示 …

解决Linux Ubuntu上安装RabbitMQ服务后的公网远程访问问题,借助cpolar内网穿透技术

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…

软件产品确认测试鉴定测试

软件产品确认测试 确认测试也称鉴定测试,即验证软件的功能、性能及其它特性是否与用户的要求一致。软件确认测试是在模拟的环境下,验证软件是否满足需求规格说明书列出的需求。为此,需要首先制定测试计划,规定要做测试的种类&…

Pinely Round 2 (Div. 1 + Div. 2) F. Divide, XOR, and Conquer(区间dp)

题目 给定长为n(n<1e4)的数组&#xff0c;第i个数为ai(0<ai<2的60次方) 初始时&#xff0c;区间为[1,n]&#xff0c;也即l1&#xff0c;rn&#xff0c; 你可以在[l,r)中指定一个k&#xff0c;将区间分成左半边[l,k]、右半边[k1,r] 1. 如果左半边异或和与异或和的异…

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测 目录 分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测分类效果基本介绍模型描述预测过程程序设计参考资料分类效果 基本介绍 MATLAB实现GRNN广义回归神经网络多特

自建音乐服务器Navidrome之一

这里写自定义目录标题 1.1 官方网站 2. Navidrome 简介2.1 简介2.2 特性 3. 准备工作4. 视频教程5. 界面演示5.1 初始化页5.2 专辑页 前言 之前给大家介绍过 Koel 音频流服务&#xff0c;就是为了解决大家的这个问题&#xff1a;下载下来的音乐&#xff0c;只能在本机欣赏&…

「Redis」1. 数据类型的底层实现

前言&#xff1a;在这篇博文中&#xff0c;我们将简单总结在面试中怎么回答Redis数据类型的底层实现。 因为面试时间就那么点&#xff0c;言简意赅的描述自己会的知识显得尤为重要‼️ 文章目录 0.1. String 的底层实现原理0.2. 列表的底层实现原理0.3. 字典的底层实现原理0.4.…

​放弃数据库,改用Kafka!

长期以来&#xff0c;数据库一直充当着记录系统&#xff0c;它们以可靠且持久的方式存储和管理关键数据&#xff0c;也赢得了大多数公司的信赖。 但时代在变。许多新兴趋势正在影响当今数据的存储和管理方式&#xff0c;不得不让一些技术决策者们重新考虑数据存储究竟还有哪些…

敏感接口权限校验

前端校验 &#xff08;从前端或者从token里面拿一下&#xff09;&#xff0c;看一下用户有没有这个页面的权限&#xff08;但是一般不用&#xff0c;因为nodejs也可以写后端&#xff0c;但是放到前端去校验不安全&#xff09; 后端校验 需要梳理敏感数据接口&#xff0c;将这…

重写 UGUI

重写Button using UnityEngine; using UnityEngine.UI; public class MyButton : Button {[SerializeField] private int _newNumber; }using UnityEditor;//编辑器类在UnityEditor命名空间下。所以当使用C#脚本时&#xff0c;你需要在脚本前面加上 "using UnityEditor&q…

Hive-安装与配置(1)

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

微信小程序修改vant组件样式

1 背景 在使用vant组件开发微信小程序的时候&#xff0c;想更改vant组件内部样式&#xff0c;达到自己想要的目的&#xff08;van-grid组件改成宫格背景色为透明&#xff0c;默认为白色&#xff09;&#xff0c;官网没有示例&#xff0c;通过以下几步修改成功。 2 步骤 2.1 …

随机森林算法

介绍 随机森林是一种基于集成学习的有监督机器学习算法。随机森林是包含多个决策树的分类器&#xff0c;一般输出的类别是由决策树的众数决定。随机森林也可以用于常见的回归拟合。随机森林主要是运用了两种思想。具体如下所示。 Breimans的Bootstrap aggregatingHo的random …

重装系统全流程

重点&#xff1a; 下载镜像网址&#xff1a;下载 Windows 10 (microsoft.com) 不过不用下载&#xff0c;你的美均相U盘里面有下载好的Win10系统 重点注意&#xff0c;重启后拔优盘&#xff0c;安装时不要联网

PID串行多闭环控制与并行多闭环控制的优缺点分析和应用比较

导言&#xff1a; 在自动控制领域&#xff0c;PID控制器是一种经典的控制策略&#xff0c;被广泛应用于各种工业和非工业过程。随着控制系统的复杂性增加&#xff0c;PID串行多闭环控制和PID并行多闭环控制成为解决复杂控制问题的重要方法。本文将从优点和缺点的角度对这两种控…