OpenShift UPI prerequisites: DNS, VIPs, NTP and firewall checklist

Everything to confirm before installing OpenShift on user-provisioned infrastructure: DNS records, VIPs, NTP, firewall ports, proxy and registry access.

By Rami Chiha8 min read
Quick engineering answer

What this guide covers

What this solves
Everything to confirm before installing OpenShift on user-provisioned infrastructure: DNS records, VIPs, NTP, firewall ports, proxy and registry access.
Applies to
OpenShift · OpenShift · UPI · DNS · load balancer
Prerequisites
Review the guide's prerequisites, architecture, and decision sections before execution.
Risk
Follow every warning and validate environment-specific commands before a change window.
Expected result
A user-provisioned infrastructure (UPI) install of Red Hat OpenShift Container Platform gives you full control, and also full responsibility. The installer does not create your virtual machines, DNS records, load balancers or storage mappings. If any of those are wrong, the install usually fails late, at the bootstrap or CSR stage, and the symptoms are hard to read.
How to verify
Use the guide's validation, test, acceptance, or handover steps.
Last verified
2026-10-04

A user-provisioned infrastructure (UPI) install of Red Hat OpenShift Container Platform gives you full control, and also full responsibility. The installer does not create your virtual machines, DNS records, load balancers or storage mappings. If any of those are wrong, the install usually fails late, at the bootstrap or CSR stage, and the symptoms are hard to read.

This checklist is the work we do before generating a single ignition file. It is a planning example for an OpenShift 4 user-provisioned installation with platform: none, not a release-independent specification. Select an exact supported OpenShift release and infrastructure path first, then use that release's installation, networking and load-balancing requirements as authoritative.

The procedures were validated for the documented OpenShift 4 UPI architecture, not every OpenShift 4 release, network type or infrastructure provider. Revalidate the complete matrix and commands against the release documentation before a new install, a version-family change, a network-plugin change or a material topology change. Record the selected release, documentation revision, rule owner, approval and rollback owner in the change record.

1. Fix the inputs first#

Write these down and get an owner to sign off on each one.

InputWhat to confirmWhy it matters
Cluster nameShort, unique, DNS-safeBecomes metadata.name in install-config.yaml and part of every cluster hostname
Base domainDelegated or resolvable by all node VLANsTogether with the cluster name forms api.<cluster>.<domain>
API and Ingress VIPsTwo unused addresses, unless the approved platform design explicitly requires otherwiseapi and api-int commonly resolve to the API load-balancer VIP; wildcard Apps resolves to the Ingress VIP
Node IPsStatic plan for bootstrap, 3 control plane, N workersNodes depend on forward and reverse DNS
NTPAt least two reachable sourcesCertificate validation fails if clocks drift
Pull secretFrom the authorised subscription ownerNeeded to generate final assets and pull release images
SSH public keyApproved admin keyInjected into RHCOS for emergency access
Registry and proxy pathDirect access, proxy, or internal mirrorNodes must pull images from the release registries
Storage planWho presents LUNs or volumes, and whenDo not create PVCs before ownership and size are agreed

2. Example addressing plan#

The values below are placeholders for documentation. Use your own ranges, and keep the pod and service networks from overlapping anything routable in your enterprise.

RoleHostnameAddress
API VIPapi.ocp-prod.example.com, api-int.ocp-prod.example.com10.42.10.10
Ingress VIP*.apps.ocp-prod.example.com10.42.10.12
Load balancer 01 / 02lb01 / lb0210.42.10.21 / 10.42.10.22
Bootstrap (temporary)bootstrap10.42.10.30
Ignition / bastion hostignition10.42.10.31
Control plane 1 to 3cp01 to cp0310.42.20.11 to 10.42.20.13
Workers 1 to 5wk01 to wk0510.42.20.21 to 10.42.20.25

Network ranges:

text
machineNetwork:  10.42.0.0/16        # must contain every node IP
clusterNetwork:  10.128.0.0/14       # pod network, hostPrefix 23 (default)
serviceNetwork:  172.30.0.0/16       # cluster service IPs (default)

If your enterprise already routes 10.128.0.0/14 or 172.30.0.0/16, change them now. They cannot be changed after install.

3. DNS records#

Create these in the authoritative DNS used by the node VLANs before booting any node.

RecordTypeTarget
api.ocp-prod.example.comAAPI VIP
api-int.ocp-prod.example.comAAPI VIP (internal clients only)
*.apps.ocp-prod.example.comwildcard AApps VIP
each node and helper hostA and PTRits own IP

Create node PTR records when required by the selected installation method and ensure each node gets the intended stable hostname. Do not rely on reverse DNS as the only hostname control without checking the release-specific RHCOS networking procedure.

Validate from the bastion and from at least one host in the node VLAN:

bash
dig +short api.ocp-prod.example.com
dig +short api-int.ocp-prod.example.com
dig +short test.apps.ocp-prod.example.com
dig +short -x 10.42.20.11

For preparation only, you can add entries to /etc/hosts on the bastion. Do not use that as a substitute for real DNS on the nodes.

4. Time synchronisation#

Check on the bastion:

bash
chronyc sources -v
chronyc tracking

If your NTP servers are not reachable from the node VLAN, fix that now. You can also push a chrony.conf to every node with a MachineConfig at install time (see the install walkthrough linked below).

5. Firewall matrix#

Only create rules where a firewall actually sits in the path. Same-VLAN traffic with no filtering needs no rule.

SourceDestinationPortPurpose
Admins, bastionAPI VIPTCP 6443oc and API access
Bootstrap, control plane, workersAPI VIPTCP 6443Node and Operator access to the Kubernetes API
Bootstrap, control plane, workersAPI VIP (api-int)TCP 22623Machine Config Server during provisioning and node configuration
Approved application clients and monitoringIngress VIPTCP 80, 443Routes and ingress health checks
Load balancersBootstrap + control planeTCP 6443API backend (bootstrap only until install step completes)
Load balancersBootstrap + control planeTCP 22623Machine Config Server; expose only to nodes that require it
Load balancersWorkersTCP 80, 443Ingress routers
Load balancer peerLoad balancer peerVRRP (IP protocol 112), or approved unicast equivalentKeepalived advertisements; restrict to the two peer addresses
All nodesIgnition hostTCP 80 (or 443)Download ignition during install only
All nodesDNSTCP/UDP 53Name resolution
All nodesNTPUDP 123Time sync
All nodesRegistries or mirrorTCP 443Image pulls
Control planeControl planeTCP 2379-2380etcd
Control plane + workersall cluster nodes, both directionsTCP 10250, TCP/UDP 9000-9999Kubelet and host services; narrow only where the selected release documents it
All cluster nodesall cluster nodes, both directionsUDP 6081OVN-Kubernetes Geneve overlay for this example; use the selected network type's documented protocol
Approved clients or nodesNodePort destinationsTCP/UDP 30000-32767, only if NodePort is usedNodePort services; do not open when unused
All cluster nodes and required network devicespeer nodes and routed destinationsICMP, including fragmentation-needed/packet-too-bigPath MTU discovery and diagnostics
NodesDirectory serversTCP 636LDAPS, once authentication is configured

This table is illustrative, not a firewall specification. Required ports, directions, protocols, registry endpoints and whether the load balancer or nodes initiate each flow change with release, network plugin and enabled Operators. Build the final matrix from Red Hat's documentation for the selected release and platform, including DNS responses, proxy/mirror endpoints, load-balancer return paths, egress for enabled Operators, IPsec/ESP if used and infrastructure-provider requirements. Do not expose api-int or port 22623 to untrusted networks.

Test every permitted leg from its real source zone before ignition generation; a bastion-only test is insufficient. Capture a denied-flow baseline, then verify DNS, NTP, registry, API-VIP, MCS-VIP and ingress-VIP paths with firewall logging during the change. Roll back newly added rules if they expose a broader source or destination than approved; never work around a failed test by disabling the firewall.

6. Registry and proxy access#

Nodes need to reach the Red Hat and Quay registries unless you run a full disconnected mirror. Test from the bastion and from the node VLAN:

bash
curl -I https://registry.redhat.io
curl -I https://quay.io

If you use an HTTP proxy, put the proxy and a correct noProxy list in install-config.yaml. The noProxy list must include the machine network, cluster network, service network and your cluster domain. When you test ignition URLs from the bastion, use curl --noproxy '*' so the proxy does not hide the real result.

7. Mistakes that cost a day#

  • Reusing a VIP that is already live on another host.
  • Uncontrolled node hostnames. Missing or inconsistent DHCP, static-network or DNS inputs can produce unexpected names and CSR confusion.
  • Overlapping pod or service networks with a routed enterprise range.
  • Booting nodes early. Ignition runs on first boot; a bad URL or an old file can force a reinstall.
  • Dummy pull secret in a generated install. Generate assets only after the real pull secret is in place.

What to do next#

Once every row above is green, move on to the load balancer: HAProxy and Keepalived for OpenShift UPI, then the install walkthrough.

Examples use documentation-only names and addresses. Verify ports and procedures against the Red Hat documentation for your exact OpenShift version.

Need senior engineers for an OpenShift build or review? See Kubernetes and OpenShift or start a project.