When resolving domain, currently we take one of the DNS record randomly. When we want to do service discovery via DNS, sometimes we hope the domain resolving will return all the records. For example, with:
"nodes": {
"test.consul.service": 1
}
We may want to get all IPs instead of a random one.
So my purpose is to provide a per-node dns selector to control the behavior.
For example,
"nodes": {
{"host": "test.consul.service", "weight": 1, "selector": "random"}
}
is equal to previous configuration.
While
"nodes": {
{"host": "test.consul.service", "weight": 1, "selector": "all"},
{"host": "1.1.1.1", "weight": 1}
}
with test.consul.service be resolved as 1.1.1.2 and 1.1.1.3 will get this result:
"nodes": {
{"host": "1.1.1.1", "weight": 2},
{"host": "1.1.1.2", "weight": 1},
{"host": "1.1.1.3", "weight": 1},
}
Note that all the IPs from test.consul.service share the same weight.
And the selector doesn't affect SRV record, which is a difference story.
When resolving domain, currently we take one of the DNS record randomly. When we want to do service discovery via DNS, sometimes we hope the domain resolving will return all the records. For example, with:
We may want to get all IPs instead of a random one.
So my purpose is to provide a per-node dns selector to control the behavior.
For example,
is equal to previous configuration.
While
with
test.consul.servicebe resolved as1.1.1.2and1.1.1.3will get this result:Note that all the IPs from
test.consul.serviceshare the same weight.And the selector doesn't affect SRV record, which is a difference story.