当前位置: 首页 > news >正文

k8s中,ingress的实现原理,及其架构。

 

图片来源:自己画的

图片来源:k8s官网

首先,什么是ingress?

是服务还是控制器?

都不精确

ingress是一个api资源

service和deployment也是api资源。

这几个相互协作,组建成一个对外提供服务的架构。

ingress提供的作用是什么?

ingress资源的生成,系统会给ingress资源一个ip地址

这个ip地址下的不同路径,会定位到后端的不同服务

比如ingress资源的ip地址是192.168.1.3

那么客户端访问http://192.168.1.3/websvc_path

ingress资源会把这个请求

转发给后端一个服务

这个服务的名称为websvc  (举例,具体是在ingress资源文件中指定)

这个服务的端口号为6789  (举例,具体是在ingress资源文件中指定)

这个服务真实的提供者

是后端的pod,

这些pod监听着6789端口

这些pod与websvc服务绑定

如何绑定?

是通过服务资源文件中定义的selector标签选择器

而pod资源文件中给pod都加了这个标签

通过这个标签

服务能找到pod

这个叫服务的自动感知功能。

如果某个带有这个标签的pod删除了,

重新在别的节点上以别的ip产生了

拥有同样标签的pod

服务能自动感知到这个新的pod,

服务是如何感知到这个新的pod的?

这个就和服务的程序设计有关,

从开发代码的层面,

其核心是跟网络插件对于ip的管理

和数据库组件对于新pod 的信息的记录有关。

核心也是标签选择器。

-------------------------------------------------------------------------------

服务还有一个功能是负载均衡,

外部对于服务的请求,会分摊到后端的pod

如何实现的?

是通过kube-proxy组件

kube-proxy组件是如何实现负载均衡的?

是调用ipvs内核模块

也就是使用lvs进行负载均衡

------------------------------------------------------------

服务还有一个功能,是自动注册

就是把ip地址注册为域名

服务创建时,自动在内部dns上注册域名

域名格式为:

<服务名称>.<名称空间>.svc.cluster.local

-----------------------------------------------------------

说服务的目的是什么?跟ingress什么关系?

ingress的资源文件中

需要指定

把对于集群的某一个/path的访问

转发给后端的一个服务及其监听的端口

而这个后端的服务

是一个服务名

那么ingress怎么通过这个服务的名称

找到这个服务呢

就跟服务的自动注册有关系,

内部dns上,记录了这个服务的名称和ip的对应关系

所以ingress可以通过名称的方式找到后端的服务

---------------------------------------------------------------------------

ingress需要选择一个控制器,

nginx或者haproxy

一般用nginx的比较多

那么ingress怎么使用这个nginx来

进行负载均衡反向代理这些操作呢

就要通过选择ingressclass来实现

是选nginx?

还是选haproxy?

还是选别的?

要选择nginx

就要在ingress的资源文件中声明

ingressClassName: nginx

----------------------------------------------------------

那么,ingressclass

也就是ingress的类之一

nginx

这个nginx是从哪来的呢?

是在ingressclass的资源文件中

要在.spec的字段下

定义一个

controller: k8s.io/ingress-nginx

------------------------------------------------------------

这个ingressclass中定义了

名称为nginx的ingress的类

使用的控制器是k8s.io/ingress-nginx

这是一个标识符

实际上的控制器是ingress-nginx

------------------------------------------------------------

ingress-nginx这个控制器是以什么形态存在的?

是以pod的形态存在的

pod里面运行着实现控制器功能的容器

容器里面运行着实现控制器功能的进程

容器来自于docker镜像

镜像在部署k8s平台的时候

就需要部署在harbor仓库里

------------------------------------------------------------

ingress-nginx这个控制器的pod从哪来的?

是用deployment无状态控制器来实现的

deployment中定义了

ingress-nginx控制器的pod的容器模版

-------------------------------------------------------------

如何启动ingress-nginx这个控制器?

常用两种方式

1. Helm Chart方式,部署k8s集群的时候,就自动部署好了,也就是集群已经有这个ingress-nginx

2. yaml资源文件方式

ingress-nginx控制器要实现功能,需要有一个资源文件,这个资源文件里面有相关的service资源和deployment资源,也就是一个文件中有多个资源,来实现ingress-nginx控制器。说白了就是,service接收访问ingress-nginx控制器的请求,转发给后端的ingress-nginx的pod,这些pod同时由deployment进行自动部署、维护、扩容、滚动更新。

----------------------------------------------------------------

根本上来说,ingress-nginx控制器来源于

镜像文件,以及用镜像文件启动容器的时候,配置的一些启动参数

还有存放这个容器的pod中,配置的一些可选项

比如initcontainer 初始化容器

startupPorbe

livenessProbe

readinessProbe

这三个容器探针

