Skip to main content

DNS Records

This page lists the DNS records to create for an on-premise DuoKey deployment. Records are split into external (resolvable by Microsoft 365 / Office clients and any remote users) and internal (resolvable inside your corporate network and the cluster).

The DKE endpoint name is critical

The DKE key endpoint hostname must be identical in three places: the DNS record, the TLS certificate SAN, and the DKE endpoint URL configured on the Microsoft Purview sensitivity label. A mismatch is the most common cause of DKE failures — see DKE Troubleshooting.

Split-horizon resolution​

Office clients must reach the DKE endpoint wherever protected content is opened — on the corporate network and, for remote users, from the internet. Use split-horizon DNS so the same hostname resolves to the right entry point from each network, while the hostname and TLS certificate stay consistent.

Split-horizon DNS resolution
Remote user / Office
public DNS
dke.example.compublic ingress / reverse proxy
Internal user / Office
internal DNS
dke.example.cominternal LB VIP
OpenShift Ingress Router
route
Cockpit API · DKE endpoint

The same hostname resolves to a public ingress for remote users and to an internal LB VIP for on-network users; both paths reach the OpenShift Ingress Router and the DKE endpoint.

External DNS records​

Create these in your public / external DNS zone (resolvable by Office clients and remote users). Point them at your public ingress VIP or reverse proxy.

Hostname (example)TypeTargetPurpose
dke.example.comA / CNAMEPublic ingress VIP / reverse proxyDKE key endpoint — Office clients fetch the key here (must match the Purview label URL)
cockpit.example.comA / CNAMEPublic ingress VIPCockpit admin/user UI (only if accessed externally)
cockpit-api.example.comA / CNAMEPublic ingress VIPCockpit API (only if accessed externally)
Internal-only DKE

If all users open DKE-protected content only from inside the corporate network, the DKE endpoint can be internal-only (no public record). Confirm your remote-access scenario before deciding.

Internal DNS records​

Create these in your internal DNS zone (corporate network / cluster).

Hostname (example)TypeTargetPurpose
*.apps.<cluster>.example.localA / wildcardIngress Router VIPOpenShift application routes (Cockpit, DKE/KMS/KMIP, etc.)
api.<cluster>.example.localAControl-plane LB VIPOpenShift API server
dke.example.comA / CNAMEInternal LB VIPDKE endpoint (internal view of the split-horizon name), served by the Cockpit API
cockpit.example.localA / CNAMEIngress Router VIPCockpit UI (internal access)
cockpit-api.example.localA / CNAMEIngress Router VIPCockpit API — DKE / KMS / KMIP endpoints (internal access)
openbao.example.localAOpenBao VIP / VMsSecret engine
postgres.example.localAPostgreSQL VIP / primaryDatabase
gitlab.example.localA / CNAMEGitLab VMSource & registry (GitOps)
argocd.example.localA / CNAMEIngress Router VIPGitOps console (ArgoCD)
harbor.example.localA / CNAMEInternal Harbor (mirror)Air-gapped image registry
grafana.example.localA / CNAMEIngress Router VIPObservability dashboards
vmselect.example.localA / CNAMEIngress Router VIPVictoriaMetrics query endpoint (optional, internal)
vlogs.example.localA / CNAMEIngress Router VIPVictoriaLogs query endpoint (optional, internal)
In-cluster services don't need DNS records

Components that talk to each other inside the cluster (Redis, vmagent/vmstorage/vminsert, Vector, internal service-to-service calls) use Kubernetes service discovery — no external/internal DNS record is required. Only create records for endpoints that humans or external systems reach by name.

Recommendations​

  • TTL: use a moderate TTL (e.g. 300–3600s). Lower it temporarily before a planned VIP/endpoint change to speed propagation.
  • Health-checked VIP: point records at a load-balancer VIP that health-checks the backends, not at a single node.
  • Certificates: ensure every externally-reachable hostname is a SAN on its TLS certificate (see Network Security → TLS).
  • Keep names stable: changing the DKE endpoint hostname later requires updating the Purview label, the certificate, and re-validating clients.

Validation​

# Resolve from a client network
nslookup dke.example.com
dig +short dke.example.com

# Confirm the DKE endpoint answers over TLS with the public key (JSON)
curl -I https://dke.example.com/<keyname>

If resolution or the key endpoint test fails, see DKE Troubleshooting → Step 1.