add support for ExternalName service type in dynamic mode

This commit is contained in:
Elvin Efendi 2018-07-17 22:27:10 -04:00
parent bdb5ddc473
commit d4faf68416
13 changed files with 316 additions and 18 deletions

View file

@ -1,5 +1,7 @@
local ngx_balancer = require("ngx.balancer")
local json = require("cjson")
local util = require("util")
local dns_util = require("util.dns")
local configuration = require("configuration")
local round_robin = require("balancer.round_robin")
local chash = require("balancer.chash")
@ -40,6 +42,19 @@ local function get_implementation(backend)
return implementation
end
local function resolve_external_names(original_backend)
local backend = util.deepcopy(original_backend)
local endpoints = {}
for _, endpoint in ipairs(backend.endpoints) do
local ips = dns_util.resolve(endpoint.address)
for _, ip in ipairs(ips) do
table.insert(endpoints, { address = ip, port = endpoint.port })
end
end
backend.endpoints = endpoints
return backend
end
local function sync_backend(backend)
local implementation = get_implementation(backend)
local balancer = balancers[backend.name]
@ -59,6 +74,11 @@ local function sync_backend(backend)
return
end
local service_type = backend.service and backend.service.spec and backend.service.spec["type"]
if service_type == "ExternalName" then
backend = resolve_external_names(backend)
end
balancer:sync(backend)
end