还有

postStart

preStop

这两个事件处理函数,也叫钩子函数。

以镜像文件、

启动参数、

configMap注入配置文件

还有pod内的一系列要素

构建了ingress-nginx这个控制器的核心

通过service对ingress-nginx进行发布

让ingress在集群内能找到这个控制器

通过deployment对于ingress-nginx进行自动化部署和维护

包括扩容和滚动更新

这样,形成了一个ingress资源对外提供请求分发的功能

ingress自己本身由于有service来管理后端ingress-nginx的pod

所以自身也是负载均衡的

而且有deployment的存在

ingress资源本身的pod也是能自动部署和维护的

比如提供ingress服务的pod出错了

deployment会自动修复,部署新的

如果有必要的话,deployment里面的副本数量

写成2个3个以上,这样能更加保障

ingress资源本身的高可用,而且是自维护

ingress对流量进行分发之后

后端提供计算服务的,

比如web服务

也是可以利用同样的架构

service+pod+deployment的方式

实现负载均衡和高可用

---------------------------------------------------------------

在传统方式中,用到的lvs、nginx、keepalived

负载均衡和高可用技术。

在容器化环境中,

在k8s平台,

以kube-porxy调用ipvs

ingress调用nginx

deployment调用keepalived (不一定相同,但原理类似)

实现了负载均衡和高可用

----------------------------------------------------------------

而且在deployment的基础上

k8s提供了

HPA监理功能

HorizontalPodAutoscaling

水平 pod  自动 伸缩

deployment的扩缩容需要

管理员去手工scale

根据资源的使用量调整

而HPA可以自动根据pod的资源使用量

调整pod的数量

也就是自动扩缩容

管理员只需要提前配置好就行。

-----------------------------------------------------------------

这么来看,k8s对于容器化环境的

负载均衡、

高可用、

自动化部署(给个模版,自动创建pod)、

自动化维护(pod删掉了,自动新建)、

自动化调整服务器规模

(pod不够用了,自动扩容;

pod太多了,请求没那么多,自动缩容)

都设计的比较ok

------------------------------------------------------------------

从pod的监控方面来讲

pod中的

容器探针

钩子函数

初始化容器

包括利用临时卷

configMap

emptyDir

可以实现很多功能。

---------------------------------------------------------------

总的来说

k8s作为云原生时代的平台

也称为云原生时代的操作系统,

对于传统方式的容器化提供了很多功能。

资源利用率更高

服务的管理更加自动化。

安全性也比较高

相关文章:

k8s中,ingress的实现原理,及其架构。

图片来源&#xff1a;自己画的 图片来源&#xff1a;k8s官网 首先&#xff0c;什么是ingress? 是服务还是控制器&#xff1f; 都不精确 ingress是一个api资源 service和deployment也是api资源。 这几个相互协作&#xff0c;组建成一个对外提供服务的架构。 ingress提供的…...

【数据结构强化】应用题打卡

应用题打卡 数组的应用 对称矩阵的压缩存储 注意&#xff1a; 1. 2.上三角的行优先存储及下三角的列优先存储与数组的下表对应 上/下三角矩阵的压缩存储 注意&#xff1a; 上/下三角压缩存储是将0元素统一压缩存储&#xff0c;而不是将对角线元素统一压缩存储 三对角矩阵的…...

解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found

目录 前言1. 问题描述2. 问题分析3. 解决步骤3.1 检查 MySQL 服务文件3.2 备份旧的服务文件3.3 启动 MySQL 服务3.4 验证服务状态 4. 总结结语 前言 在日常使用 MySQL 数据库时&#xff0c;有时候可能会遇到服务无法正常启动的问题。这类问题通常出现在系统更新或者服务配置文…...

Dubbo和Http的调用有什么区别

背景 我们在项目开发中&#xff0c;需要进行调用外部接口时&#xff0c;往往使用Dubbo和Http方式都能实现远程调用。那么他们在使用上&#xff0c;有什么区别呢&#xff1f; 定位不同 一个是分布式环境下的框架&#xff0c;一个是通信协议。 Dubbo&#xff1a;是一种高性能的…...

ARM 架构、cpu

一、ARM的架构 ARM是一种基于精简指令集&#xff08;RISC&#xff09;的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点&#xff1a; 精简指令集&#xff1a;ARM芯片使用精简指令集&#xff0c;即每条指令只完成一项简单的操作&#xff0c;从而提高指令的执行效率…...

【React】入门Day03 —— Redux 与 React Router 核心概念及应用实例详解

1. Redux 介绍 // 创建一个简单的Redux store const { createStore } Redux;// reducer函数 function counterReducer(state { count: 0 }, action) {switch (action.type) {case INCREMENT:return { count: state.count 1 };case DECREMENT:return { count: state.count -…...

