From f702bcb25fa058e3fb58faa6d8e5c11f765fcb5e Mon Sep 17 00:00:00 2001 From: Neer Friedman Date: Sat, 17 Feb 2024 12:18:52 +0200 Subject: [PATCH 1/2] fix issue with unresolved backends with ExternalName --- rootfs/etc/nginx/lua/balancer.lua | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/rootfs/etc/nginx/lua/balancer.lua b/rootfs/etc/nginx/lua/balancer.lua index 00104c89d..89be261d3 100644 --- a/rootfs/etc/nginx/lua/balancer.lua +++ b/rootfs/etc/nginx/lua/balancer.lua @@ -77,8 +77,10 @@ local function resolve_external_names(original_backend) local endpoints = {} for _, endpoint in ipairs(backend.endpoints) do local ips = dns_lookup(endpoint.address) - for _, ip in ipairs(ips) do - table.insert(endpoints, { address = ip, port = endpoint.port }) + if #ips ~= 1 or ips[1] ~= endpoint.address then + for _, ip in ipairs(ips) do + table.insert(endpoints, { address = ip, port = endpoint.port }) + end end end backend.endpoints = endpoints @@ -104,15 +106,19 @@ local function is_backend_with_external_name(backend) end local function sync_backend(backend) + -- We resolve external names before checking if the endpoints are empty + -- because the behavior for resolve_external_names when the name was not + -- resolved is to return an empty table so we set the balncer to nil below + -- see https://github.com/kubernetes/ingress-nginx/pull/10989 + if is_backend_with_external_name(backend) then + backend = resolve_external_names(backend) + end + if not backend.endpoints or #backend.endpoints == 0 then balancers[backend.name] = nil return end - if is_backend_with_external_name(backend) then - backend = resolve_external_names(backend) - end - backend.endpoints = format_ipv6_endpoints(backend.endpoints) local implementation = get_implementation(backend) From 0fd734ae7a5f24383b402c6e97d0779fe648e910 Mon Sep 17 00:00:00 2001 From: Neer Friedman Date: Fri, 3 Jan 2025 16:47:54 +0200 Subject: [PATCH 2/2] Update rootfs/etc/nginx/lua/balancer.lua Co-authored-by: Pierre Ozoux --- rootfs/etc/nginx/lua/balancer.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rootfs/etc/nginx/lua/balancer.lua b/rootfs/etc/nginx/lua/balancer.lua index 89be261d3..e6ddc1907 100644 --- a/rootfs/etc/nginx/lua/balancer.lua +++ b/rootfs/etc/nginx/lua/balancer.lua @@ -108,7 +108,7 @@ end local function sync_backend(backend) -- We resolve external names before checking if the endpoints are empty -- because the behavior for resolve_external_names when the name was not - -- resolved is to return an empty table so we set the balncer to nil below + -- resolved is to return an empty table so we set the balancer to nil below -- see https://github.com/kubernetes/ingress-nginx/pull/10989 if is_backend_with_external_name(backend) then backend = resolve_external_names(backend)