Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
de86f56
Update compability doc (#1054)
sarthyparty Sep 3, 2025
ecb9222
NGF: Update gateway addresses compatibility document (#1109)
bjee19 Sep 15, 2025
29a305d
NGF: Update gateway addresses compatibility document with IP family c…
bjee19 Sep 16, 2025
8d59f42
New NGF CLI parameter for Trial period enforcement (#1128)
tataruty Sep 17, 2025
bf2aedf
Merge branch 'main' into ngf-release-2.2
ADubhlaoich Oct 9, 2025
6822326
RouteRules and Gateway unsupported fields update (#1268)
tataruty Oct 9, 2025
4b0aa63
NGF: Update advanced routing guide for Regex PathType (#1286)
ciarams87 Oct 10, 2025
56d6dce
Merge branch 'main' into ngf-release-2.2
ADubhlaoich Oct 14, 2025
2138ce5
Add details on BuildOS and InferencePoolCount to Product Telemetry do…
shaun-nx Oct 14, 2025
d67906e
Merge branch 'main' into ngf-release-2.2
ADubhlaoich Oct 17, 2025
a03edd0
Add document for installing NGF on Openshift through OperatorHub
shaun-nx Oct 20, 2025
61fc33b
Merge branch 'main' into ngf/openshift-install
shaun-nx Oct 21, 2025
f075835
Merge branch 'main' into ngf/openshift-install
ADubhlaoich Oct 22, 2025
3b76707
Merge branch 'main' into ngf/openshift-install
ADubhlaoich Oct 22, 2025
b700813
Merge branch 'main' into ngf/openshift-install
ADubhlaoich Oct 23, 2025
b49beab
Merge branch 'main' into ngf/openshift-install
shaun-nx Oct 24, 2025
020f81c
Update docs to be in line with style guidelins
shaun-nx Oct 24, 2025
892135f
Code review updates
shaun-nx Oct 24, 2025
f0e129c
Update document to follow "How-to-guide" format
shaun-nx Oct 24, 2025
6cd31ce
Replace `bash` with `shell`
shaun-nx Oct 24, 2025
e5642d8
Fix pre-commit errors
shaun-nx Oct 24, 2025
0c077c7
Fix pre-commit errors
shaun-nx Oct 24, 2025
df1dd08
Update content/ngf/install/openshift.md
shaun-nx Oct 24, 2025
206474c
Style updates
shaun-nx Oct 24, 2025
481f9b4
Revert changes to go.mod and go.sum
shaun-nx Oct 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion content/ngf/install/build-image.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Build NGINX Gateway Fabric
weight: 400
weight: 500
toc: true
nd-content-type: how-to
nd-product: NGF
Expand Down
220 changes: 220 additions & 0 deletions content/ngf/install/openshift.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
---
title: Install NGINX Gateway Fabric on OpenShift
description: Deploy F5 NGINX Gateway Fabric on Red Hat OpenShift through OperatorHub and configure it using the NginxGatewayFabric custom resource.
weight: 400
toc: true
nd-content-type: how-to
nd-product: NGF
nd-docs: DOCS-1851
---

## Overview

This guide details how to install F5 NGINX Gateway Fabric on Red Hat OpenShift through OperatorHub. You can then configure it with the `NginxGatewayFabric` custom resource.

## Before you begin

Before starting, we recommend you have the following:

- A running Red Hat OpenShift cluster with cluster administrator privileges.
- Ability to pull images from `ghcr.io` (or a mirrored registry if required by your environment).

- Optional integrations
- F5 NGINX One dataplane API key if you plan to integrate with [F5 NGINX One Console](https://docs.nginx.com/nginx-one/).
- F5 NGINX Plus entitlements if you plan to run NGINX Gateway Fabric with F5 NGINX Plus.

NGINX Gateway Fabric provides first-class OpenShift support with Universal Base Image (UBI)-based images. Use the `-ubi` tags shown in the custom resource definition (CRD) examples. Defaults are compatible with OpenShift Security Context Constraints (SCCs) for non-root operation. If your cluster enforces custom SCCs or policies, bind the appropriate SCC to NGINX Gateway Fabric service accounts.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I discourage marketing terms in docs. It hurts credibility with our target audience

Suggested change
NGINX Gateway Fabric provides first-class OpenShift support with Universal Base Image (UBI)-based images. Use the `-ubi` tags shown in the custom resource definition (CRD) examples. Defaults are compatible with OpenShift Security Context Constraints (SCCs) for non-root operation. If your cluster enforces custom SCCs or policies, bind the appropriate SCC to NGINX Gateway Fabric service accounts.
NGINX Gateway Fabric provides OpenShift support with Universal Base Image (UBI)-based images. Use the `-ubi` tags shown in the custom resource definition (CRD) examples. Defaults are compatible with OpenShift Security Context Constraints (SCCs) for non-root operation. If your cluster enforces custom SCCs or policies, bind the appropriate SCC to NGINX Gateway Fabric service accounts.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ciarams87 @mkingst what are your thoughts on this one?


## Steps

### Install NGINX Gateway Fabric Operator from OperatorHub

1. Navigate to the Red Hat Catalog: https://catalog.redhat.com/en
2. Search for "NGINX Gateway Fabric Operator" in the searchbar at the top
3. Select NGINX Gateway Fabric Operator
4. Select **Deploy & use**.
5. Choose the appropriate architecture and release tag
6. Complete the installation. Wait until the Operator status shows Installed

### Create a project

In your cluster, create a dedicated project (namespace) for NGINX Gateway Fabric components.

```shell
oc new-project nginx-gateway-fabric
```

### Create TLS secrets for internal communication (optional)

If you want NGINX Gateway Fabric to auto-generate internal certificates, skip this step. To provide your own TLS secrets, create the following:

Agent TLS (used by internal agent)

```shell
oc create secret tls agent-tls \
--cert=agent.crt \
--key=agent.key \
-n nginx-gateway-fabric
```

Server TLS (used by internal server)

```shell
oc create secret tls server-tls \
--cert=server.crt \
--key=server.key \
-n nginx-gateway-fabric
```

### Integrate with NGINX One Console (optional)

If you want to use NGINX One Console to monitor NGINX Gateway Fabric, create a secret for the dataplane key (replace VALUE with your key).

```shell
oc create secret generic nginxone-dataplane-key \
--from-literal=key=VALUE \
-n nginx-gateway-fabric
```

Reference this secret in `spec.nginx.nginxOneConsole.dataplaneKeySecretName`.

### Configure NGINX Plus licensing (optional)

If you plan to use NGINX Plus, set `spec.nginx.plus: true`, add image pull credentials, and create a license secret if needed.

Example license secret name referenced by `usage.secretName`

```shell
oc create secret generic nplus-license \
--from-file=nginx-repo.crt=/path/to/nginx-repo.crt \
--from-file=nginx-repo.key=/path/to/nginx-repo.key \
-n nginx-gateway-fabric
```

### Create the NginxGatewayFabric custom resource

Create a minimal `NginxGatewayFabric` custom resource for OpenShift. Include this code in a file named `nginx-gateway-fabric.yaml`.

```yaml
apiVersion: gateway.nginx.org/v1alpha1
kind: NginxGatewayFabric
metadata:
name: ngf
namespace: nginx-gateway-fabric
spec:
# Data plane (NGINX)
nginx:
replicas: 2
image:
repository: ghcr.io/nginx/nginx-gateway-fabric/nginx
tag: 2.2.0-ubi
pullPolicy: IfNotPresent

# Controller
nginxGateway:
gatewayClassName: nginx
gatewayControllerName: gateway.nginx.org/nginx-gateway-controller
image:
repository: ghcr.io/nginx/nginx-gateway-fabric
tag: 2.2.0-ubi
pullPolicy: IfNotPresent
replicas: 1
```

Apply the custom resource:

```shell
oc apply -f nginx-gateway-fabric.yaml
```

Result: The Operator reconciles the custom resource and provisions the NGINX Gateway Fabric controller and data plane.

### Configure exposure options for OpenShift (optional)

Choose one exposure option:

If a LoadBalancer is available, set `spec.nginx.service.type: LoadBalancer`. Optionally set:

- `externalTrafficPolicy: Local` to preserve client source IPs.
- `loadBalancerClass`, `loadBalancerIP`, and `loadBalancerSourceRanges` per your environment.

If a LoadBalancer is not available, set `spec.nginx.service.type: NodePort`, then create an OpenShift Route to the NGINX Gateway Fabric front-end Service (for HTTP/HTTPS traffic):

```shell
oc create route edge ngf \
--service=nginx-gateway-fabric-nginx \
--port=http \
-n nginx-gateway-fabric
```

For TLS passthrough, add `--passthrough` and target the appropriate Service port.

### Validate the installation

Verify that deployments and services are running, and confirm the GatewayClass:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a thing called GatewayClass? If not, I'd rephrase this to the actual directive:

Suggested change
Verify that deployments and services are running, and confirm the GatewayClass:
Verify that deployments and services are running, and confirm the `gatewayclass`:

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, GatewayClass is an Object in the Gateway API.
https://gateway-api.sigs.k8s.io/api-types/gatewayclass/


```shell
oc get pods -n nginx-gateway-fabric
oc get svc -n nginx-gateway-fabric
oc get gatewayclass
```

If troubleshooting is required, review logs

Controller logs

```shell
oc logs deploy/ngf-nginx-gateway -n nginx-gateway-fabric
```

Data plane logs

```shell
oc logs deploy/ngf-nginx -n nginx-gateway-fabric
```

### Perform a functional check (optional)

Create a Gateway and HTTPRoute to validate routing:

```yaml
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: http
namespace: nginx-gateway-fabric
spec:
gatewayClassName: nginx
listeners:
- name: http
port: 80
protocol: HTTP
hostname: example.com
allowedRoutes:
namespaces:
from: Same
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: echo
namespace: nginx-gateway-fabric
spec:
parentRefs:
- name: http
hostnames:
- example.com
rules:
- backendRefs:
- name: echo
port: 8080
```

Ensure you have a Service and Deployment named `echo` that expose port 8080. If you are using a LoadBalancer Service, send a request to the load balancer IP address. Otherwise, use an OpenShift Route as configured.

## See also

- Install NGINX Gateway Fabric with Helm: /ngf/install/helm/
- Secure certificates for NGINX Gateway Fabric: /ngf/install/secure-certificates/
- Red Hat Catalog (https://catalog.redhat.com/en)
- NGINX Gateway Fabric custom resource sample (https://github.com/nginx/nginx-gateway-fabric/blob/{{< version-ngf >}}/operators/config/samples/gateway_v1alpha1_nginxgatewayfabric.yaml)
2 changes: 1 addition & 1 deletion go.sum
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github.com/nginxinc/nginx-hugo-theme v1.0.11 h1:vsiqkg+Ba7CN05SaY9HEPbPinz3Y1xjNZ/qdhhp7Hrc=
github.com/nginxinc/nginx-hugo-theme v1.0.11/go.mod h1:DPNgSS5QYxkjH/BfH4uPDiTfODqWJ50NKZdorguom8M=
github.com/nginxinc/nginx-hugo-theme v1.0.11/go.mod h1:DPNgSS5QYxkjH/BfH4uPDiTfODqWJ50NKZdorguom8M=