u2net网络模型训练自己数据集

单分类 下载项目源码 项目源码 准备数据集 将json转为mask json_to_dataset.py import cv2 import json import numpy as np import os import sys import globdef func(file):with open(file, moder, encoding"utf-8") as f:configs json.load(f)shapes configs…...

登录功能开发 P167重点

会话技术&#xff1a; cookie jwt令牌会话技术&#xff1a; jwt生成&#xff1a; Claims&#xff1a;jwt中的第二部分 过滤器&#xff1a; 拦截器&#xff1a; 前端无法识别controller方法&#xff0c;因此存在Dispa什么的...

数据架构图:从数据源到数据消费的全面展示

在这篇文章中&#xff0c;我们将探讨如何通过架构图来展示数据的整个生命周期&#xff0c;从数据源到数据消费。下面是一个使用Mermaid格式的示例数据架构图&#xff0c;展示了数据从源到消费的流动、处理和存储过程。 数据架构图示例 说明 数据源&#xff1a;分为内部数据源&…...

useEffect 与 useLayoutEffect 的区别

useEffect 与 useLayoutEffect 的区别 useEffect和useLayoutEffect是处理副作用的React钩子函数&#xff0c;有以下区别1. 执行时机不同2. 对性能影响不同3. 对渲染的影响不同&#xff1a;4. 使用场景不同 使用建议 useEffect和useLayoutEffect是处理副作用的React钩子函数&…...

OPENCV判断图像中目标物位置及多目标物聚类

文章目录 在最近的项目中&#xff0c;又碰到一个有意思的问题需要通过图像算法来解决。就是显微拍摄的到的医疗图像中&#xff0c;有时候目标物比较偏&#xff0c;也就是在图像的比较偏的位置&#xff0c;需要通过移动样本&#xff0c;将目标物置于视野正中央&#xff0c;然后再…...

分布式理论:拜占庭将军问题

分布式理论&#xff1a;拜占庭将军问题 介绍拜占庭将军的故事将军的难题 解决方案口信消息型拜占庭问题之解流程总结 签名消息型拜占庭问题之解 总结 介绍 拜占庭将军问题是对分布式共识问题的一种情景化描述&#xff0c;由兰伯特于1082首次发表《The Byzantine Generals Prob…...

从零开始Ubuntu24.04上Docker构建自动化部署(三)Docker安装Nginx

安装nginx sudo docker pull nginx 启动nginx 宿主机创建目录 sudo mkdir -p /home/nginx/{conf,conf.d,html,logs} 先启动nginx sudo docker run -d --name mynginx -p 80:80 nginx 宿主机上拷贝docker上nginx服务上文件到本地目录 sudo docker cp mynginx:/etc/nginx/ngin…...

阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战

作者&#xff1a;胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件&#xff0c;这个事件是 K8s 原生的事件&#xff0c;其实绝大多数的用户并不会关心&#xff0c;同时也可能看不懂。而事件中心&#xff0c;是希望能够…...

人口普查管理系统基于VUE+SpringBoot+Spring+SpringMVC+MyBatis开发设计与实现

目录 1. 系统概述 2. 系统架构设计 3. 技术实现细节 3.1 前端实现 3.2 后端实现 3.3 数据库设计 4. 安全性设计 5. 效果展示 ​编辑​编辑 6. 测试与部署 7. 示例代码 8. 结论与展望 一个基于 Vue Spring Boot Spring Spring MVC MyBatis 的人口普查管理…...

使用VBA快速将文本转换为Word表格

Word提供了一个强大的文本转表格的功能&#xff0c;结合VBA可以实现文本快速转换表格。 示例文档如下所示。 现在需要将上述文档内容转换为如下格式的表格&#xff0c;表格内容的起始标志为。 示例代码如下。 Sub SearchTab()Application.DefaultTableSeparator "*&quo…...

力扣题解1870

这道题是一个典型的算法题&#xff0c;涉及计算在限制的时间内列车速度的最小值。这是一个优化问题&#xff0c;通常需要使用二分查找来求解。 题目描述&#xff08;中等&#xff09; 准时到达的列车最小时速 给你一个浮点数 hour &#xff0c;表示你到达办公室可用的总通勤时…...

D3.js数据可视化基础——基于Notepad++、IDEA前端开发

实验:D3.js数据可视化基础 1、实验名称 D3数据可视化基础 2、实验目的 熟悉D3数据可视化的使用方法。 3、实验原理 D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。本次实…...

在Robot Framework中Run Keyword If的用法

基本用法使用 ELSE使用 ELSE IF使用内置变量使用Python表达式本文永久更新地址: 在Robot Framework中&#xff0c;Run Keyword If 是一个条件执行的关键字&#xff0c;它允许根据某个条件来决定是否执行某个关键字。下面是 Run Keyword If 的基本用法&#xff1a; Run Keyword…...

