【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

Kubernetes NodePort vs Loadbalancer vs Ingress 在生产中如何选择?

  • 2019-09-25
  • 本文字数:2805 字

    阅读完需:约 9 分钟

Kubernetes NodePort vs Loadbalancer vs Ingress 在生产中如何选择?

最近,有人问我 NodePortLoadBalancers Ingress 之间有什么区别。它们都是将外部流量带入群集的不同方法,并且它们都以不同的方式进行。简单的说,生产环境建议使用 Loadbalancer 和 Ingress,四层(TCP/UDP)代理使用 Loadbalancer,七层(HTTP/HTTPS)代理使用 Ingress。


让我们看一下它们各自的工作方式以及何时使用它们。

ClusterIP

ClusterIP 是默认的 Kubernetes 服务类型。它为你提供了群集内部的服务访问方式,集群内的应用程序可以访问该服务。外部应用不能访问。


ClusterIP 服务的 YAML 如下所示:


apiVersion: v1


kind: Service


metadata:


name: my-internal-service


spec:


selector:


app: my-app


type: ClusterIP


ports:


- name: http


port: 80


targetPort: 80


protocol: TCP


如果您无法从 Internet 访问 ClusterIP 服务,为什么要谈论它?原来您可以使用 Kubernetes 代理访问它!



启动 Kubernetes 代理:


$ kubectl proxy --port=8080


现在,您可以使用以下方案浏览 Kubernetes API 以访问该服务:


http://localhost:8080/api/v1/proxy/namespaces//services/:/


因此,要访问我们上面定义的服务,您可以使用以下地址:


http://localhost:8080/api/v1/proxy/namespaces/default/services/my-internal-service:http/

什么时候用代理?

在某些情况下,您将使用 Kubernetes 代理访问服务。


  1. 调试服务,或出于某些原因直接从笔记本电脑连接到服务

  2. 允许内部流量,显示内部仪表板等


因为此方法要求您以经过身份验证的用户身份运行 kubectl,所以不应使用此方法将服务公开到 Internet 或将其用于生产服务。

NodePort

NodePort 服务是将外部流量直接转发到服务的最原始的方法。顾名思义,NodePort 会在所有节点(VM)上打开一个特定的端口,并且发送到该端口的所有流量都将转发到该服务。



原图不准确,具有一定的误导性


NodePort 服务的 YAML 如下所示:


apiVersion: v1


kind: Service


metadata:


name: my-nodeport-service


spec:


selector:


app: my-app


type: NodePort


ports:


- name: http


port: 80


targetPort: 80


nodePort: 30036


protocol: TCP


基本上,NodePort 服务与普通的“ ClusterIP”服务有两个区别。首先,类型为“ NodePort”。还有一个名为 nodePort 的附加端口,用于指定要在节点上打开的端口。如果您未指定此端口,它将选择一个随机端口。大多数时候,您应该让 Kubernetes 选择端口。如 thockin 所说,有许多关于可使用的端口的警告。

什么时候用 NodePort?

此方法有很多缺点:


  • 每个端口只能提供一次服务

  • 您只能使用端口 30000–32767

  • 如果您的节点/ VM IP 地址更改,则需要处理


由于这些原因,不建议在生产中使用此方法直接公开您的服务。如果您运行的服务不一定总是可用,或者您对成本非常敏感,则此方法将对您有用。NodePort 服务一个很好的例子是演示应用程序或临时应用程序。

LoadBalancer

LoadBalancer 服务是将服务公开到 Internet 的标准方法。在华为云 CCE 上,这将启动网络负载均衡器,该网络负载均衡器将为您提供一个 IP 地址,该地址会将所有流量转发到您的服务。

什么时候用 Loadbalancer?

如果要直接公开服务,这是默认方法。您指定的端口上的所有流量都将转发到服务。没有过滤,没有路由等。这意味着您可以向它发送几乎任何类型的流量,例如 HTTP,TCP,UDP,Websockets,gRPC 或其他任何内容。


最大的缺点是,使用 LoadBalancer 公开的每个服务都将获得其自己的 IP 地址,并且您必须为每个公开的服务支付 LoadBalancer 的费用,这可能会变得昂贵!

Ingress

与上述所有示例不同,Ingress 实际上不是一种服务。相反,它位于多种服务的前面,并充当“智能路由器”或集群的入口点。


您可以使用 Ingress 进行许多不同的操作,并且有许多类型的 Ingress 控制器具有不同的功能。


默认的 CCE Ingress 控制器将为您启动 HTTP(S)负载均衡器,这将使您可以同时进行基于路径和基于子域的到后端服务的路由。例如,您可以将 foo.yourdomain.com 上的所有内容发送到 foo 服务,并将yourdomain.com/bar/路径下的所有内容发送到bar服务。



