[openstack-dev] Moniker renamed to Designate, and applies for Incubation.

Jay Pipes jaypipes at gmail.com
Sun Jun 16 18:46:00 UTC 2013


On 06/16/2013 10:39 AM, Mac Innes, Kiall wrote:
> On 16/06/13 02:40, Monty Taylor wrote:
>> SO - As a huge supporter of using dns for things (since it's the world's
>> most scalable database), can I turn this around a little bit?
>>
>> Why don't we use DNS and/or a DNSaaS implementation to do the things in
>> the list that are above that are currently keystone's job in openstack?
>> Or, stated differently, why isn't this part of keystone, or keystone
>> part of this? It seems like some of the things that keystone needs to do
>> moving forward (global registry) have been working in the DNS for, well,
>> a long time...
>
> So - I have to admit, I've not been following keystones plans very closely!
>
> I'm assuming you're taking about using DNS for discovery of
> regions/services/endpoints etc. Essentially replacing the service
> catalog? If this is what's being discussed, then absolutely. That is
> what SRV records were designed for.

Ah, but there's a catch. SRV records don't contain a number of pieces of 
information that the service catalog supplies...

The service type -- is it a compute service? an identity service? a 
volume service? The only thing the SRV record gives you is "it's a 
service"... you then have to do a further query (and assume some sort of 
standard information discovery format) on the URI in order to determine 
what it is. Since all of our endpoints are TCP/IP, there is no way to 
use the protocol field of the SRV record to differentiate different 
service types. You would still need some sort of service catalog being 
served up from the URIs contained in the SRV record target field in 
order for the OpenStack clients to make sense of anything.

The endpoint interfaces -- unfortunately, Keystone's service catalog 
implementation uses a (IMHO) silly concept of admin/public/internal 
"interfaces" for each service endpoint. [1] There is no way to use a SRV 
record to indicate to clients whether a URL should be considered an 
admin URL, an internal URL, or a public URL. Frankly, I think the entire 
concept of endpoint interfaces should just be ditched in Keystone. The 
concept is silly. If there is a separate "admin" interface that should 
be physically or logically separate from some other interface, just make 
it a separate service... or just use RBAC like any sane service would.

We could use a TXT record to inject some data about the type of service 
a DNS record is, though. That way, we could write a blob of JSON into 
the TXT record for the target domain name that would contain some 
information about the service endpoints.

> So - Should Keystone and Designate merge? I don't believe they should.
> Keystone is the OpenStack Identity service - It provides authentication
> and authorization services, which happens to include a list of services
> to which you are authorized to access.

I don't believe they should merge, as I think Designate is targeted at 
the tenant, not the underlying services needing a service catalog.

What I think is a better idea is to write a Designate catalog driver for 
Keystone, that itself could call a Designate endpoint to write the 
afortementioned SRV and TXT records to whatever DNS backends that 
Designate supports.

I think the entire service catalog module in Keystone should be 
rewritten, starting from a new object model for the objects involved in 
the service catalog:

* Region -- this object isn't a first-class citizen in Keystone right 
now, and its design suffers because of it. By Region I refer to a 
generic area with no geographic connotation to it.
* Endpoint -- A URI publishing a service of some kind
* ServiceType -- the type of service available at an endpoint

Once the object model is fully fleshed out, then the existing API which 
returns a denormalized, inflexible, unfiltered list of all endpoints in 
all regions, should be refactored to promote the natural regional 
hierarchy that DNS naturally fits.

> I'm not sure hosting $customer's DNS is an obvious fit within that scope.

No, it definitely isn't.

Best,
-jay

[1] 
https://github.com/openstack/identity-api/blob/master/openstack-identity-api/src/markdown/identity-api-v3.md#endpoints-v3endpoints




More information about the OpenStack-dev mailing list