虚拟机ip突然看不了了

打印大致如下&#xff1a; 解决办法 如果您发现虚拟机的IP地址与主机不在同一网段&#xff0c;可以采取的措施之一是调整网络设置。将虚拟机的网络模式更改为桥接模式&#xff0c;这样它就会获得与主机相同的IP地址&#xff0c;从而处于同一网段。或者&#xff0c;您可以使用…...

Z-Image-GGUF模型解析:C语言视角下的文件读写与GGUF格式处理

Z-Image-GGUF模型解析&#xff1a;C语言视角下的文件读写与GGUF格式处理 你是不是也好奇&#xff0c;那些动辄几十GB的大模型文件&#xff0c;计算机到底是怎么“看懂”并加载它们的&#xff1f;今天我们不聊高层的API调用&#xff0c;而是拿起C语言这把“手术刀”&#xff0c…...

用快马ai五分钟生成java学习路线可视化原型,清晰规划你的编程进阶之路

今天想和大家分享一个特别实用的Java学习路线可视化工具的开发过程。作为一个Java初学者&#xff0c;我经常被各种知识点搞得晕头转向&#xff0c;直到发现用InsCode(快马)平台可以快速搭建一个学习路线图&#xff0c;整个开发过程只用了不到半小时&#xff0c;效果却出奇地好。…...

SystemVerilog进阶:深入探索随机化约束的高级应用

1. 从基础到进阶&#xff1a;SystemVerilog随机化约束的核心价值 在芯片验证领域&#xff0c;随机化验证已经成为提高验证效率的黄金标准。SystemVerilog的随机化约束机制&#xff0c;就像给验证工程师配备了一个智能数据生成器&#xff0c;可以自动产生符合设计规范的测试场景…...

从零封装一个 Vue 低代码表单组件:我是如何借鉴 FcDesigner 的设计思路的

从零封装一个 Vue 低代码表单组件&#xff1a;我是如何借鉴 FcDesigner 的设计思路的 低代码开发正在改变前端工程师的工作方式。作为一名长期深耕表单领域的前端开发者&#xff0c;我曾参与过多个企业级低代码平台的搭建&#xff0c;也经历过从零开始封装表单组件的完整周期。…...

5个核心功能提升音频处理效率:AsrTools语音转文字工具用户指南

5个核心功能提升音频处理效率&#xff1a;AsrTools语音转文字工具用户指南 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into a…...

STM32姿态报警器设计:MPU6050与卡尔曼滤波实战

基于STM32的姿态翻转报警器设计与实现1. 项目概述1.1 系统架构本姿态翻转报警系统采用模块化设计&#xff0c;核心架构由STM32F103RCT6微控制器作为主控单元&#xff0c;通过I2C接口连接MPU6050惯性测量单元(IMU)传感器&#xff0c;实时采集设备的三轴加速度和三轴角速度数据。…...

Unity 工具之(SharpZipLib)跨平台中文Zip压缩与解压实战指南(附多线程优化)

1. 为什么选择SharpZipLib处理Unity中的Zip文件 在Unity项目开发中&#xff0c;资源打包和网络传输经常需要处理压缩文件。SharpZipLib作为.NET平台的老牌压缩库&#xff0c;相比Unity内置的压缩方案有三个不可替代的优势&#xff1a; 首先是对中文路径的完美支持。很多开发者都…...

别再死记硬背了!用Kahn算法搞定LeetCode 207课程表,保姆级C++代码逐行解析

从课程表到任务调度&#xff1a;Kahn算法在LeetCode 207中的实战应用 每次打开LeetCode看到那道课程表问题&#xff0c;你是不是也感到一阵头疼&#xff1f;先修课程、依赖关系、环状检测……这些概念堆在一起&#xff0c;简直比大学选课系统还让人崩溃。但别担心&#xff0c;今…...

x265帧内预测实战:从35种模式到MPM优化的效率提升技巧

x265帧内预测深度优化&#xff1a;从35种模式到MPM的工程实践 在视频编码领域&#xff0c;HEVC标准相比前代H.264引入了更复杂的帧内预测机制&#xff0c;其中x265作为开源编码器实现&#xff0c;其帧内预测模块的优化直接影响编码效率。本文将深入剖析x265帧内预测的核心技术…...

Qwen3-VL-Reranker-8B应用场景:科研数据集图文代码混合检索

Qwen3-VL-Reranker-8B应用场景&#xff1a;科研数据集图文代码混合检索 1. 科研检索的痛点与解决方案 科研工作者在日常研究中经常面临这样的困境&#xff1a;手头有大量包含文本、图像、代码片段的研究资料&#xff0c;想要快速找到相关内容却异常困难。传统的文本检索工具只…...