当前位置:首页 > 每日看点 > 正文内容

在 Kubernetes 中,Service 的实现原理是什么,它是如何实现服务发现的?

卡卷网1年前 (2024-11-20)每日看点245

行,问的这个问题挺有意思,Kubernetes 里 Service 是怎么实现的,服务发现是怎么回事,咱就直说了。这事儿看起来挺玄乎,但掰开揉碎了讲,也就那么回事。你得把这事儿想得简单点,别一上来就被啥术语吓住了——其实全是些搬砖的套路。

咱先从个大方向捋,Kubernetes 这东西,说白了就是个工头,它管理着一堆工人,也就是咱们那些服务(Pods)。你想在工地上指挥一堆工人干活儿,总得有个方式让他们互相认识吧?这就是服务发现的基本需求。然后,Kubernetes 的 Service 就是起了个“指路标”的作用——给工地的工人们找对门儿。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软

1. Service 是干啥的?

Kubernetes 的 Service 本质上就是个“中间商”,负责把请求从外部引导到具体的 Pod 上。为什么要 Service?很简单,因为你直接跟 Pod 打交道不靠谱。Pod 是会“挂”的,跟你的临时工一样,干一阵子走人了,来了新的 Pod,这时候外部流量还是傻乎乎地跑去找原来的 Pod,找不到了,这不就完犊子了么?

所以,Service 出来了,搞了个虚拟 IP,背后帮你去找 Pod。你就别管 Pod 换来换去了,反正都能接着用这个虚拟 IP 跟服务通信。

Kubernetes 里的 Service 有几种类型,最常见的就是 ClusterIP。你可以理解成,你站在工地门口,只能通过工地发号施令,但你不能直接进工地里面挑工人干活儿。Service 就是站在门口收任务,然后再悄悄把活儿分给工人。

2. 服务发现怎么玩的?

这个服务发现咋实现的呢?你要知道,工人(Pod)是动态的,今天来俩,明天走一个,工地还得照常干活儿。这就得靠 Kubernetes 自己给工人打卡登记了。

Service 有个牛逼的地方,叫做“标签选择器”(Label Selector)。简单来说,Kubernetes 会给每个 Pod 发一个小牌子(Label),比如“我是干前端的”或者“我是干数据库的”,然后 Service 就盯着这些牌子,按照需求把流量引过去。就像在工地上,你只要告诉 Service 你需要哪种工人,Service 就能从一堆 Pod 里挑出合适的给你用。

有的哥们可能会问,那服务一多,我怎么知道哪个服务对应哪个 Pod 呢?这就得提 DNS(域名解析)了。在 Kubernetes 里,集群内部有个自带的 DNS 服务,Service 一旦创建成功,Kubernetes 就会自动给它分配一个域名。你只需要通过这个域名就能找到 Service,就像在公司里发邮件一样,用名字就能找到同事,不用管背后换了多少电脑。

3. LoadBalancer 和 NodePort 这两货啥时候用?

ClusterIP 那一套咱们已经说了,它只在集群内部起作用。那问题来了,如果我想把服务暴露出去给外部的客户用呢?这时候你就得用 LoadBalancer 或者 NodePort。

LoadBalancer 其实就是给你配了个“公司前台”,外部请求来了,前台接单,再把活儿转到内部工人那儿去。这玩意儿更智能,自动帮你搞定所有负载均衡的事情,客户从外面看着还挺牛,但其实后面就是一堆工人不停地干活。

NodePort 是啥?这个比较原始,简直跟老工厂里守大门的保安一样。NodePort 是给每个工人直接开了个大门,客户一来,不管啥时候,总有人在门口守着,接到请求就送到工人那儿。你说这玩意儿听着多靠谱,其实毛病不少——你得自己维护这扇门,还不如前面那个自动接活儿的 LoadBalancer 省心。

4. 真实场景:怎么实现 Service 更新?

