本文发布于一年多前。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

在 Kubernetes 1.18 中支持不断发展的 Ingress 规范

今年早些时候,Kubernetes 团队发布了 Kubernetes 1.18,它扩展了 Ingress。在这篇博文中,我们将详细介绍新 Ingress 规范中的新内容、它对您的应用程序的意义,以及如何升级到支持此新规范的 Ingress 控制器。

什么是 Kubernetes Ingress

在 Kubernetes 中部署应用程序时,许多人遇到的第一个挑战是如何将流量引入他们的集群。 Kubernetes Ingress 是一组路由规则,用于管理外部用户如何访问在 Kubernetes 集群中运行的服务。 有三种通用方法来暴露您的应用程序

  • 使用 NodePort 在每个节点上的端口暴露您的应用程序
  • 使用 LoadBalancer 服务创建一个指向集群中 Kubernetes 服务的外部负载均衡器
  • 使用 Kubernetes Ingress 资源

Kubernetes 1.18 Ingress 中的新功能

Kubernetes 1.18 中 Ingress API 有三个重要的新增功能

  • 一个新的 pathType 字段
  • 一个新的 IngressClass 资源
  • 支持主机名中的通配符

新的 pathType 字段允许您指定 Ingress 路径应如何匹配。该字段支持三种类型:ImplementationSpecific(默认)、exactprefix。显式定义路径匹配的预期行为将允许每个 Ingress 控制器支持用户的需求,并将提高 Ingress 控制器实现解决方案之间的可移植性。

IngressClass 资源指定 Ingress 应如何由控制器实现。添加此资源是为了正式化常用但从未标准化的 kubernetes.io/ingress.class 注解,并允许特定于实现的扩展和配置。

您可以在之前的博文中详细了解这些更改以及对主机名中通配符的支持。

支持 Kubernetes Ingress

Ambassador 是一个基于 Envoy 的开源 Ingress 控制器。我们坚信支持 Kubernetes Ingress 等通用标准,我们采用了该标准并在 2019 年宣布了我们的初始支持

每个 Ambassador 版本都经过严格的测试。因此,我们还贡献了一个开放的符合性测试套件,支持 Kubernetes Ingress。我们编写了初始测试代码,并将随着它演变为稳定的 v1 GA 版本,不断迭代新增功能和不同版本的 Ingress 规范。文档和使用示例是我们的首要任务之一。我们了解使用方法可能有多复杂,尤其是在从 API 的先前版本过渡时。

遵循测试驱动的开发方法,我们在 Ambassador 中支持 Ingress 改进的第一步是将修订后的规范(包括 API 和行为方面)转换为易于理解的测试套件。该测试套件虽然仍在大量开发中并经历多次迭代,但已迅速添加到 Ambassador CI 基础设施和验收标准中。这意味着对 Ambassador 代码库的每次更改都将符合 Ingress API,并在轻量级的 KIND 集群中进行端到端测试。使用 KIND 使我们能够在限制云提供商基础设施账单的同时进行快速改进,并使用预发布版本测试未发布的 Kubernetes 功能。

采用新规范

在全面了解 Kubernetes 1.18 中引入的 Ingress 新增功能并手头有一个测试套件后,我们着手调整 Ambassador 代码,以便它能够支持将高级 Ingress API 资源转换为 Envoy 配置和构造。幸运的是,Ambassador 已经支持先前版本的 Ingress 功能,因此开发工作是增量的。

我们确定了 getambassador.io/ingress-controller 的控制器名称。此值与 Ambassador 的域和 CRD 版本一致,必须用于将 IngressClass spec.controller 与 Ambassador 部署联系起来。新的 IngressClass 资源允许通过设置 spec.parameters 字段来实现可扩展性。目前,Ambassador 不使用此字段,其用法保留用于未来开发。

路径现在可以使用 pathType 字段定义不同的匹配行为。该字段的默认值为 ImplementationSpecific,它使用与 Ambassador Mappings 前缀字段和先前 Ingress 规范相同的匹配规则,以实现向后兼容性。

Kubernetes Ingress 控制器

Kubernetes 文档中提供了全面的 Kubernetes Ingress 控制器列表。目前,Ambassador 是唯一支持 Ingress 规范这些新增功能的 Ingress 控制器。在 Envoy Proxy 的支持下,Ambassador 是您今天尝试新 Ingress 规范的最快方式。

查看以下资源

或者加入 Slack 上的社区:Slack