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

news2024/9/30 13:40:10

 

图片来源:自己画的

图片来源: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作为云原生时代的平台

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

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

资源利用率更高

服务的管理更加自动化。

安全性也比较高

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

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

相关文章

java学习-idea编辑器基础使用设置

首先打开电脑中的idea编辑器&#xff0c;点击头部&#xff1a;File按钮 → Settings… 打开设置界面&#xff1b; 设置idea的主题 设置idea代码注释的字体颜色 设置idea编辑器的字体和字体大小 设置idea通过提示回车自动导入包 设置idea输入忽略大小写进行提示

计算机网络面试题——第二篇

1. TCP拆包和粘包 现象 粘包&#xff1a;指在TCP传输中&#xff0c;发送方的多个数据包在接收方被合并在一个包接收&#xff0c;导致多条消息数据粘在一起&#xff0c;接收方无法正确区分这些消息的边界。拆包&#xff1a;指的是发送方的一个数据包在接收方被分成了多个包接收…

CHARLS数据库系列教程(4)--多模型效应分析、Per SD、P for trend及限制立方样条图绘制

CHARLS 是一项具备中国大陆 45 岁及以上人群代表性的追踪调查&#xff0c;旨在建设一个高质量的公共微观数据库&#xff0c;采集的信息涵盖社会经济状况和健康状况等多维度的信息&#xff0c;以满足老龄科学研究的需要。 为利用国际上最佳的数据采集方式&#xff0c;并确保研究…

shinyproxy部署streamlit记录

shinyproxy部署streamlit记录 streamlit 也是构建shinyproxy的后段是docker&#xff0c;所以不但可以部署shiny应用&#xff0c;还可以部署streamlit应用以及其它的应用程序。 部署的过程分两步&#xff0c;第一步是构建streamlit应用的docker镜像&#xff0c;就是构建Docker…

Linux高级编程_26_shell

文章目录 shell概述:分类&#xff1a;语法&#xff1a;1、#&#xff01;2、#3、执行&#xff1a;方式1&#xff1a;方式2&#xff1a;方式3&#xff1a; 注意&#xff1a; 第一个shell脚本变量变量的定义&#xff1a;变量的修改变量的取值撤销变量声明只读变量导出变量&#xf…

【HDP】zookeeper未授权漏洞修复

目录 一、禁用四字命令 二、ZK-Client增加kerberos 一、禁用四字命令 Zookeeper四字命令的使用方式非常简单&#xff0c;通常有两种方式。第一种是通过Telnet方式&#xff0c;使用Telnet客户端登录ZooKeeper的对外服务端口&#xff0c;然后直接使用四字命令即可&#xff1b;第…

Kafka快速实战与基本原理详解

笔记:https://note.youdao.com/ynoteshare/index.html?id=b0357bdb4821ed2e35ecdbdacd65aa06&type=note&_time=1727570043631 启动kafka之前先启动zookper 看看ZK里面都有什么数据 : 刚开始什么数据都没有 接下来启动kafka,启动好后,日志在这里看: 启动好了kaf…

处于风口期的本地生活服务项目有哪些?如何入局才能赚得更多?

随着多家互联网大厂在本地生活服务板块的投入力度不断加大&#xff0c;越来越多的人都养成了在其本地生活服务板块消费的习惯&#xff0c;令各大平台本地生活业务日渐兴盛的同时&#xff0c;也让许多创业者发现了本地生活服务赛道中所蕴含着的商机&#xff0c;本地生活服务项目…

苏州 数字化科技展厅展馆-「世岩科技」一站式服务商

数字化科技展厅展馆设计施工是一个综合性强、技术要求高的项目&#xff0c;涉及到众多方面的要点。以下是对数字化科技展厅展馆设计施工要点的详细分析&#xff1a; 一、明确目标与定位 在设计之初&#xff0c;必须明确展厅的目标和定位。这包括确定展厅的主题、目标受众、展…

四DHCP服务实验

复习 &#xff1a;DHCP基础实验&#xff1a; 1. 在server端安装dhcp yum -y install dhcp 2. 找回dhcp的配置文件&#xff1a;/etc/dhcp/dhcpd.conf cp -a /usr/share/doc/dhcp-4.25/dhcpd.conf.example /etc/dhcp/dhcpd.conf 3. 修改/etc/dhcp/dhcpd.conf配…

抽象类、比较器和接口

一.抽象类 1.抽象类的概念&#xff1a;如果一个类中没有包含足够的信息来描述一个具体的对象&#xff0c;这样的类就是抽象类。&#xff08;图例说明&#xff1a;&#xff09; 2.抽象方法的概念&#xff1a;当一个方法被abstract来修饰&#xff0c;此时代表着这个方法可以不进…

C#知识|基于反射和接口实现抽象工厂设计模式

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 01 应用场景 在项目的多数据库支持上、业务的多算法封装、以及各种变化的业务中&#xff1b; 02 抽象工厂组成 抽象工厂包括抽象产品&#xff08;即业务接口&#xff0c;可以通过抽象类或抽象接口设计&#xff09;…

WSL2Linux 子系统(十一)

WSL 网络改为桥接模式&#xff08;默认NAT) 上一篇文章 《WSL2Linux 子系统(十)》 详细讲述 WSL&#xff08;Windows Subsystem for Linux&#xff09;WSL 显示画面的几种方法。本篇讲述 WSL 网络转为桥接模式的两种方法。 桥接模式允许 WSL 实例获得一个与宿主机在同一子网中…

【包教包会】CocosCreator3.x框架——音频声音模块(无需导入、无需常驻节点)

下载地址&#xff1a;AudioDemo3.x: CocosCreator3.x框架——音频模块 注意事项&#xff1a; 1、gi.musicPlay、gi.soundPlay是同步函数&#xff0c;使用前必须先将音频加载到缓存 Demo通过SceneLoading实现了一个极简的Loading页面&#xff0c;将音频全部加载后进入游戏&…

JAVA智慧社区系统跑腿家政本地生活商城系统小程序源码

智慧社区系统集成跑腿家政与本地生活商城 —— 打造便捷高效的社区生活圈 &#x1f3e0; 智慧社区新时代&#xff1a;一站式服务新体验 在快节奏的都市生活中&#xff0c;智慧社区系统正悄然改变着我们的生活方式。它不再只是一个居住的空间&#xff0c;而是集成了跑腿家政、本…

AI换脸技术新纪元:直播与视频创作的新利器

在数字媒体时代&#xff0c;实时面部交换技术正变得越来越流行。它不仅为视频创作者提供了新的表达方式&#xff0c;也为直播行业带来了革命性的变化。以下是一些目前市场上领先的实时面部交换软件&#xff1a; &#x1f31f; FaceFusion FaceFusion 是一款功能强大的实时面部…

2023ICPC区域赛杭州站

VP链接&#xff1a;Dashboard - The 2023 ICPC Asia Hangzhou Regional Contest (The 2nd Universal Cup. Stage 22: Hangzhou) - Codeforces D. Operator Precedence 一道构造题&#xff0c;将序列构造成 1 2 -1 2 -1 ...... 2 -1 x。根据题目条件&#xff0c;可以推出来 x …

全新带货思路,用AI美女数字人做情感赛道,27天销量1559单

本期就另外分享一个全新的AI美女数字人带货思路&#xff0c;如果你正好对AI视频带货感兴趣&#xff0c;那么本期内容直接给你抹平“视频号上AI美女数字人玩法信息差”&#xff0c;最主要还是趁这类内容还不卷的时候&#xff0c;赶紧行动起来&#xff01; 更多实操教程和数字人工…

智能AI对话绘画二合一网站源码系统 带完整的安装代码包以及搭建部署教程

系统概述 智能AI对话绘画二合一网站源码系统是一款基于先进的人工智能技术开发的综合性网站源码系统。该系统将AI对话功能和AI绘画功能完美融合&#xff0c;用户可以通过简单的对话指令&#xff0c;让系统生成符合要求的绘画作品&#xff0c;或者通过对话了解绘画相关的知识和…

世优科技出席36氪2024具身智能大会圆桌对话,入选创新应用案例

具身智能&#xff0c;作为人工智能领域的前沿分支&#xff0c;聚焦于构建能够通过集成感知与交互机制&#xff0c;在物理环境中实现动态适应与实时互动的智能系统及机器人平台。 9月26日&#xff0c;由36氪主办的“2024具身智能大会”以“让AI通向物理世界”为主题&#xff0c;…