聊聊如何利用ingress-nginx实现应用层容灾

news/2024/11/15 16:02:25/文章来源:https://www.cnblogs.com/linyb-geek/p/18153505

前言

容灾是一种主动的风险管理策略,旨在通过构建和维护异地的冗余系统,确保在面临灾难性事件时,关键业务能够持续运作,数据能够得到保护,从而最大限度地减少对组织运营的影响和潜在经济损失。因此容灾的重要性不言而喻,今天的话题主要是聊下如何利用ingress-nginx实现应用层容灾

应用层容灾前提

1、冗余多套应用
2、应用无状态
3、同种应用最好能分区域部署

如何利用ingress-nginx实现

1、利用ingress-nginx的灰度发布能力

该方案的实现可以参考我之前写的文章聊聊部署在不同K8S集群上的服务如何利用nginx-ingress进行灰度发布

不过该方案有个缺点是手动挡,出现故障时,需要手动切换

2、利用default-backend

上述官方说明的核心表述如下

注解 说明
nginx.ingress.kubernetes.io/default-backend 容灾服务。当Ingress定义的服务没有可用节点时,请求会自动转发该容灾服务。
nginx.ingress.kubernetes.io/custom-http-errors 该注解和default-backend一起工作。当后端服务返回指定HTTP响应码,原始请求会被再次转发至容灾服务。注意:转发至容灾服务时,请求的Path会被重写为/,该行为与ingress-nginx保持一致

示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:nginx.ingress.kubernetes.io/default-backend: lybgeek-backupname: lybgeek-ingressnamespace: lybgeek
spec:rules:- host: lybgeek.comhttp:paths:- backend:service:name: lybgeek-masterport:number: 8001path: /pathType: Prefix

注: lybgeek-backup需要和lybgeek-master处于同个命名空间下。其次上文说了同个级别的应用应该是分区域部署的,因此 lybgeek-backup背后的pod应该是来自其他集群。那要如何实现呢

这边提供两种思路,一种部署nginx-pod应用,该nginx-pod和lybgeek-master归属同个命名空间,通过该nginx-pod的nginx.conf配置要转发其他集群pod,最后该nginx-pod通过label和lybgeek-backup绑定一起。另外一种是使用endpoint。通过创建endpoint,同时需要创建同名service并且selector为空,可以用来引用集群外的ip,当然也可以引用集群内的ip

创建endpoint示例配置

apiVersion: v1
kind: Endpoints
metadata:name:  lybgeek-backupnamespace: lybgeek
subsets:
- addresses:- ip: 192.168.1.2- ip: 192.168.1.3ports:- port: 80---apiVersion: v1
kind: Service
metadata:name: lybgeek-backupnamespace: lybgeek-backup
spec:type: ClusterIPports:- port: 80

总结

利用以上2种方式,就可以实现一个简易版的应用层容灾,实际上的容灾远比上述的复杂,因为可能还涉及到数据备份同步等,不过利用k8s确实能减轻我们实现层面上的一些负担

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

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

相关文章

一个超全的go工具库Lancet

文档官网 https://www.golancet.cn 安装 使用 go1.18 及以上版本的用户,建议安装 v2.x.x。 因为 v2.x.x 应用 go1.18 的泛型重写了大部分函数。 go get github.com/duke-git/lancet/v2使用 go1.18 以下版本的用户,必须安装 v1.x.x。目前最新的 v1 版本是 v1.4.1。 go get git…

SHELL之变量

一、脚本 1、shell组成 #!脚本声明(使用哪种解释器) # 注释信息 脚本内容注意: 如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题,所以可以使用: #!/bin/env 解释器 #!/bin/env bash2、执行脚本方式 sh -x 脚本文件路径 source 脚…

NSSCFT [SWPUCTF 2022 新生赛]ez_ez_php

NSSCFT [SWPUCTF 2022 新生赛]ez_ez_php进入之后就看见一段php代码,那就直接开始代码审计<?php error_reporting(0); if (isset($_GET[file])) {if ( substr($_GET["file"], 0, 3) === "php" ) {//截取字符串前三个字符,并与php做判断echo "Nic…

同一工程中的低复位

mark: 低复位和高复位在同一工程中一定要吻合。

序列容器

序列容器 序列容器以线性序列的方式存储元素。它没有对元素进行排序,元素的顺序和存储它们的顺序相同。5 种标准的序列容器,每种容器都具有不同的特性:array<T,N> (数组容器) :长度固定的序列,有 N 个 T 类型的对象,不能增加或删除元素。 vector<T> (向量容器…

Antd-React-TreeSelect前端搜索过滤

Antd-React-TreeSelect前端搜索过滤,antd本事是带有搜索的功能,但是在开发过程中发现自带的搜索功能与我们要使用的搜索过滤还是差了好多,在一些时候搜索为了迎合需要不得不这么操作,那么该操作结合了antd官方的搜索操作,因而在看了网上的一些操作后还是与需求不符合,最后…

方法的三种调用形式

在《可以调用Null的实例方法吗?》一文中,我谈到.NET方法的三种调用形式,现在我们就来着重聊聊这个话题。具体来说,这里所谓的三种方法调用形式对应着三种IL指令:Call、CallVirt和Calli。在《可以调用Null的实例方法吗?》一文中,我谈到.NET方法的三种调用形式,现在我们就…

关于隐藏Selenium绕过检测

. 浏览器指纹识别:网站通常通过浏览器指纹识别来检测访问者的身份。浏览器指纹是浏览器在访问网站时提供的一组信息,包括浏览器类型、版本、插件、用户代理字符串、屏幕分辨率、语言设置、操作系统等。 当你使用 Selenium 或其他自动化工具时,某些指纹信息可能会暴露自动化工…

依赖倒置原则

一、前言 依赖倒置原则也称依赖倒转原则(Dependence Inversion Principle) 看官方定义 高层模块不应该依赖底层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒置的中心思想是面向接口编程 如果你了解点设计模式,应该理解上面的话,但是如果不了解…

常见温升测试方法

常见温升测试方法 温升测试是电器产品安规测试项目之一,是为了检测电器产品及部件的温度变化情况,判断是否符合要求。在设备运行过程中会释放一定的热量,如果内部温度过高会影响产品的性能和稳定性,导致绝缘性能下降,因此温升测试是确保产品稳定运行的重要步骤。那么如何进…

当代码遇上诈骗,开发者该何去何从?

大家好,我是晓凡。 不知道大家最近有没有刷到这样一则消息:知名开源工具 Aria 的开发者删库跑路。 是的,你没听错,这不是段子,这是真事儿! 一言不合就删库? 这事儿得从一条令人震惊的提交记录说起。开发者留下的话,简直比冬天的北风还要刺骨:“因为自己的开源项目被诈…