干货分享(如何使用Kubernetes的Ingress|干货分享:如何使用Kubernetes的Ingress API)

干货分享(如何使用Kubernetes的Ingress|干货分享:如何使用Kubernetes的Ingress API)
文章图片

导语
以Kubernetes的Kong为例,聊聊当前流行的开源且与云无关的Ingress控制器。
正文
您可以通过使用诸如Kong for Kubernetes的Ingress控制器(使用自定义资源定义并提供许多插件)来极大地扩展Ingress资源的功能。
Kubernetes正在整个技术行业中得到采用,并且正逐渐成为现代云服务交付的实际编排平台。Kubernetes不仅提供了用于在云中部署微服务的原语,而且更进一步,帮助开发人员定义交互并管理其API的生命周期。
Kubernetes中的Ingress API允许您将微服务公开给外部世界,并为南北流量(即进入虚拟数据中心的流量)定义路由策略。使用Ingress 使用持续集成和持续交付(CI / CD)管道来管理API生命周期的好处很多,但是在我们介绍这些之前,让我们从一些基础知识开始。
Ingress资源的设计和目的
Kubernetes集群的最简单描述是在容器中运行应用程序的一组受管节点。在大多数情况下,Kubernetes集群中的节点不会直接暴露于公共互联网。这是有道理的,因为将所有服务公开在一个节点上会带来不可思议的风险。为了向公众提供对选定服务的访问,Kubernetes提供了Ingress资源。
Ingress资源公开了从群集外部到其中的选定服务的HTTP和HTTPS路由。Ingress资源还提供控制流量的规则。这使得Ingress资源成为处理大量独立服务提供的各种API的理想解决方案。为此,它为所有客户端提供一个入口点,然后处理对后端服务的请求。这通常称为扇出配置。
干货分享(如何使用Kubernetes的Ingress|干货分享:如何使用Kubernetes的Ingress API)
文章图片

还可以为基于名称的虚拟主机设置Ingress资源,该资源将基于主机头路由请求:
干货分享(如何使用Kubernetes的Ingress|干货分享:如何使用Kubernetes的Ingress API)
文章图片

为了使Ingress资源正常工作,需要在Kubernetes集群上安装Ingress控制器。控制器在Kubernetes集群和现有的各种面向公众的接口之间建立了桥梁。例如,大多数托管Kubernetes的云提供商都提供了一个独特的Ingress控制器,以与他们规定的面向公众的方法对接。各个控制器的操作彼此不同,并且可以提供不同数量的附加功能。
使用Ingress通过CI / CD管道管理API生命周期的好处
Ingress资源是通过声明性配置文件定义的,该文件通常在YAML中进行描述。这与所有Kubernetes资源一致,并允许直接集成到现代部署模式中,例如CI / CD的组合实践。这就是快速,频繁且安全地部署Ingress更改的能力。这样,可以将Ingress资源与应用程序本身合并到相同类型的软件开发生命周期模式中。
开发人员如何使用Kong for Kubernetes完成Ingress
面向Kubernetes的Kong是一个流行的开源且与云无关的Ingress控制器。Kong for Kubernetes入口控制器是作为Kubernetes中的自定义资源定义(CRD)构建的。这为那些已经习惯在该平台内定义资源的人提供了Kubernetes原生体验。
像您的应用程序和服务一样,可以通过Manifest,Helm或Kustomize安装Kong for Kubernetes。
Kong for Kubernetes Ingress Controller通过提供广泛的插件集来扩展Ingress资源的功能,这些插件涵盖了包括身份验证,分析,监视以及请求和响应转换在内的各种功能,仅举几例。通过在Ingress控制器上提供这些常见(有时不是很常见)的要求,Kong for Kubernetes可使开发人员将更多精力放在服务的核心要求上。当组织从少数的单一应用程序迁移到数百个(甚至数千个)微服务时,其价值变得尤为明显。
有关常见插件的列表,请访问 https://docs.konghq.com/hub/。
Kong插件被定义为Kubernetes资源,其中的config部分提供了各个插件的设置。以下是一个限速插件示例,该插件将流量限制为每分钟五个请求:
【干货分享(如何使用Kubernetes的Ingress|干货分享:如何使用Kubernetes的Ingress API)】干货分享(如何使用Kubernetes的Ingress|干货分享:如何使用Kubernetes的Ingress API)
文章图片

通过在资源的元数据部分中的简单注释即可将Kong插件添加到Kubernetes资源中。这允许将插件应用于不同的层。例如,您可以将一个插件应用于整个Ingress资源,或者以一种更细粒度的方式将其应用于单个服务资源。
这是将上述插件应用于Ingress资源的示例:
干货分享(如何使用Kubernetes的Ingress|干货分享:如何使用Kubernetes的Ingress API)
文章图片

Kong for Kubernetes还可以集成到Kong Enterprise产品的完整套件中,包括Kong Studio,Kong Dev Portal,Kong Manager,Kong Brain和Kong Immunity。这样就可以使用更高级的Kong插件以及完整的API生命周期解决方案。这套产品涵盖API规范的创作和发布,以及Kong资源的管理,甚至流量分析。
您可以采用“规范优先”的方法来使用Kong Studio开发API。在该库中,您将找到用于在标准OpenAPI规范中编写文档的工具以及用于立即反馈的测试工具。Kong Studio还提供了使用GraphQL的工具。Kong Studio直接同步到Git,这可以将您的规格文件集成到CI / CD工作流程中,从而可以自动更新Kong Dev Portal。
Kong Dev Portal托管您的API文档(可以是私人的也可以是公共的)。它具有极高的可定制性,可让您使其适应组织的风格和品牌。拥有完善文档的API对于提高生产力很重要,并且在Kong Studio和Dev Portal之间进行良好管理的流程可以帮助确保文档尽可能保持最新。
Kong Manager提供了图形界面来观察和管理整个Kong产品套件。从这里,您可以观察路由,服务和插件之间的关系。您可以实时了解流量并跟踪消费者。
Kong Brain会分析通过Ingress的流量,并创建服务间依赖关系的可视服务图。它还具有根据生成的地图自动生成OpenAPI规范文档的功能。这是一项有价值的功能,因为即使出于最佳意图,也可能无法正确记录所部署的服务。
Kong Immunity会分析通过Ingress的所有流量,并学习识别异常的模式。这些通常是微妙的请求,它们并不引人注目,但可能会引起人们的兴趣,例如不断尝试通过的未知参数。这也是一个非常有价值的功能,因为将这些针刺入成千上万个日志条目的大海捞针并不容易。
干货分享(如何使用Kubernetes的Ingress|干货分享:如何使用Kubernetes的Ingress API)
文章图片

充分利用Ingress
Kubernetes入口资源提供了从外部Kubernetes到内部后端服务的单个入口点。通过利用声明性定义文件,可以像对待所有其他形式的代码一样对待Ingress资源,并将其集成到常见的软件开发生命周期中。
为了桥接Kubernetes之外的通信,需要一个Ingress控制器。Kong for Kubernetes是一个Ingress控制器,它使用自定义资源定义通过提供大量插件来极大地扩展Ingress资源的功能,从而使开发人员可以专注于核心业务价值。Kong拥有一套企业工具,可以在整个API生命周期内极大地提高生产力和安全性。
干货分享(如何使用Kubernetes的Ingress|干货分享:如何使用Kubernetes的Ingress API)
文章图片

    推荐阅读