首页 > 解决方案 > 部署已准备就绪,但 nginx-ingress 仍然需要重新加载并导致 503 持续几秒钟

问题描述

我使用 nginx-ingress 创建了一个部署,并且我的 pod 定义了 readinessProbe 和 livenessProbe。部署连接到服务和入口,通过安全端点提供服务(例如https://myservice.com

部署开始一段时间后,pod 被标记为健康,部署状态变为就绪。这很好,除了 nginx-ingress 仍然需要重新加载新配置,在部署标记为就绪后立即尝试访问端点时导致 503 几秒钟。

我如何知道端点何时真正为流量做好准备?

标签: kubernetesnginx-ingress

解决方案


Nginx 入口现在支持使用指令通过lua_nginx_module对后端更改进行动态更新。balancer_by_lua

您需要将标志传递给Nginx 入口控制器部署--enable-dynamic-configuration=true中的容器参数(例如):

args:
        - /nginx-ingress-controller
        - --configmap=$(POD_NAMESPACE)/nginx-configuration
        - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
        - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
        - --publish-service=$(POD_NAMESPACE)/ingress-nginx
        - --annotations-prefix=nginx.ingress.kubernetes.io
        - --enable-dynamic-configuration=true

这允许内部 Lua 处理程序将新端点添加到共享内存区域,添加一些负载平衡,然后将请求中继到实际后端,而无需重写控制器中的配置文件。


推荐阅读