This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Managing Domains

    Before you begin

    This tutorial assumes you have already:

    Understanding Domains

    A Domain resource manages domain name information and ownership in Datum. Once verified, the domain can be used with platform resources like HTTPProxy and Gateway to configure custom hostnames.

    Key concepts:

    • Domain Name: Any domain name, not necessarily the root domain (e.g., team-a.example.com is valid)
    • Ownership Verification: Proves you control the domain via DNS TXT record or HTTP token
    • Platform Integration: Enables use of verified domains with platform resources
    • Multiple Domains: Any number of Domain resources can be created across namespaces for the same domain name

    Current Use Cases

    • Team Isolation: Create team-a.example.com Domain in team-a namespace to enable *.team-a.example.com hostnames
    • Environment Separation: Verify dev.example.com and prod.example.com in different namespaces
    • Subdomain Management: Verify specific subdomains rather than managing entire root domains

    Creating a Domain

    Create a Domain resource to manage your domain name and verify ownership:

    cat <<EOF | kubectl apply -f -
    apiVersion: networking.datumapis.com/v1alpha
    kind: Domain
    metadata:
      name: example-com
    spec:
      domainName: example.com
    EOF
    

    Save and apply the following resource to your project:

    apiVersion: networking.datumapis.com/v1alpha
    kind: Domain
    metadata:
      name: example-com
    spec:
      domainName: example.com
    

    Checking Domain Status

    After creating the Domain, check its status:

    kubectl get domain example-com -o wide
    

    You should see output similar to:

    NAME          DOMAIN NAME    AGE   VERIFIED   VERIFICATION MESSAGE
    example-com   example.com    5s    False      Update your DNS provider with record defined in `status.verification.dnsRecord`, or HTTP server with token defined in `status.verification.httpToken`.
    

    The Domain will initially show VERIFIED: False because ownership verification is required for platform integration features.

    Verifying Domain Ownership

    Domain ownership verification proves you control the domain name, enabling platform integration features like custom hostnames. Datum supports two verification methods: DNS and HTTP. You only need to complete one method successfully.

    Getting Verification Details

    First, get the verification requirements for your Domain:

    kubectl get domain example-com -o yaml
    

    Look for the status.verification section:

    status:
      verification:
        dnsRecord:
          name: _datum-custom-hostname.example.com
          type: TXT
          content: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        httpToken:
          url: http://example.com/.well-known/datum-custom-hostname-challenge/12345678-90ab-cdef-1234-567890abcdef
          body: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        nextVerificationAttempt: "2025-01-15T10:30:00Z"
    

    Method 1: DNS Verification

    Add a TXT record to your DNS provider using the values from status.verification.dnsRecord:

    1. Record Name: Use the exact name value (e.g., _datum-custom-hostname.example.com)
    2. Record Type: TXT
    3. Record Value: Use the exact content value

    DNS propagation may take several minutes. The system will automatically attempt verification periodically.

    Method 2: HTTP Verification

    Serve the verification token at the URL specified in status.verification.httpToken:

    1. URL Path: Use the exact url path (e.g., /.well-known/datum-custom-hostname-challenge/12345678-90ab-cdef-1234-567890abcdef)
    2. Response Body: Return the exact body content as plain text
    3. Response Code: Must return HTTP 200

    Checking Verification Status

    Monitor verification progress:

    kubectl get domain example-com -o wide -w
    

    When verification succeeds, the output will show:

    NAME          DOMAIN NAME    AGE   VERIFIED   VERIFICATION MESSAGE
    example-com   example.com    5m    True       Domain verification successful
    

    Verification Details

    For detailed verification status, check the conditions:

    kubectl describe domain example-com
    

    Look for the Verified condition in the status section:

    Status:
      Conditions:
        Type:               Verified
        Status:             True
        Reason:             Verified
        Message:            Domain verification successful
        Last Transition Time: 2025-01-15T10:35:00Z
    

    Multiple Domains for the Same Domain Name

    Any number of Domain resources can be created across different namespaces and projects for the same domainName value. Each Domain resource requires individual verification.

    Use Case: Team-Based Domain Management

    Different teams can verify the same domain name in their respective namespaces:

    # In team-a namespace
    apiVersion: networking.datumapis.com/v1alpha
    kind: Domain
    metadata:
      name: example-com
      namespace: team-a
    spec:
      domainName: example.com
    ---
    # In team-b namespace
    apiVersion: networking.datumapis.com/v1alpha
    kind: Domain
    metadata:
      name: example-com
      namespace: team-b
    spec:
      domainName: example.com
    

    Both Domain resources must be verified independently using the same DNS or HTTP verification process.

    Use Case: Subdomain-Specific Verification

    Teams can verify specific subdomains rather than managing entire root domains:

    # Team A verifies their subdomain
    apiVersion: networking.datumapis.com/v1alpha
    kind: Domain
    metadata:
      name: team-a-subdomain
    spec:
      domainName: team-a.example.com
    ---
    # Team B verifies their subdomain
    apiVersion: networking.datumapis.com/v1alpha
    kind: Domain
    metadata:
      name: team-b-subdomain
    spec:
      domainName: team-b.example.com
    

    After verification:

    • Team A can use team-a.example.com and *.team-a.example.com hostnames
    • Team B can use team-b.example.com and *.team-b.example.com hostnames

    Next Steps

    Future Capabilities

    Domain resources will expand beyond verification to provide comprehensive domain management:

    Planned Features:

    • WHOIS Information: Automatic collection of domain registration data
    • EPP Status Tracking: Monitor domain status codes and administrative states
    • Lifecycle Management: Track registration, modification, and expiration dates
    • Telemetry Export: Domain metrics and status information for monitoring systems
    • Registrar Intelligence: Comprehensive registrar information and relationships

    Additional Use Cases:

    • Domain Portfolio Management: Centralized tracking of domain assets and their lifecycle
    • Security Monitoring: Track domain changes, expiration dates, and potential security issues
    • Compliance Reporting: Domain inventory and status reporting for organizational compliance

    Troubleshooting

    Common domain verification issues and their solutions:

    1. Domain not showing VERIFIED: True

    Check the Domain status for specific error information:

    kubectl describe domain <domain-name>
    

    Look for conditions in the status section that indicate the verification state.

    2. DNS Verification Issues

    TXT record not found:

    • Verify the DNS record was created with the exact name and content values from status.verification.dnsRecord
    • Check DNS propagation: dig TXT _datum-custom-hostname.example.com
    • Wait for DNS propagation (can take several minutes to hours)

    TXT record content mismatch:

    • Ensure the record value exactly matches the content field
    • Remove any quotes or extra characters that your DNS provider may add
    • Check for multiple TXT records with the same name

    3. HTTP Verification Issues

    HTTP token endpoint not found (404):

    • Verify the token is served at the exact URL path from status.verification.httpToken.url
    • Ensure your web server is configured to serve the verification path
    • Test manually: curl http://example.com/.well-known/datum-custom-hostname-challenge/<token-id>

    HTTP token content mismatch:

    • Ensure the response body exactly matches the body field from status.verification.httpToken
    • Return plain text (not HTML or JSON)
    • Remove any trailing whitespace or newlines

    Connection issues:

    • Verify your web server is accessible from the internet
    • Check firewall rules and security groups
    • Ensure HTTP (port 80) is accessible (HTTPS is not used for verification)

    4. Verification Timing

    Verification attempts are throttled:

    • The system automatically retries with exponential backoff
    • Check status.verification.nextVerificationAttempt for the next attempt time
    • Wait for the scheduled verification attempt rather than recreating the Domain