在上周由NGINX Ingress Controller版本发布的1.8.0博客文章之后,今天我们将讨论Nginx Ingress Controller版本1.9.0的新功能。
基于发展。
1.9.0版的启动完全展示了Intress控制器的承诺,Intress Controller致力于提供灵活,强大且易于使用。它的控制器可以分配Kubernetes入口资源和NGINX入口资源:
?Kubernetes Ingress资源提供了Ingress Controller实现的最终兼容性,并且可以使用注释和自定义模板来扩展以生成复杂的配置。
?NGINX INGRESS资源提供了一种特定的NGINX配置方案,该方案比自定义Universal Kubernetes Ingress Resources更富裕,更安全。在版本1.8.0及更高版本中,您可以使用代码段和自定义模板Extression nginx Ingress资源继续使用NginxNGINX入口资源不支持的功能,例如高速缓存和OIDC身份验证。
1.9.0版的主要增强和改进包括::
?新的WAF功能-NGINX应用程序保护现在可以支持更多WAF策略定义,包括JSON模式验证,用户定义的URL和用户定义的参数。对于与Nginx App Protect和Nginx Ingress Controller相关的信息,请查看我们的博客。
?更多策略-Strategy被定义为单个Kubernetes对象中的常规集,可以将其应用于Ingress Load Balanner.您可以在执行完成后将策略分配给不同的团队并集成。Version1.9.0引入了三个其他策略。:JWT验证,费率限制和MTLS身份验证。
?提高可见度 - 该版本丰富了现有的入口控制器指示器,并添加了新的指标,包括上游特定指标,过载的原因,延迟请求延迟和分发。在扩展Grafana仪表板后,这些指标可以使用这些指标来提供更多的视觉效果。功能。
?服务网格集成-NGINX IGRESS控制器可以与新发布的NGINX服务网格无缝集成,该网格安全地交付到安全在网格中运行的外部服务。
?其他新功能:
Kubernetes的Nginx Ingress Controller是一个具有NGINX开放源代码或NGINX加上Kubernetes环境中实例运行的监护人过程。监护人过程负责监视Kubernetes kubernetes ingress Invress Inspress和Nginx Invress资源,以识别需要加载负载平衡的服务请求。找到请求,它将自动配置nginx或nginx Plus以将流量路由转到这些服务并执行负载余额。
已经启动了各种NGINX入口控制器。官方的NGINX实施性能很高,可以随时投入生产,并且适合长期部署。我们旨在为每个版本提供出色的稳定性和富人的稳定性可以在整个企业中部署的功能。我们免费为Nginx Plus用户提供全面的支持,并致力于为NGINX开源用户提供出色的稳定性和支持。
三种新策略
我们将该策略介绍为NGINX Ingress Controller版本1.8.0中的单独的Kubernetes对象,以抽象流量管理功能。该策略可以由不同的团队在多个位置定义和应用,这带来了许多优势:包装和简化分配,Multii,- 货币家庭,重新使用和可靠性。您只需要在相应的VirtualServer(VS)或VirtualServerRoute(VSR)对象中引用策略名称即可将策略添加到应用程序中。这不仅为您提供了部署的灵活性,而且为您提供了灵活性甚至支持您将策略应用于特定领域。
(作为提醒,VS对象定义了域名的入口负载平衡配置。您可以将VS配置扩展到由Zilu组成的多个VSR。)
我们为此版本添加了三个新策略,该版本为1.8.0版中介绍的基于IP地址的访问控制列表(ACL)策略提供了补充。新的JSON Web令牌(JWT)验证和费率限制策略着重于保护基础架构。和保护Kubernetes边界中的应用资源,可以确保他们既不会被非法用户滥用,也不能被合法用户滥用。MTLS策略支持服务之间的结束 - 端接加密,同时保持有效的负载可见度,以便Ingress控制器可以为应用程序请求和响应提供路由和安全性。
JSON网络令牌验证策略
安全团队可能希望确保仅由中央政府授权的用户才能访问该应用程序。他们可以通过将JWT策略应用于VS和VSR资源来实施此应用程序。
第一步是创建一个Kubernetes策略对象来定义JWT策略。以下示例策略显然要求JWT令牌必须来自令牌HTTP标题,并根据Kubernetes Secret(JWK-Secret)确定令牌是否确定令牌由客户提供的中央提供商发行。
策略定义创建的创建后,可以通过引用策略名称下的策略名称来应用于VS或VSR资源。
通过应用此VS对象,您可以提供JWT身份验证并确定客户端是否被授权访问WebApp的上游。此功能不仅支持身份验证,而且支持单登录(SSO) - 杂项可以使用多个应用程序,只有一个应用程序一组优惠券。它也非常适合Kubernetes环境,因为它是用Kubernetes环境中的语言和框架编写的,并且很难遵守安全组织规定的身份验证标准。通过在Ingress Controller中配置身份验证,它还可以避免开发人员在其应用中实施JWT的身份验证或分析。
值得注意的是,JWT策略的默认行为是将JWT令牌传递到上游,这在每个服务都需要执行身份验证的零值环境中非常有用。
在版本1.8.0的帮助下,VS和VSR引入的标题修改功能可以在JWT中访问JWT中的特定声明,而无需分析JWT,而无需分析JWT,并将作为请求标题转发到上游。在没有身份验证的情况下对用户投资过多的计算资源,这对于共享计算平台(例如Kubernetes)尤其重要。
限制策略
安全性和可靠性团队通常希望通过将条目请求的典型值限制为真实用户的典型值来保护上游服务免受DDOS和密码猜测,并在将请求发送到上游应用程序之前选择排队。此外,他们可能需要设置状态代码以响应拒绝和过载的请求响应。
许多方法可用于识别用户的特性以执行速度限制,其中一种是通过源IP地址(使用$ binary_remote_addr嵌入式变量)。在以下策略定义中,我们将每个唯一的IP地址限制为每秒10个请求,每秒10个请求,并使用请求将状态代码503(不可用的服务)设置为拒绝过载的请求。如果您想了解所有可用的费率限制,请检查我们的费率限制文档。
速度限制策略可以应用于VS资源以响应自定义错误页面或将用户重定向到另一个群集,以便在资源超载时有效地适应应用程序。
MTLS策略
严格的安全团队需要确保Ingress控制器可以根据配置证书(CA)请求(CA)的要求(CA)(CA)验证客户和上游服务的证书。将建立它们之间的加密连接。启用了Kubernetes是一个多支付平台,管理员可以配置一个额外的安全层,以确保只有在业务逻辑处理之前,只有通过您的身份验证的客户端才能代理可识别的上游服务。
我们将介绍两种策略,以共同实现两种方式TLS(MTL):一个In -Site MTLS策略和OUT -OUT MTLS策略。MTLS策略用于验证客户提交的证书,并使用MTLS策略为了验证上游服务提供的证书。这些策略可以使用不同的CAS配置,并且可以在仅需要客户或服务器验证时独立地独立应用于VS或VSR资源。
下面的示例显示了如何将这两种策略(在 - 站点和出站MTLS中)应用于VS资源。我们定义一个In -Site MTLS策略,以根据Kubernetes Secret引用的客户端证书验证客户端证书。同时(TLS密码和协议)。
然后,我们可以将这两种策略应用于VS资源,以配置入口控制器上的MTL。
在某些情况下,您可能需要在应用程序级别而不是Ingress控制器级别配置MTL。为此,您可以使用optional_no_ca值的验证字段来填充策略,然后设置$ ssl_client_escaped_cert cott cott ince客户端的VS或VSR资源的请求者字段副本将证书应用于应用程序。有关更多详细信息,请检查文档。
可见度提高
1.9.0版引入了几个新的入口控制器指标,并丰富了现有指标。所有这些指标都可以帮助您了解应用程序和用户的行为。为了更好地了解指标之间的相互关系,我们还添加了一个新的Grafana仪器面板。
Prometheus指标的Kubernetes上下文
导出到Ingress控制器指示器上游的Prometheus上游的上游入口控制器指标现在使用相应的Kubernetes服务名称,POD和INGRESS资源名称进行注释。通过将性能与Kubernetes对象相关联,可以简化应用程序的处理过程。例如,发现与性能较差的上游组相对应的POD(至于每秒请求的数量)可以帮助您找到根本原因或采取纠正措施并删除POD。
在这里,我们展示了nginx_ingress_controller_upstream_reserver_reserver_reserver_reserver_reserver_reserver_reserver_reserver_reserver_response的注释示例。
重新加载原因
借助Nginx Plus Ingress Controller,Back -End Server -side点不需要重新加载Nginx Plus配置即可更改它。在NGINX开放源入口控制器的帮助下,需要重新加载端点更改,因此我们现在报告重新加载并连续跟踪重新加载的原因确定频繁的端点是否更改触发配置会在高度动态的Kubernetes环境中引起性能问题。
下表显示了对应于重新加载的两个注释。红线表示由端点触发的配置的重新加载数,绿线代表其他原因引起的原因。
工作流程详细信息
每当配置和重新加载入口控制器时,都会生成一组新的NGINX工作流程,并且先前的工作过程将继续运行,直到终止所有连接的连接。,这也意味着先前的工作流程将在退出之前继续消耗资源。因此,经常重新加载配置将导致缺乏资源和停止。
为了帮助您管理此限制,我们提供了一个内置的指标,可以显示在任何给定时间运行的工人的数量。在此指示器中,您可以在决定停止配置或重建Ingress Controller测度时采取适当的措施划痕。
以下是nginx_ingress_controller_nginx_worker_processses_total的Prometheus图。红线表示当前的工作过程数,而绿线代表重新加载之前的工作人员数量。
请求延迟和分发
Ingress Controller现在可以报告每个上游应用程序的请求延迟。此指标将延迟到存储桶,以帮助您更好地了解应用程序的性能和用户体验。
在Prometheus中,此指标称为nginx_ingress_controller_upstream_server_server_response_latency_ms_bucket。
请注意,如果Ingress Controller向Prometheus提供此指标,则必须在命令行中包含enable -lay -Lay -metric徽标。如果您想了解详细信息,请检查文档。
Grafana仪表板
版本1.9.0添加了几个可以使用所有可用指标的Grafana仪表板,从而大大增强了可视化功能。仪表面板还可以识别与指示器相关的Kubernetes对象。
仪器面板不仅提供有关应用程序的见解,而且还可以帮助您快速确定不良行为,简化失败过程并支持您快速采取适当的措施。
服务网格集成
DevOps团队需要将服务网格中的应用程序连接到与Ingres Controller的群集外服务。IngressController可以与新发布的NGINX服务网格(NSM)无缝集成,尤其是与外部服务相关的输入和退出MTLS功能。
对于In -Site MTLS,Ingress Controller可以通过接收网格证书和从CA.For MTL从车站的CA.For MTL中进行键参与网格TL,您可以将入口控制器配置为出口站的终点为电网因此,NSM控制的服务可以与不属于网格的外部服务安全通信。
其他新功能
优雅地处理宿主冲突
可以为同一主机创建标准的kubernetes入口资源和nginx VirtualServer资源。无法控制。不幸的是,发生冲突时没有错误提醒或警告。
如果多个资源正在努力使用相同的主机,则版本1.9.0将通过选择“最古老的”资源来优雅地处理主机冲突。,以及资源中描述的事件和状态字段将报告此冲突(例如,在Kubectl的输出中描述vs Command Outputmiddle)。
kubernetes入口V1 API更新
今年早些时候,Kubernetes 1.18发布了Ingress V1 Apiversion更新,与此同时,我们也相应地对其进行了更改。字段。从本文中,我们采用了IngressClass资源和IngresClassName字段的入口对象。我们还对CLI参数进行了相应的更改以适应此更改。有关更多详细信息,请检查文档。我们始终承诺兼容,因此我们仍然支持先前的配置语义。
标准Kubernetes环境支持操作员
我们今年早些时候为OpenShift环境启动了NGINX入口操作员。现在可以使用标准的Kubernetes环境。如果您想了解部署说明,请检查我们的GitHub存储库。
想要及时,全面地获取与NGINX相关的技术干货,互动问题,系列课程和活动资源?请访问NGINX开源社区:
- 官方网站:nginx.org.cn
-Chat Wechat公共帐户:https://mp.weixin.qq.com/s/xve5yvdbmjtpv2alsifwjg
-Chat Wechat Group:https://www.nginx.org.cn/stative/pc/images/homepage/qr-code.png?V = 16213133544
-b站:https://space.bilibili.com/628384319