辅以专家洞察分析的最新科技新闻
通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明。
Kubernetes Ingress 是一个 API 对象,通过路由规则管理外部用户对 Kubernetes 簇中服务的访问。
在本文中,我们将探讨为什么以及如何将应用程序暴露到 Kubernetes 簇外部,可用的不同方案,以及 Kubernetes Ingress 最适用的场景。本文假设您对 Kubernetes 有基本了解,但如果需要更多背景信息,请参考以下资源:
有多种方法可以将应用暴露到 Kubernetes 簇之外,需要根据具体的使用场景选择最合适的方法。
本文中我们将比较的四个主要选项是:ClusterIP、NodePort、LoadBalancer 和 Ingress。每种方式都提供了一种暴露服务的方法,并在不同情况下各有用处。服务本质上是应用程序的前端,它会自动将流量重新分配到可用的 Pod 上,保证均匀分布。服务是一种抽象方法,用于将运行在一组 Pod 上的应用程序作为网络服务进行暴露。Pod 是不可变的,这意味着当它们终止时,不会被复活。Kubernetes 簇会在同一节点或新节点上创建新的 Pod 来替代已终止的 Pod。
与 Pod 和 Deployment 类似,Service 也是 Kubernetes 中的一种资源。Service 提供了从 Kubernetes 簇外部访问的单一入口点,并允许动态访问一组副本 Pod。
对于 Kubernetes 簇内部的应用访问,ClusterIP 是首选方法。它是 Kubernetes 的默认设置,使用内部 IP 地址来访问服务。
要将服务暴露给外部网络请求,可以使用 NodePort、LoadBalancer 和 Ingress。我们将先介绍 Ingress,并在文章后面对这些服务进行比较。
通过 Think 时事通讯,了解有关 AI、自动化、数据等方面最重要且最有趣的行业趋势。请参阅 IBM 隐私声明。
Kubernetes Ingress 是一种 API 对象,它提供路由规则,用于管理外部用户对 Kubernetes 簇中服务的访问,通常通过 HTTPS/HTTP 实现。借助 Ingress,可以轻松设置流量路由规则,而无需为每个服务创建大量 Load Balancer 或在节点上单独暴露服务。这使得 Ingress 成为生产环境中最优的选择。
在生产环境中,通常需要基于内容的路由、多协议支持以及身份验证功能。Ingress 允许您在簇内部配置和管理这些功能。
Ingress 由 Ingress API 对象和 Ingress Controller 组成。正如前面所述,Kubernetes Ingress 是一个 API 对象,用于描述将服务暴露到 Kubernetes 簇外部的期望状态。Ingress Controller 则是必不可少的组件,因为它是 Ingress API 的实际实现。Ingress Controller 会读取并处理 Ingress 资源信息,通常以 Pod 的形式运行在 Kubernetes 簇内。
Ingress 提供以下功能:
要快速直观地了解 Kubernetes Ingress,请观看以下视频:
如果说 Kubernetes Ingress 是提供路由规则来管理外部服务访问的 API 对象,那么 Ingress Controller 就是 Ingress API 的实际实现。Ingress Controller 通常是一个负载均衡器,用于将外部流量路由到 Kubernetes 簇,并负责 L4-L7 网络服务。
第 4 层 (L4) 是指 OSI 网络堆栈的连接级别,外部连接以轮询方式在 pod 之间实现负载均衡。第 7 层 (L7) 是指 OSI 堆栈的应用程序级别,根据请求在 Pod 之间进行负载均衡的外部连接。第 7 层通常是首选,但您应该选择满足负载均衡和路由要求的 Ingress Controller。
Ingress Controller 负责读取 Ingress 资源信息并相应地处理该数据。以下是一个 Ingress 资源示例:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
spec:
backend:
serviceName:ServiceName
servicePort:<Port Number>
打个比方,如果 Kubernetes Ingress 是一台计算机,那么 Ingress Controller 就是使用该计算机并执行操作的程序员。此外,Ingress Rules 充当管理员的角色,指导程序员使用计算机完成工作。Ingress Rules 是一组用于处理入站 HTTP 流量的规则。没有规则的 Ingress 会将所有流量发送到单个默认后端服务。
从更深入的角度来看,Ingress Controller 是一个在 Kubernetes 簇中运行的应用程序,并根据 Ingress Resources 配置 HTTP 负载均衡器。负载均衡器可以是在簇中运行的软件负载均衡器,也可以是外部运行的硬件或云负载均衡器。不同的负载均衡器需要不同的 Ingress Controller 实现。
市面上有各种各样的 Ingress Controller,选择合适的控制器来管理进入 Kubernetes 簇的流量和负载非常重要。
Ingress、ClusterIP、NodePort 和 LoadBalancer 都是让外部流量进入簇的方法,而且它们的操作方式也有所不同。让我们来看看每个的工作原理以及您将在哪里使用它们。
ClusterIP 是内部服务访问的首选选项,可使用内部 IP 地址访问服务。在某些场景下,ClusterIP 可能是最佳选择,例如:开发测试阶段的故障排查、内部流量管理以及仪表板访问等。
NodePort 是一个虚拟机 (VM),用于在静态端口号上公开服务。它主要用于在非生产环境中公开服务(实际上,不建议在生产环境中使用)。例如,NodePort 将用于公开单个服务(对于多个服务没有负载均衡要求)。
此方法使用外部 LoadBalancer 将服务公开到 Internet。您可以在生产环境中使用 LoadBalancer,但通常首选 Ingress。
Ingress 可让您将流量路由规则整合到单个资源中,并作为一个 Kubernetes 簇的一部分运行。在生产环境中,Kubernetes Ingress 是暴露服务的首选方案,原因如下:
在生产环境中,通常使用 Ingress 将应用程序公开到互联网。应用程序可通过端口 80 (HTTP) 或端口 443 (HTTPS) 从互联网进行访问,而 Ingress 是一个允许从 Kubernetes 簇外部访问 Kubernetes 服务的对象。
Kubernetes Ingress API 允许您将部署在 Kubernetes 簇中的应用程序公开到互联网,并将路由规则集中到单一源中。要实施 Ingress,您需要在簇中配置 Ingress Controller,它负责处理 Ingress Resource 信息并根据 Ingress Rules 放行流量。重要的是,要根据上述准则选择正确的服务和适当的配置,以便将您的应用程序暴露在互联网上。
利用 AI 和自动化的强大功能,主动解决整个应用程序堆栈中的问题。
使用开发运维软件和工具,在多种设备和环境中构建、部署和管理云原生应用程序。
通过我们的云咨询服务持续实现应用现代化,加速业务敏捷性与增长——支持任意平台部署。