SDKs ask API server for preferred "Services" config based on whether you are "internal" or "external"
As part of SDK startup, it will:
- Fetch the discovery document
- Make a call to a new "services" endpoint eg /arvados/v1/config/services
- The API server / controller determines if the client is "internal" or "external" based on source IP address
- The services endpoint returns the "Services" and "Volumes" portion of the public exported config with the preferred endpoints filled in for "ExternalURL" and "AccessViaHosts".
- SDK uses returned URLs in Services list to communicate with Arvados components, eg Controller, Websockets
- Use Volumes and AccessViaHosts to determine whether to contact keepstore directly or use keepproxy. (For external clients, AccessViaHosts URL == keepproxy URL?)