Cloud Experts Documentation

Configuring Custom Web Console and Downloads Routes on ROSA HCP

This content is authored by Red Hat experts, but has not yet been tested on every supported configuration. This guide has been validated on OpenShift 4.22. Operator CRD names, API versions, and console paths may differ on other versions.

ROSA HCP clusters expose the web console and CLI downloads page on automatically generated hostnames under the cluster’s base domain, for example console-openshift-console.apps.<cluster-domain>. For organizations with strict enterprise domain policies, compliance requirements, or teams migrating from ROSA Classic clusters that already use custom routes, replacing these default hostnames with organization-controlled names and certificates is a common day-2 requirement.

This guide walks through deploying a public ROSA HCP cluster using the rh-mobb/terraform-rosaexternal link (opens in new tab) Terraform module, obtaining a trusted TLS certificate via Let’s Encrypt, and configuring custom DNS names for the console and downloads routes: the two component routes supported on HCP.

The OAuth server route (oauth-openshift.apps.*) cannot be customized on HCP. The OAuth server runs on the Red Hat-managed control plane, not on the customer cluster’s ingress. Configuring identity providers such as Azure Entra ID or GitHub is a separate operation and is unaffected by this limitation.

Prerequisites

Set Environment Variables

Set these once and reuse them throughout the guide.

Deploy a ROSA HCP Cluster

Clone the rh-mobb/terraform-rosa module. It handles networking, HCP account IAM roles, OIDC configuration, operator roles, cluster creation, and the default machine pool in a single make command.

Create a terraform.tfvars file for a public single-AZ HCP cluster:

Deploy the cluster:

Expected output:

Cluster provisioning takes approximately 15 to 20 minutes. The make hcp target waits for the cluster to reach Ready state before returning.

Verify the Cluster is Ready

Expected output:

Log in to the cluster using the make helper:

Or manually:

Capture the cluster domain for later steps. The terraform-rosa module does not expose cluster_domain directly, so derive it from cluster_console_url:

Obtain TLS Certificates

Use Let’s Encrypt with the Route 53 DNS-01 challenge. Certbot automatically creates and cleans up the _acme-challenge TXT record in Route 53; no HTTP server or firewall changes are needed.

The AWS credentials used by certbot require route53:GetChange, route53:ListHostedZones, route53:ListResourceRecordSets, and route53:ChangeResourceRecordSets on the hosted zone. Verify permissions before proceeding with aws iam simulate-principal-policy.

Request Certificates

Verify the certificates were issued:

Expected output:

Configure DNS Records

Get the Ingress Load Balancer Hostname

Create Route 53 CNAME Records

Verify DNS propagation (allow approximately 60 seconds):

Expected output:

If dig returns empty, wait another 30 to 60 seconds and retry. Route 53 changes typically propagate within 60 seconds, but the TTL on your local resolver’s negative cache may delay visibility.

Create TLS Secrets on the Cluster

The TLS secrets must exist in the openshift-config namespace on the hosted cluster before Terraform applies the component route configuration. OpenShift reads these secrets when routing TLS traffic for the custom hostnames.

The certificate files under /etc/letsencrypt/live/ are root-owned. Copy them to a readable temp location before running oc; oc must run as your user (not root) to access your kubeconfig.

Verify both secrets exist:

Expected output:

Configure Custom Component Routes

Add a new Terraform file to the cloned terraform-rosa directory. The local.cluster_id value is already defined in the module’s 04-cluster.tf and resolves to the HCP cluster ID.

Apply with the route variables:

Expected output:

Verify the Configuration

Check the Cluster Ingress Config

Expected output:

Confirm the Custom Routes Were Created

Expected output:

Verify the Default Route Redirects to the Custom Hostname

The original auto-generated route now issues an HTTP 301 redirect:

Expected output:

Access the Console on the Custom Hostname

Expected output:

What to observe:

  1. The browser navigates directly to https://console.example.com without passing through the default cluster domain.
  2. The TLS certificate in the browser shows your organization’s domain (issued by Let’s Encrypt) rather than the ROSA wildcard certificate.
  3. The downloads page at https://downloads.example.com serves the oc, kubectl, and rosa CLI binaries correctly.
  4. Logging in via the console still functions normally; authentication is unaffected by the route change.

Removing Custom Routes

To revert both routes to cluster defaults, pass null values and re-apply:

OpenShift immediately restores the auto-generated hostnames under the cluster domain. No rolling restart is required.

Certificate Renewal

Let’s Encrypt certificates expire after 90 days. Use --dry-run=client -o yaml | oc apply -f - to update secrets in-place rather than erroring on a duplicate resource:

certbot renew is idempotent and skips renewal when the certificate has more than 30 days remaining. A post-renewal hook script can run the oc apply commands automatically on each successful renewal.

Cleanup

Summary

Capability What It Shows Benefit
Custom console hostname Replaces console-openshift-console.apps.* with an organization-controlled domain Enterprise branding and compliance domain policy
Custom downloads hostname Replaces downloads-openshift-console.apps.* with an organization-controlled domain Consistent domain across all cluster-facing tools
Let’s Encrypt + Route 53 DNS-01 Automated certificate issuance without HTTP challenge or firewall changes Works for private clusters and complex network topologies
Terraform-managed component routes rhcs_hcp_default_ingress.component_routes tracks state and diffs cleanly on plan Infrastructure-as-code for day-2 route operations
Partial route configuration Console-only, downloads-only, or both can be set independently Incremental rollout with no forced all-or-nothing change
Idempotent secret renewal --dry-run=client -o yaml | oc apply updates secrets without re-create errors Safe to run in automated renewal pipelines

Additional Resources

Back to top

Interested in contributing to these docs?

Collaboration drives progress. Help improve our documentation The Red Hat Way.

Red Hat logo LinkedIn YouTube Facebook Twitter

Products

Tools

Try, buy & sell

Communicate

About Red Hat

We’re the world’s leading provider of enterprise open source solutions—including Linux, cloud, container, and Kubernetes. We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

Subscribe to our newsletter, Red Hat Shares

Sign up now
© 2026 Red Hat