Kubernetes 服务类型详解

Kubernetes 服务类型详解

如今,Kubernetes 已成为管理和扩展云原生应用程序的强大工具。组织需要利用高度可扩展且始终可用的功能来保持零停机时间,快速部署他们的软件。随着越来越多的应用程序被容器化和部署,容器的管理也变得越来越复杂。因此,软件的扩展成为一个问题,而这正是 Kubernetes 大放异彩的地方。借助 Kubernetes,可以轻松地自动化、部署、扩展和监控应用程序。

如果阅读过任何有关 Kubernetes 服务和网络的文档,我们可能会遇到过 ClusterIP、NodePort、LoadBalancer 和 Ingress 等术语。这些术语似乎有很多混淆,在开始构建下一个基于 Kubernetes 的应用程序之前,我们必须了解其中的区别。

本文将解释这四种 Kubernetes 服务类型之间的区别,以及如何为应用程序选择最好的一种。

了解应用程序的网络要求

Kubernetes 网络和服务是一个复杂的话题。我们需要了解应用程序的需求才能成功地将其部署在 Kubernetes 上。这意味着需要了解想要提供的服务类型、集群的大小和位置,以及我们希望应用程序接收什么样的流量。

Kubernetes 支持四种类型的服务:ClusterIP、NodePort、LoadBalancer 和 Ingress。每个都有自己的一组要求来为我们的应用程序启用它们,因此我们必须在部署之前了解我们需要哪一个。

例如,NodePort 允许同一节点内的 Pod 相互通信,而无需分配 IP 地址。我们的 Kubernetes 集群必须至少有两个节点才能使这种类型的网络通信正常工作。此外,NodePort 仅在从集群内部访问时才有效,而 LoadBalancers 或 Ingress 则允许外部访问。下面让我们逐一了解它们的工作原理。

ClusterIP
image-20240205151810984

ClusterIP 是启用集群内多个 pod 通信的默认服务。默认情况下,如果我们不手动定义,我们的服务将在 ClusterIP 上公开。ClusterIP 无法从外界访问。但是,可以使用 Kubernetes 代理来访问我们的服务。此服务类型用于工作负载之间的内部网络,同时调试服务、显示内部仪表板等。

nodePort
image-20240205154614232

NodePort 是最简单的网络类型。它不需要配置,它只是将主机上随机端口上的流量路由到容器上的随机端口。这适用于大多数情况,但它确实有一些缺点:

  • 我们可能需要使用反向代理(如 Nginx)来确保正确路由 Web 请求。
  • 每个端口只能公开一项服务。
  • 每次 Pod 启动时,容器 IP 都会不同,因此无法解析 DNS。
  • 容器无法从 pod 外部访问 localhost,因为没有配置 IP。

不过,我们可以在实验期间和临时用例(例如演示、POC 和内部培训)中使用 NodePort,以展示流量路由的工作原理。建议不要在生产中使用 NodePort 来暴露服务。

Loadbalancer
image-20240205151536794

LoadBalancer 是 Kubernetes 网络最常用的服务类型。它是一个标准的负载均衡器服务,在每个 pod 上运行并建立与外部世界的连接,无论是与 Internet 等网络还是在我们的数据中心内。

LoadBalancer 将保持对已启动的 pod 的连接打开,并关闭与已关闭的 pod 的连接。这类似于我们在 AWS 上的 ELB 或 Azure 上的应用程序网关。上游为 HTTP(S) 流量提供第 4 层路由,而下游为 HTTP(S) 流量提供第 7 层路由。

我们可以根据目标端口号、协议和主机名路由流量,或使用应用程序标签。我们可以将几乎任何类型的流量发送到此服务类型,例如 HTTP、TCP、UDP、Grpc 等。使用这种方法直接公开我们的服务。

Ingress
image-20240205153619807

Ingress 不被认为是官方的 Kubernetes 服务,但它可以用来暴露服务。我们可以通过创建规则来配置 Ingress 服务,以定义哪些入站连接应到达哪些服务。

Ingress 是一个 Kubernetes 对象 ,它位于多个服务的前面并充当智能路由器。它定义了外部流量如何到达集群服务,并配置了一组规则以允许入站连接到达集群上的服务。

入口规则通常由注释定义。Ingress 控制器读取这些注释并相应地配置 iptables 或 NGINX。有许多类型的 Ingress 控制器具有不同的功能。我们可以在此处找到入口控制器列表。

Ingress 是用于公开服务的最强大的服务类型,它只需要我们维护一个负载均衡器,这比使用 LoadBalancer 服务类型便宜。

Kubernetes 是云原生世界的必备工具

Kubernetes 是自动化和管理IT 基础架构的强大工具。它使我们能够对基础架构的相关部分进行分组,在集群中为它们提供自己的“节点”,使它们更易于管理、监控和更新。

posted @ 2024-02-05 15:54  YhtWeirdo  阅读(9)  评论(0编辑  收藏  举报