写点什么

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


2019-09-25 13:154071

评论

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

天翼云“息壤”荣膺第六届数字中国建设峰会“十大硬核科技”称号

天翼云开发者社区

云计算 算力 超算

数据不只是数字:描述、分析、展示呈现数据的故事

Data 探险实验室

数据分析 数据 数据可视化 数字 可视化分析

滋灌中小企业,分销伙伴和华为来做“送水人”

脑极体

分销

急吗?光急可没用呀!满满干货,两小时速成,别搁那干瞪眼了!

加入高科技仿生人

低代码 数字化 OA 数字转型

解决Centos7 yum 出现could not retrieve mirrorlist 错误

北桥苏

Centos 7 linux\

QUIC协议在天翼云CDN全站加速产品中的应用

天翼云开发者社区

云计算 QUIC

今天开讲,6 大演讲主题、5 位技术大咖!龙蜥大讲堂 5 月精彩直播预告抢先看

OpenAnolis小助手

开源 操作系统 内核 龙蜥社区 龙蜥大讲堂

「MIAOYUN」:降本增效,赋能传统企业数字化云原生转型 | 36kr 项目精选

MIAOYUN

云原生 数字化转型 智能运维 降本增效 36氪

应用在虚机和容器场景下如何优雅上下线

华为云开源

微服务 云原生

极狐(GitLab)重磅发布新产品「极狐星」,让研发效能看得清,算得准,成就企业精英效能管理

极狐GitLab

DevOps 研发管理 研发效能 极狐GitLab 研发效能度量

二层交换机和三层交换机到底区别在哪?

wljslmz

交换机 三周年连更

分享:两年两度升级数据库,我们经历了什么

OceanBase 数据库

数据库 oceanbase

可计算存储技术全面升级CSD 3000存储体验

ScaleFlux

人工智能 机器学习 计算与存储 数据压缩

开源家装小程序

源字节1号

开源 软件开发 前端开发 后端开发 小程序发开

【涨知识】PCB板为什么多是绿色的?

华秋PCB

PCB PCB电路板 电路板 PCB设计 显影

今日分享丨5分钟快速了解Containerd

inBuilder低代码平台

云原生

RDMA网络实践

天翼云开发者社区

云计算 存储 RDMA

CCIG 2023 百度飞桨分论坛:大模型时代的图象图形技术变革与实践

飞桨PaddlePaddle

2023高质量Java面试题集锦:高级Java工程师面试八股汇总

采菊东篱下

Java 面试

百度王海峰团队荣获吴文俊人工智能科技进步奖特等奖,成果已应用于文心一言

飞桨PaddlePaddle

ScaleFlux压缩存储产品通过 PolarDB-PG社区版和PolarDB-X 开源版认证

ScaleFlux

开源数据库 数据压缩 数据库技术 企业数据

DPDK与ScaleFlux CSD 3000:金融数据处理的创新组合

ScaleFlux

DPDK 存储技术 数据压缩 金融开源

解析内存中的高性能图结构

NebulaGraph

数据结构 图数据库

长三角生物医药产业加速跑,飞桨螺旋桨为创新药企、医药技术伙伴装上AI大模型引擎

飞桨PaddlePaddle

飞桨 生物医药

【修复问题】HBuilder打包编译报错汇集(持续更新)

红泥

PostgreSQL-HA 高可用集群在 Rainbond 上的部署方案

北京好雨科技有限公司

postgresql Kubernetes 云原生 rainbond 企业号 5 月 PK 榜

直播预告 | 博睿学院:全面升级自适应AIOps

博睿数据

可观测性 AIOPS 智能运维 博睿数据 博睿学院

一文读懂 DNS 解析

火山引擎边缘云

DNS 域名解析 火山引擎 边缘云

您的数据可以压缩吗?

ScaleFlux

存储成本 存储技术 数据压缩

长三角生物医药产业加速跑,飞桨螺旋桨为创新药企、医药技术伙伴装上AI大模型引擎

飞桨PaddlePaddle

飞桨 科学计算 飞桨螺旋桨 文心生物计算大模型

基于 TiDB + Flink 实现的滑动窗口实时累计指标算法

PingCAP

MySQL 数据库 开源 分布式 TiDB

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