咱说点实际的,比如你想更新一个服务,但又不能影响客户使用,那 Service 是怎么做到的呢?其实很简单,叫做滚动更新。当你升级服务时,Kubernetes 会自动在后台干活儿,把老的 Pod 换成新的,而外部请求还是通过那个虚拟 IP 进入,这样不管你怎么换工人,客户都看不出来。这种操作简直就是职场里换人不换岗,你明明换了个菜鸟,但客户还是觉得你服务一如既往地好。

5. 可能的坑:Service 不能直接解决所有问题

当然了,Service 也不是万能的。你要指望它帮你搞定所有微服务之间的通信问题,那就是有点扯。比如说,服务间的安全性、数据的持久化、复杂的网络拓扑,Service 解决不了这些事儿,这就得靠你自己或者其他手段了。

总结一下,Kubernetes 里的 Service 本质上就是个“中介”,它帮你找到正确的 Pod,确保服务可用,而服务发现这一套则是通过标签选择器和内部 DNS 系统实现的。各种 Service 类型根据不同的需求来选用,搞清楚了这些,就知道啥场景用啥东西了。

Kubernetes 看着高大上,其实就是把复杂的事情简单化了。你真搞懂了它的原理,很多问题就不再是问题,毕竟服务发现这玩意儿,就像在职场里找对人干对事一样,你得有方法,别瞎跑。

好了,就这么多,有空了再聊。

免费看 500 套技术教程的网站,希望对你有帮助

程序员快看-教程,程序员编程资料站
最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软

求一键三连:点赞、分享、收藏

我的技术网站:cxykk.com 里面有,500套技术系列教程、1万+道,面试八股文、BAT面试真题、简历模版,工作经验分享、架构师成长之路,全部免费,欢迎收藏和转发。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2024/11/1081.html

分享给朋友:

相关文章

200+ 工具,这个网站堪称最强

200+ 工具,这个网站堪称最强

作为一个乱七八糟什么都懂一点的电脑小白,日常经常被别人增加些临时任务,比如PDF转Word,提取视频里的音频,图片加个边框。之前,电脑里安装了不少这类的软件,虽然能满足要求,但装的多了,总感觉电脑卡卡的。最近发现了一个超强的在线工具网站,首...

WordPress建站同时面向B端和C端,有什么好的解决方案?

这个很容易实现呀,只不过需要自己开发,整体用权限管理就可以实现了,B端和C端是不同用户权限,C端能看到的菜单入口和B端不一样就行了。技术层面实现没问题的,只不过就是看你们的技术能力和投入了 ,这样的需求应该没有现成的开源插件。只能找人定制开...

如何判断 Java 工程师的基础知识是否扎实?

我来给你出几道大题,能答对70%,你就算基础扎实了。第一部分 Java基础(27)1. 程序本质:代码是如何被执行的?CPU、操作系统、虚拟机各司何职?2. 基础语法:从CPU角度看变量、数组、类型、运算、跳转、函数等语法3. 引用类型:同...

大家都是怎么把自己的粉丝增加到1000的呢?

大家都是怎么把自己的粉丝增加到1000的呢?

截至2024年10月30日,关注者总数1137人,用时80天,增速约14人/天。2024年10月30日数据2024年8月10日开始创作,连续一周,1个关注者都没有。创作第7天,得到第一个关注,7天时间,写了8篇回答。当天得到关注,激动的心情...

为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?

开源可以垄断。人类最高的权力不是什么国家而是意识形态,能够控制别人的思维方式。你把你的东西开源出来了,其他人就会懒于思考,在这一个思考上使用你的方式。比如容器编排,经过了K8s后谁还会去开发那些奇奇怪怪的编排手段,直接用不就行了。形成了生态...

一台 NAS 可以带来什么好处?

一台 NAS 可以带来什么好处?

家里只有一台HP Gen8,一开始只想搞搞黑群晖,做小姐姐别墅。后来反反复复的折腾了很多。CPU换了1265L,内存加到16G,硬盘4个16T,改线SSD引导,足够我使用了。HP GEN8下面列举一下现在在用的服务,底层使用的PVE。1、黑...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。