具有 L7 HTTP 负载均衡器的 CCE 上 Ingress 对象的 YAML 可能看起来像这样:


kind: Ingress


metadata:


name: my-ingress


spec:


backend:


serviceName: other


servicePort: 8080


rules:


- host: foo.mydomain.com


http:


paths:


- backend:


serviceName: foo


servicePort: 8080


- host: mydomain.com


http:


paths:


- path: /bar/*


backend:


serviceName: bar


servicePort: 8080

什么时候用 Ingress?

Ingress 可能是公开服务的最强大方法,但也可能是最复杂的。华为云端负载均衡器,Nginx,Contour,Istio 等,有很多类型的 Ingress 控制器。还有一些用于 Ingress 控制器的插件,例如 cert-manager,可以为您的服务自动设置 SSL 证书。


如果要在同一 IP 地址下公开多个服务,并且这些服务都使用相同的 L7 协议(通常为 HTTP),则 Ingress 最有用。


原文地址:


https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-09-25 13:153741

评论

发布
暂无评论
发现更多内容

「 前端开发规范 」10人小团队前端开发规范参考这篇就够了

小刘学编程

前端 统一代码规范 高效协同

「 代码性能优化 」作为一名Java程序员,你真的了解 synchronized 吗?(一)

小刘学编程

Java 性能优化 synchronized java锁

自媒体营销或已死,内容营销为何越来越难做?

石头IT视角

ChatGPT这波热潮会不会让我失业?

eng八戒

人工智能 AI 聊天机器人 openai ChatGPT

「 Java开发规范 」10人小团队Java开发规范参考这篇就够了

小刘学编程

Java 数据库规范 代码规范 项目规范

2023-02-15:商场中有一展柜A,其大小固定,现已被不同的商品摆满, 商家提供了一些新商品B,需要对A中的部分商品进行更新替换, B中的商品可以自由使用,也就是可以用B中的任何商品替换A中的任何

福大大架构师每日一题

算法 rust 福大大

Python 内置界面开发框架 Tkinter入门篇 丁

eng八戒

Python GUI tkinter

CleanMyMacX4.12.5中文版苹果电脑管家

茶色酒

CleanMyMacX4.12.5

面试必问:JVM 如何确定死亡对象?

王磊

java面试

ChatGPT入门案例|商务智能对话客服(二)| 社区征文

TiAmo

openai ChatGPT

使用了瓴羊Quick BI,数据分析的效率有效提升

夏日星河

有了瓴羊Quick BI,企业再也不必担心可视化分析情况

小偏执o

【2023年最新】轻松搞定MySQL数据库迁移

NineData

MySQL 数据库迁移 数据复制 数据迁移 SqlServer

「 技术文章翻译 」jasypt-spring-boot敏感信息加密解密利器使用指南

小刘学编程

加密解密 springboot jasypt

「 代码性能优化 」作为一名Java程序员,你真的会写for循环吗?

小刘学编程

Java 性能优化 for循环 技巧总结

「 代码性能优化 」作为一名Java程序员,你真的了解 synchronized 吗?(二)

小刘学编程

Java 性能优化 synchronized java锁

「 数据结构与算法 」如何系统性的学习数据结构与算法

小刘学编程

Java 学习路线 数据结构与算法

【Java基础】常用序列化技术与方式

No8g攻城狮

通信协议 网络通信协议

「 代码性能优化 」java高级程序员必知必会的55个代码性能优化技巧

小刘学编程

Java 性能优化 高级程序员 代码技巧

「 代码性能优化 」作为一名Java程序员,你真的了解 synchronized 吗?(三)

小刘学编程

Java 性能优化 synchronized java锁

模块六作业

张贺

Python 内置界面开发框架 Tkinter入门篇 丙

eng八戒

Python GUI tkinter

我不想再传递 nameof 了

newbe36524

C# Docker Kubernetes

大规模即时云渲染技术,追求体验与成本的最佳均衡

阿里云视频云

云计算 云渲染 云庙会

研发提效:服务端技术方案模板参考

邴越

技术方案 模版

运维训练营第14周作业

好吃不贵

GuitarPro2024免费版吉他打谱工具

茶色酒

GuitarPro

EasyRecovery2023新版本有哪些新功能?

茶色酒

EasyRecovery EasyRecovery15 easyrecovery2023

极客时间运维进阶训练营第十四周作业

9527

MASA Stack 1.0 发布会 —— 社区问题解答

MASA技术团队

.net stack 应用现代化 MASA

无需依赖Docker环境制作镜像

tiandizhiguai

Docker k8s

Kubernetes NodePort vs Loadbalancer vs Ingress 在生产中如何选择?_云原生_华为云原生团队_InfoQ精选文章