@@ -77,8 +77,10 @@ local function resolve_external_names(original_backend)
77
77
local endpoints = {}
78
78
for _ , endpoint in ipairs (backend .endpoints ) do
79
79
local ips = dns_lookup (endpoint .address )
80
- for _ , ip in ipairs (ips ) do
81
- table.insert (endpoints , { address = ip , port = endpoint .port })
80
+ if # ips ~= 1 or ips [1 ] ~= endpoint .address then
81
+ for _ , ip in ipairs (ips ) do
82
+ table.insert (endpoints , { address = ip , port = endpoint .port })
83
+ end
82
84
end
83
85
end
84
86
backend .endpoints = endpoints
@@ -104,15 +106,19 @@ local function is_backend_with_external_name(backend)
104
106
end
105
107
106
108
local function sync_backend (backend )
109
+ -- We resolve external names before checking if the endpoints are empty
110
+ -- because the behavior for resolve_external_names when the name was not
111
+ -- resolved is to return an empty table so we set the balancer to nil below
112
+ -- see https://github.com/kubernetes/ingress-nginx/pull/10989
113
+ if is_backend_with_external_name (backend ) then
114
+ backend = resolve_external_names (backend )
115
+ end
116
+
107
117
if not backend .endpoints or # backend .endpoints == 0 then
108
118
balancers [backend .name ] = nil
109
119
return
110
120
end
111
121
112
- if is_backend_with_external_name (backend ) then
113
- backend = resolve_external_names (backend )
114
- end
115
-
116
122
backend .endpoints = format_ipv6_endpoints (backend .endpoints )
117
123
118
124
local implementation = get_implementation (backend )
0 commit comments