LoadBalancer Service can change when you re-create the Service or change its configuration. To get a stable human-readable address for publicly exposed Services, request a fully qualified domain name (FQDN) or wildcard record for your LoadBalancer Service. This page shows cluster operators how to request a name, how the resulting FQDN is constructed, and how to view the allocated record.
Overview
The FQDN allocation workflow has the following steps:- To allocate an FQDN for your
LoadBalancerService, set theservice.beta.kubernetes.io/external-hostnameannotation in your manifest using short, long, or wildcard format. - In response, the External Hostname Controller creates a corresponding record in the
.coreweave.appdomain, which you can inspect with kubectl.
Create an FQDN using short format
To create a public FQDN for aLoadBalancer Service, set the service.beta.kubernetes.io/external-hostname annotation in your manifest with the desired hostname.
This manifest uses the short format to create the hostname foo for the LoadBalancer Service. The service.beta.kubernetes.io/external-hostname and service.beta.kubernetes.io/coreweave-load-balancer-type annotations control the FQDN allocation.
loadbalancer-with-DNS-example.yaml
- An Org ID of
abc123 - A cluster named
mycluster - An annotation of
service.beta.kubernetes.io/external-hostnameset tofoo
Create an FQDN using long format
You can set the annotation using the long format (full FQDN) only if it exactly follows the preceding pattern and matches the Org ID and cluster name. For Org IDabc123 and cluster mycluster, these two hostname formats produce the same FQDN:
However, if the Org ID and cluster name in the annotation don’t match the actual values, the controller treats the annotation as short format.
Consider this erroneous scenario with the following values:
- Org ID
abc123 - Cluster
mycluster - Annotation set to
foo.xyz456-mycluster.coreweave.app
xyz456) doesn’t match the actual Org ID (abc123), the controller treats the entire annotation as short format.
The resulting FQDN is foo.xyz456-mycluster.coreweave.app.abc123-mycluster.coreweave.app, which is unintended.
Use wildcard format
To create a wildcard DNS record for aLoadBalancer Service, set the service.beta.kubernetes.io/external-hostname annotation to *.
The controller creates a wildcard DNS record for the Service in the format *.abc123-mycluster.coreweave.app.
loadbalancer-wildcard-example.yaml
Secure the endpoint with TLS
Assigning a public DNS name to a Service doesn’t automatically issue a TLS certificate. To secure the endpoint, usecert-manager to obtain and manage a certificate for the FQDN or wildcard record.
Add TLS to your DNS name
To serve HTTPS on the DNS name from this page, route traffic through a Traefik Ingress and letcert-manager issue the certificate. Traefik terminates TLS at the Ingress, so you don’t expose each backend Service directly. This section combines the FQDN you allocate earlier with a cert-manager-issued certificate.
Prerequisites
Before you add TLS, deploy the following charts to your cluster:- Deploy CoreWeave’s Traefik chart so Traefik can serve as the
IngressClassand route to Ingress hosts in the cluster. - Deploy CoreWeave’s cert-manager chart and enable its
cert-issuerssubchart so aClusterIssuersuch asletsencrypt-prodexists. The bundled Let’s EncryptClusterIssueruses aDNS01challenge, so it can issue certificates for.coreweave.appnames without a temporary public-facing Ingress.
Create the Ingress
Set the host on the Ingress to the FQDN that this page allocates, and set thecert-manager.io/cluster-issuer annotation to the ClusterIssuer you want to use. The following manifest uses the host ingress1.myorg-mycluster.coreweave.app in both the rules and tls sections. Replace it in both places with the FQDN for your own Org ID and cluster name.
ingress-tls-example.yaml
cert-manager detects the tls block, requests a certificate for the host from the ClusterIssuer, and stores it in the ingress1-tls Secret. For more detail on this manifest and Traefik’s Ingress behavior, see Traefik.
Verify the DNS name, Ingress, and certificate
Confirm each piece in turn. Confirm the DNS name resolved for the Traefik Service:Certificate resource shows Ready once cert-manager completes the challenge:
False, inspect the cert-manager resources it creates to track the request:
View the allocated record
To view the allocated FQDN for a Service, inspect the Service status conditions:[MY-SERVICE] with the name of your Service, such as example-sshd from the example manifest.
Observe the allocation through events and status
Beyond retrieving the FQDN itself, you can inspect Service events and status conditions to confirm that allocation succeeded or to diagnose problems. Services expose events and status conditions with information about DNS record allocation. To view events and status conditions for a Service named[MY-SERVICE]:
status.conditions field in the output:
False status condition: