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的实现原理,及其架构。
图片来源:自己画的 图片来源:k8s官网 首先,什么是ingress? 是服务还是控制器? 都不精确 ingress是一个api资源 service和deployment也是api资源。 这几个相互协作,组建成一个对外提供服务的架构。 ingress提供的…...
【数据结构强化】应用题打卡
应用题打卡 数组的应用 对称矩阵的压缩存储 注意: 1. 2.上三角的行优先存储及下三角的列优先存储与数组的下表对应 上/下三角矩阵的压缩存储 注意: 上/下三角压缩存储是将0元素统一压缩存储,而不是将对角线元素统一压缩存储 三对角矩阵的…...
解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found
目录 前言1. 问题描述2. 问题分析3. 解决步骤3.1 检查 MySQL 服务文件3.2 备份旧的服务文件3.3 启动 MySQL 服务3.4 验证服务状态 4. 总结结语 前言 在日常使用 MySQL 数据库时,有时候可能会遇到服务无法正常启动的问题。这类问题通常出现在系统更新或者服务配置文…...
Dubbo和Http的调用有什么区别
背景 我们在项目开发中,需要进行调用外部接口时,往往使用Dubbo和Http方式都能实现远程调用。那么他们在使用上,有什么区别呢? 定位不同 一个是分布式环境下的框架,一个是通信协议。 Dubbo:是一种高性能的…...
ARM 架构、cpu
一、ARM的架构 ARM是一种基于精简指令集(RISC)的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点: 精简指令集:ARM芯片使用精简指令集,即每条指令只完成一项简单的操作,从而提高指令的执行效率…...
【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重点
会话技术: cookie jwt令牌会话技术: jwt生成: Claims:jwt中的第二部分 过滤器: 拦截器: 前端无法识别controller方法,因此存在Dispa什么的...
数据架构图:从数据源到数据消费的全面展示
在这篇文章中,我们将探讨如何通过架构图来展示数据的整个生命周期,从数据源到数据消费。下面是一个使用Mermaid格式的示例数据架构图,展示了数据从源到消费的流动、处理和存储过程。 数据架构图示例 说明 数据源:分为内部数据源&…...
useEffect 与 useLayoutEffect 的区别
useEffect 与 useLayoutEffect 的区别 useEffect和useLayoutEffect是处理副作用的React钩子函数,有以下区别1. 执行时机不同2. 对性能影响不同3. 对渲染的影响不同:4. 使用场景不同 使用建议 useEffect和useLayoutEffect是处理副作用的React钩子函数&…...
OPENCV判断图像中目标物位置及多目标物聚类
文章目录 在最近的项目中,又碰到一个有意思的问题需要通过图像算法来解决。就是显微拍摄的到的医疗图像中,有时候目标物比较偏,也就是在图像的比较偏的位置,需要通过移动样本,将目标物置于视野正中央,然后再…...
分布式理论:拜占庭将军问题
分布式理论:拜占庭将军问题 介绍拜占庭将军的故事将军的难题 解决方案口信消息型拜占庭问题之解流程总结 签名消息型拜占庭问题之解 总结 介绍 拜占庭将军问题是对分布式共识问题的一种情景化描述,由兰伯特于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:百毫秒高弹性的实时事件中心的架构和挑战
作者:胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件,这个事件是 K8s 原生的事件,其实绝大多数的用户并不会关心,同时也可能看不懂。而事件中心,是希望能够…...
人口普查管理系统基于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提供了一个强大的文本转表格的功能,结合VBA可以实现文本快速转换表格。 示例文档如下所示。 现在需要将上述文档内容转换为如下格式的表格,表格内容的起始标志为。 示例代码如下。 Sub SearchTab()Application.DefaultTableSeparator "*&quo…...
力扣题解1870
这道题是一个典型的算法题,涉及计算在限制的时间内列车速度的最小值。这是一个优化问题,通常需要使用二分查找来求解。 题目描述(中等) 准时到达的列车最小时速 给你一个浮点数 hour ,表示你到达办公室可用的总通勤时…...
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中,Run Keyword If 是一个条件执行的关键字,它允许根据某个条件来决定是否执行某个关键字。下面是 Run Keyword If 的基本用法: Run Keyword…...
虚拟机ip突然看不了了
打印大致如下: 解决办法 如果您发现虚拟机的IP地址与主机不在同一网段,可以采取的措施之一是调整网络设置。将虚拟机的网络模式更改为桥接模式,这样它就会获得与主机相同的IP地址,从而处于同一网段。或者,您可以使用…...
LeetCode[中等] 763. 划分字母区间
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 思路 贪心…...
Java LeetCode每日一题
997. 找到小镇的法官 package JavaExercise20241002;public class JavaExercise {public static void main(String[] args) {int[][] array {{1,3},{2,3},{3,1}};Solution solution new Solution();System.out.println(solution.findJudge(3, array));} }class Solution {pu…...
数据结构--集合框架
目录 1. 什么是集合框架 2. 背后所涉及的数据结构以及算法 2.1 什么是数据结构 2.2 容器背后对应的数据结构 1. 什么是集合框架 Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 int…...
Win10鼠标总是频繁自动失去焦点-非常有效-重启之后立竿见影
针对Win10鼠标频繁自动失去焦点的问题,可以尝试以下解决方案: 一、修改注册表(最有效的方法-重启之后立竿见影) 打开注册表编辑器: 按下WindowsR组合键,打开运行窗口。在运行窗口中输入“regedit”&#x…...
智能涌现|迎接智能时代,算力产业重构未来
前言 OpenAI首席执行官山姆奥特曼在《智能时代》中描绘了一个令人振奋的未来图景,其中算力产业将扮演至关重要的角色。奥特曼预测,我们可能在“几千天内”迎来超级智能,这一进程将极大加速社会结构的智能化转型。 这一预测与算力产业的未来…...
关于HTML 案例_个人简历展示01
案例效果展示 代码 <!DOCTYPE html> <lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简历信息</title> </he…...
【前端开发入门】css快速入门
目录 引言一、css盒模型1. 盒模型概念2. 盒模型案例 二、css编写1. html文件内部编写1.1 标签style属性编写1.2 css选择器关联1.2.1 id选择器1.2.2 class选择器1.2.3 标签选择器1.2.4 css选择器作用域1.2.5 其他选择器1.2.6 各css选择器优先级 2. 单独维护css文件2.1 创建css文…...
java中创建不可变集合
一.应用场景 二.创建不可变集合的书写格式(List,Set,Map) List集合 package com.njau.d9_immutable;import java.util.Iterator; import java.util.List;/*** 创建不可变集合:List.of()方法* "张三","李四","王五…...
D25【 python 接口自动化学习】- python 基础之判断与循环
day25 for 循环 学习日期:20241002 学习目标:判断与循环﹣-35 for 循环:如何遍历一个对象里的所有元素? 学习笔记: for 循环与while循环的区别 for循环的定义 使用for循环遍历序列 使用for循环遍历字典…...
HTTP1.0和HTTP1.1有什么区别
HTTP/1.0 和 HTTP/1.1 是两个不同版本的 HTTP 协议。虽然它们的核心功能都是提供网页数据传输,但 HTTP/1.1 对 HTTP/1.0 做了很多改进,提升了性能和灵活性。以下是它们的主要区别: 1. 持久连接(Persistent Connection)…...
西安网站建设案例/本地推广最有效的方法
废话不多说了,直接给大家贴代码了,具体代码如下所示:import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import …...
武汉做网站公司哪家好/网络推广竞价是什么
《计算机组装与维护课程设计》——微型计算机基本知识引言:一、课程设计的性质与任务尽管计算机原理和制造技术非常复杂,但计算机的组成却十分简单。学会计算机组装一般维护和维修,并不需要很多的计算机知识。只需要了解当前比较流行的硬件组…...
wordpress公司模板下载/泰州百度关键词优化
蛋疼的需求需要用到将html页面专成pdf供下载:需要:wkhtmltopdf、pdfkit2、安装依赖包yum install zlib fontconfig freetype X11 libs libX11 libXext libXrender libpng*3、将刚刚下载的托到服务器、解压tar -xvf wkhtmltox-0.12.4_linux-generic-amd64…...
上海市做网站/百度小说网
小暑,夏季的第五个节气,小暑过后就进入一年最热的三伏天,那么2020年小暑具体时间是几点几分?小暑是什么意思?一起了解下吧!农历五月有蒲月、仲夏、超夏、榴月、郁月、呜蜩、天中、仲夏、皋月之称。为您整理…...
网站开发学那种语言/东莞网站建设公司
原因: 默认是240秒,也就是Navicat每隔240秒给数据库发送一次数据来保证数据库连接活跃性。然而240秒间隔太长了,导致被mysql服务端将连接清理掉了。而Navicat发现旧连接不可用再去开启新连接会耗时挺久,这真是让程序员非常不爽&a…...
信用中国 网站 建设方案/河北网络科技有限公司
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言内存分配管理栈区:堆区:常量区静态区代码区如何查看一个对象是在堆区/栈区MRC手动设置MRC环境空指针野指针多个对象内存管理思想 propert…...