DNS Configuration

Introduction

DNS records must be configured to point to your Manifest deployment before users can access the platform. All subdomains should resolve to the IP address or load balancer of your Kubernetes cluster's ingress controller (i.e. the server's public IP address).

Wildcard DNS Recommendation

We recommend using wildcard DNS records where possible. This approach offers several advantages:

  • A wildcard record *.buckets.<your-domain> can cover all 15+ bucket subdomains
  • This simplifies management and future-proofs against new bucket additions
  • Two wildcard records (*.<your-domain> and *.buckets.<your-domain>) can cover all required DNS entries

Using wildcards reduces configuration complexity and ensures new services are automatically accessible without additional DNS changes.

Required DNS Records

The following DNS records are required for a complete Manifest deployment. All records should point to your cluster's ingress IP address or load balancer.

Core Application Services

SubdomainPurpose
appMain web application
apiAPI endpoint
authAuthentication service

Object Storage (MinIO)

SubdomainPurpose
console.minioMinIO web console
bucketsBase bucket endpoint

Storage Buckets

These subdomains can be covered by a single wildcard record *.buckets.<your-domain>:

SubdomainPurpose
downloadable-files.bucketsDownloadable file storage
ingestion-epss.bucketsEPSS data ingestion
ingestion-kev.bucketsKEV data ingestion
ingestion-nvd.bucketsNVD data ingestion
ingestion-osv.bucketsOSV data ingestion
sbom-converted.bucketsConverted SBOM storage
sbom-enriched.bucketsEnriched SBOM storage
sbom-extracted-data.bucketsExtracted SBOM data
sbom-merged.bucketsMerged SBOM storage
sbom-original.bucketsOriginal SBOM storage
sbom-updated.bucketsUpdated SBOM storage
vex-original.bucketsVEX document storage
mongodb-enterprise-backups.bucketsMongoDB backup storage
mongodb-enterprise-oplogs.bucketsMongoDB oplog storage
postgres-backups.bucketsPostgreSQL backup storage

Monitoring

SubdomainPurpose
grafanaGrafana monitoring dashboard

Identity & Access Management (Optional)

The following records are necessary if deploying Keycloak as part of the Manifest Self-Hosted deployment.

SubdomainPurpose
keycloakKeycloak identity provider
keycloak-adminKeycloak administration console

Configuration Examples

Wildcard Approach (Recommended)

Using wildcard DNS records minimizes configuration and maintenance:

# Two A records (or CNAME records) cover all subdomains
*.<your-domain>           A    <ingress-ip>
*.buckets.<your-domain>   A    <ingress-ip>

Example with a real domain:

*.manifest.example.com           A    192.168.1.100
*.buckets.manifest.example.com   A    192.168.1.100

Individual Records Approach

If wildcard records are not supported, create individual A or CNAME records for each subdomain:

# Core Application Services
app.<your-domain>                              A    <ingress-ip>
api.<your-domain>                              A    <ingress-ip>
auth.<your-domain>                             A    <ingress-ip>

# Identity & Access Management
keycloak.<your-domain>                         A    <ingress-ip>
keycloak-admin.<your-domain>                   A    <ingress-ip>

# Object Storage
console.minio.<your-domain>                    A    <ingress-ip>
buckets.<your-domain>                          A    <ingress-ip>

# Storage Buckets
downloadable-files.buckets.<your-domain>       A    <ingress-ip>
ingestion-epss.buckets.<your-domain>           A    <ingress-ip>
ingestion-kev.buckets.<your-domain>            A    <ingress-ip>
ingestion-nvd.buckets.<your-domain>            A    <ingress-ip>
ingestion-osv.buckets.<your-domain>            A    <ingress-ip>
sbom-converted.buckets.<your-domain>           A    <ingress-ip>
sbom-enriched.buckets.<your-domain>            A    <ingress-ip>
sbom-extracted-data.buckets.<your-domain>      A    <ingress-ip>
sbom-merged.buckets.<your-domain>              A    <ingress-ip>
sbom-original.buckets.<your-domain>            A    <ingress-ip>
sbom-updated.buckets.<your-domain>             A    <ingress-ip>
vex-original.buckets.<your-domain>             A    <ingress-ip>
mongodb-enterprise-backups.buckets.<your-domain>   A    <ingress-ip>
mongodb-enterprise-oplogs.buckets.<your-domain>    A    <ingress-ip>
postgres-backups.buckets.<your-domain>         A    <ingress-ip>

# Monitoring
grafana.<your-domain>                          A    <ingress-ip>

Verification

After configuring DNS records, verify propagation using dig or nslookup:

# Using dig
dig app.<your-domain>
dig +short app.<your-domain>

# Using nslookup
nslookup app.<your-domain>

Verify that the returned IP address matches your cluster's ingress IP. DNS propagation may take up to 48 hours depending on your DNS provider and TTL settings, though most changes propagate within minutes.

To verify wildcard records are working:

# Test a bucket subdomain
dig +short sbom-original.buckets.<your-domain>

# Test a core service
dig +short api.<your-domain>

Both queries should return the same ingress IP address.