Domain settings
RADKit connects to the cloud through a domain — a named endpoint that identifies
a specific RADKit Cloud deployment (e.g. IQ_US for the IQ Cloud production
cluster in the US region). Two settings control which domains a client or service
uses:
cloud_client.connect_domains— where to actively connect.cloud_client.accept_domains— which forwarder redirects to accept (and a secondary source of connection candidates).
See Settings reference for the individual parameter reference entries.
Domain tree
Domains are organized in a hierarchical tree. A group is a named collection of domains or sub-groups. Groups can be referenced by name in settings and are expanded depth-first when resolved.
IQ_CLOUD ("IQ Cloud") ← visible, use in connect_domains
├── IQ_US
├── IQ_EMEA
└── IQ_APJC
CXP_CLOUD ("CXP Cloud") ← hidden
├── CXP_US
├── CXP_EMEA
└── CXP_APJC
RADKIT_CLOUD ("RADKit Cloud") ← visible (legacy)
STAGE ("Stage") ← hidden (for internal/testing use)
├── IQ_CLOUD_STAGE ("IQ Cloud Stage")
│ ├── IQ_US_NPRD
│ ├── IQ_EMEA_NPRD
│ ├── IQ_APJC_NPRD
│ └── RADKIT_CLOUD_STAGE
└── CXP_CLOUD_STAGE ("CXP Cloud Stage")
├── CXP_US_NPRD
├── CXP_EMEA_NPRD
├── CXP_APJC_NPRD
└── RADKIT_CLOUD_STAGE
DEVEL ("Devel") ← hidden (for development use)
├── IQ_CLOUD_DEVEL ("IQ Cloud Devel")
│ ├── IQ_DEV_US
│ └── RADKIT_CLOUD_DEVEL
└── CXP_CLOUD_DEVEL ("CXP Cloud Devel")
├── CXP_US_DEV
└── RADKIT_CLOUD_DEVEL
IQ_CLOUD, CXP_CLOUD, and RADKIT_CLOUD are independent root-level entries.
An identity from RADKIT_CLOUD can be used with any production domain, but
identities are not reusable across IQ_CLOUD and CXP_CLOUD subtrees.
Cross-environment identities (e.g. production vs stage) are never reused.
How domains are resolved
Both settings accept a list of domain names or group names. A group such as
"IQ_CLOUD" is a named collection of regional domains (IQ_US, IQ_EMEA,
IQ_APJC) and is expanded depth-first when resolved.
The active connection target is determined by the following algorithm:
leaf_connect = deduplicate(flatten(connect_domains))
leaf_accept = deduplicate(flatten(accept_domains))
candidates = deduplicate(leaf_connect + leaf_accept) # connect takes priority
active = candidates[0] # first entry wins
connect_domains entries appear first in candidates. accept_domains
entries are appended after, minus any already present.
When both lists are empty, candidates is empty and no connection is attempted.
Role of accept_domains
accept_domains serves different purposes depending on the component:
- radkit-client — redirect validation and additional connection candidates
When the cloud forwarder redirects the client to a different domain, the target domain is checked against the resolved
accept_domainsleaf list. Redirects to domains outside this list are rejected. In addition, anyaccept_domainsleaves not already present inleaf_connectare appended tocandidates(lower priority).- radkit-service — additional connection candidates only
The service does not receive forwarder redirects.
accept_domainsentries are appended tocandidatesafterconnect_domainsleaves, but since fallback only retriesconnect_domainscandidates,accept_domainsdoes not affect which domain the service ultimately connects to. For the service, regional failover is controlled entirely by the order of entries inconnect_domains.
Default values
|
|
|
|---|---|---|
radkit-client |
|
|
radkit-service |
|
|
Both components connect to the IQ Cloud production group (IQ_US is listed
first in the group) out of the box without any configuration.
Common scenarios
Default — connect to IQ Cloud production
No configuration needed. Both client and service use
connect_domains = ["IQ_CLOUD"] and accept_domains = ["IQ_CLOUD"] by
default, which resolves to:
candidates = [IQ_US, IQ_EMEA, IQ_APJC]
The active connection target is IQ_US (first leaf of the IQ_CLOUD group).
Connect to all production domains (IQ + CXP + RADKit Cloud)
# TOML
[cloud_client]
connect_domains = ["IQ_CLOUD", "CXP_CLOUD", "RADKIT_CLOUD"]
accept_domains = ["IQ_CLOUD", "CXP_CLOUD", "RADKIT_CLOUD"]
# candidates = [IQ_US, IQ_EMEA, IQ_APJC, CXP_US, CXP_EMEA, CXP_APJC, RADKIT_CLOUD]
Prefer a specific region
Set connect_domains to put the preferred region first:
# TOML (radkit-client settings.toml)
[cloud_client]
connect_domains = ["IQ_US", "IQ_CLOUD"]
accept_domains = ["IQ_CLOUD"]
# candidates = [IQ_US, IQ_EMEA, IQ_APJC]
# → connects to IQ_US; falls back to IQ_EMEA then IQ_APJC
Service pinned to a single region
Override the defaults to restrict the service to one region:
# TOML (radkit-service settings.toml)
[cloud_client]
connect_domains = ["IQ_US"]
accept_domains = ["IQ_CLOUD"]
The service connects to IQ_US.
CXP Cloud only
To use the CXP Cloud deployment instead of IQ Cloud:
# TOML
[cloud_client]
connect_domains = ["CXP_CLOUD"]
accept_domains = ["CXP_CLOUD"]
CLI — override domain at startup
The --domain flag is a shorthand that sets both connect_domains and
accept_domains to the given value:
radkit-client --domain IQ_US
# equivalent to:
# --setting cloud_client.connect_domains '["IQ_US"]'
# --setting cloud_client.accept_domains '["IQ_US"]'
Restrict to a single leaf domain (no redirects)
connect_domains = ["IQ_US"]
accept_domains = ["IQ_US"]
Only IQ_US is in candidates and only redirects to IQ_US are
accepted.
Fallback on missing identity
This section is relevant when using certificate-based authentication
(certificate_login for the client, or service identity obtained during
enrollment). It applies to both radkit-client and radkit-service.
Each domain issues its own (serial number, certificate) identity pair. An
identity from any domain within the same subtree can be used — for example, an
IQ_US identity can authenticate to IQ_EMEA because both are leaves
of the IQ_CLOUD group. An identity from the root-level RADKIT_CLOUD
domain can be used with any production domain. Cross-environment identities
(e.g. production vs stage) are never reused.
If no usable identity is found for candidates[0], RADKit tries the next
candidate — but only if that candidate originated from connect_domains.
Candidates that come exclusively from accept_domains are not tried as
fallback targets.
Example:
connect_domains = ["IQ_US", "IQ_EMEA"]
accept_domains = ["IQ_CLOUD"]
# candidates = [IQ_US, IQ_EMEA, IQ_APJC]
# IQ_US → from connect → tried first
# IQ_EMEA → from connect → fallback if no usable identity for IQ_US
# IQ_APJC → from accept only → NOT tried as fallback