A step-by-step tutorial for pointing a custom domain at an EKS app running behind an ALB.
This is something I hadn't done end to end before, so I'm documenting every step.
The goal was to get app.jspoth.com and jspoth.com both pointing to
a Go app running on EKS behind an AWS Application Load Balancer.
k8s-default-yourapp-xxxx.us-east-2.elb.amazonaws.comYou need an SSL cert for HTTPS. AWS Certificate Manager (ACM) issues public certs for free.
*.jspoth.com (covers all subdomains like app, www, etc.)jspoth.com (covers the apex domain)After requesting, the cert will show as Pending validation. ACM needs you to prove you own the domain by adding a CNAME record.
*.jspoth.com and jspoth.com entries share the same CNAME validation record,
so you only need to create it once.
Once the cert is issued, update your ingress to use HTTPS. Add these annotations to k8s/ingress.yaml:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
alb.ingress.kubernetes.io/ssl-redirect: "443"
alb.ingress.kubernetes.io/certificate-arn: <your-cert-arn>
Apply it: kubectl apply -f k8s/ingress.yaml
The LBC will update the ALB to add an HTTPS listener and redirect all HTTP traffic to HTTPS.
ACM_CERT_ARN) and substitute it in CI before applying.
Now point your domain at the ALB. Go to Route 53 → Hosted zones → jspoth.com → Create record.
appAus-east-2 (must match the ALB region)Same steps as above but leave the record name blank. That creates the apex record.
dig jspoth.com @ns-1999.awsdns-57.co.uk kept returning
ANSWER: 0. The record just wasn't saved properly. I deleted it and recreated it from scratch
and it worked on the second attempt. If you see this, don't wait around — just delete and recreate.
Query Route 53's own nameserver directly after creating each record:
# Replace with one of your NS records from the hosted zone dig app.jspoth.com @ns-1999.awsdns-57.co.uk dig jspoth.com @ns-1999.awsdns-57.co.uk
You want to see ANSWER: 2 or more. If it's ANSWER: 0, the record didn't commit — delete and recreate.
After adding the records, verify they're resolving correctly:
dig app.jspoth.com @ns-1999.awsdns-57.co.uk
Query Route 53's own nameserver directly — this bypasses your local DNS cache and tells you
immediately if the record is live. Look for ANSWER: 2 (or more) in the response.
dig returns ANSWER: 0 even when querying Route 53 directly,
the record wasn't saved properly. Go back to the console, delete it, and recreate it.
This happened to me with the apex record — it showed in the UI but wasn't being served.
curl -I https://app.jspoth.com
You should get a 200 OK (or whatever your app returns at that path).
dig resolves correctly but curl still fails with
"Could not resolve host", your local DNS cache is stale. Flush it:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
*.domain.com + apex as SAN — one cert covers everythingdig @ns-xxxx to bypass local cache