叶工好容7-Ingress的由来

news/2024/9/24 16:16:48/

目录

前言

第一章:Service

第二章:Service+LB

第三章:Service+LB+Nginx

Ingress-toc" style="margin-left:0px;">第四章:Service+Ingress

总结


前言

吃透一个技术,不仅要掌握详细的用法能够熟练的操作,更需要掌握技术出现的前因后果。不会平白无故创造一种技术,技术的产生是为了解决现有痛点的。本篇就一起来看下ingress出现的前因后果。

第一章:Service

service这个逻辑概念的出现是为了解决pod漂移和容器云服务内部调用的问题。其实容器云很多概念跟公有云相似,因为它就是从公有云实例管理的理念演化过来的。service是个逻辑概念,是不占用真实资源的,跟弹性伸缩组的概念类似;pod与云实例概念类似,代表一个最小的管理资源;pod中的container与实例中进程概念类似;init-container干的事一般是cloud-init或者开机启动项里干的事。

k8s内部通过service互相寻址,但service解决不了k8s外部访问服务的问题。

第二章:Service+LB

为了让k8s外部有一个固定的入口访问k8s内的服务,常规的做法是通过负载均衡器,这样就有了固定的IP+端口,LB负责将流量转发到对应的service上。

这套解法虽然解决service外部访问的问题,但又会带来另一个致命的弊端:成本太高了。按照这种设计,每一个service都要配置一个LB,那就相当不划算了,特别是微服务场景。而关于LB的维护又不属于k8s体系,需要在云平台中去进行操作,为了完成一件事情还得跨越两个基础底座去完成。

第三章:Service+LB+Nginx

为了降低成本,可以只使用一个公共的规格足够强劲的LB,这个LB先把流量转发到Nginx上然后让Nginx转发到service上,不就解决了资源成本的问题么?

思路完全对头,也确实能达到省钱的目的,但这看似完美的设计存在一个致命的缺陷:Nginx的配置维护。每次service发生变化,Nginx就得相应的去改配置,面对一整个集群service的维护,配错了服务流向出现问题就会造成故障。要是能有个东西帮我们把这陀脏活累活干掉那该多好啊。

Ingress">第四章:Service+Ingress

service的变动与Nginx配置的变动是存在绑定关系的,我们为啥不让k8s自己来管理nginx的配置,使用manifest这种声明式的方式,织入到自动化流水线中呢?这样只要把Nginx运行在k8s里,既能解决Nginx的配置维护问题,又能解决Nginx的部署和算力问题,一箭双雕。这就是Ingress

只不过这种设计会让Nginx变成性能瓶颈,因为它承载着整个k8s的流量,可以通过pod的横向扩展能力解决算力问题,但一定要注意做好反亲和防止nginx的pod落到同一台node上,避免因竞争宿主机的网络资源带来性能瓶颈。

总结

为了解决外部访问需要引入LB,为了解决LB太多的问题引入了Nginx,为了解决Nginx配置和部署问题引入了IngressIngress的使用需要注意反亲和。

新技术的产生是为了解决现有的痛点,一定要分析前因后果;新技术往往会带来新的问题,不是技术越新潮越好,而是越合适越好。


http://www.ppmy.cn/news/1447199.html

相关文章

第一章——小白入门

《MySQL 是怎样运行的:从根儿上理解 MySQL》 MySQL的客户端/服务器架构 前面的安装基本上等有了 直接执行这一步: mysql -hlocalhost -uroot -p123456想要断开客户端与服务器的连接并且关闭客户端的命令 quit exit \q客户端与服务器连接的过程 客户…

k8s中deployment和StatefulSet构建的pod的区别

在Kubernetes中,Deployment和StatefulSet都是控制器对象,用于管理和扩展应用程序的Pod。它们之间的主要区别在于它们处理Pod的方式和适用的应用程序类型。 以下是Deployment和StatefulSet之间的主要区别: 有状态应用程序 vs 无状态应用程序&…

书生·浦语 大模型(学习笔记-9)大模型微调的相关概念 预训练 与 微调 全量微调FFT 与 PEFT的区别

目录 一、什么是大模型微调 二、指令微调 三、微调的目的 三、微调的方式 四、微调的步骤 五、微调数据准备 六、微调的数据质量 一、什么是大模型微调 预训练和微调的区别,这个很关键 二、指令微调 这个地方主要是微调的角度不同,简单理解&#…

第49期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

Maven 构建 Flink 应用程序的最佳实践(根除各种类冲突/类加载问题)

作为开发者,在构建 Flink 应用程序时的体验真是一言难尽,想必大家都曾遇到过各种 ClassNotFoundException、NoSuchMethodError 以及 Could not find any factory for identifier kafka/jdbc/hive/hudi that implements org.apache.flink.table.factories.DynamicTableFactory…

IT廉连看——UniApp——样式绑定

IT廉连看——UniApp——样式绑定 一、样式绑定 两种添加样式的方法: 1、第一种写法 写一个class属性,然后将css样式写在style中。 2、第二种写法 直接把style写在class后面 添加一些效果:字体大小 查看效果 证明这样添加样式是没有问题的…

机器学习第八次课

前言 开课了,今天会讲点什么呢,先看看 首先是机器学习的三步走,第一步是确定函数,第二步是损失函数,第三步就是训练,对应到线性回归,就是确定函数,然后就是MSE,第三步是梯度下降法,先问了个问题. 然后问了一个梯度下降的问题,梯度下降是一个用于优化目标函数的算法&#xff…

【C# IO操作专题】

FileStream 是一个在多种编程语言中常见的概念,它代表了一个用于读写文件的流。在不同的编程语言中,FileStream 的实现和使用方式可能会有所不同,但基本概念是相似的:它允许程序以流的形式访问文件,即可以顺序地读取或…