Skip to content

Commit 937a24c

Browse files
authored
Update docs for 2.3.0 release (#4491)
Updated some extraneous docs as well as part of the release process and testing.
1 parent e8ee7c1 commit 937a24c

File tree

8 files changed

+83
-18
lines changed

8 files changed

+83
-18
lines changed

.markdownlint-cli2.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
config:
44
ul-style:
55
style: dash
6+
ul-indent: false
67
no-hard-tabs: false
78
no-multiple-blanks: false
89
line-length: false
910
blanks-around-headers: false
11+
blanks-around-lists: false
1012
no-duplicate-heading:
1113
siblings_only: true
1214
no-inline-html: false

CHANGELOG.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,55 @@ This document includes a curated changelog for each release. We also publish a c
44
a [GitHub release](https://github.com/nginx/nginx-gateway-fabric/releases), which, by contrast, is auto-generated
55
and includes links to all PRs that went into the release.
66

7+
## Release 2.3.0
8+
9+
_December 18, 2025_
10+
11+
FEATURES:
12+
13+
- Support Gateway API v1.4, moving BackendTLSPolicy from experimental to standard. [4166](https://github.com/nginx/nginx-gateway-fabric/pull/4166)
14+
- Add SupportedFeatures to GatewayClassStatus. [4236](https://github.com/nginx/nginx-gateway-fabric/pull/4236)
15+
- Add ability to configure access log format or turn logging off. [4102](https://github.com/nginx/nginx-gateway-fabric/pull/4102)
16+
- Added support for configuring backend TLS on Gateways to enable secure communication between the gateway and upstream. [3900](https://github.com/nginx/nginx-gateway-fabric/pull/3900)
17+
- Updated validation for pathType RegularExpression to support PCRE-style patterns while remaining RE2-friendly, improving compatibility with other projects. [4450](https://github.com/nginx/nginx-gateway-fabric/pull/4450)
18+
- Add support for multiple InferencePool backends on a Route. [4439](https://github.com/nginx/nginx-gateway-fabric/pull/4439)
19+
20+
BUG FIXES:
21+
22+
- Fix an issue where duplicate status entries could be written on routes. [4250](https://github.com/nginx/nginx-gateway-fabric/pull/4250)
23+
- Removed k8s API access from the NGINX data plane pod. [4368](https://github.com/nginx/nginx-gateway-fabric/pull/4368)
24+
- Fix an issue regarding configuring IPv6 DNS resolvers for ExternalName services. Thanks to [lucasl0st](https://github.com/lucasl0st). [4378](https://github.com/nginx/nginx-gateway-fabric/pull/4378)
25+
- Fix a bug where NGINX Service could not be created if the Gateway name was very long. [4387](https://github.com/nginx/nginx-gateway-fabric/pull/4387)
26+
- Fix an issue where NginxProxy config might not be honored if applied at the same time as the Gateway. [4399](https://github.com/nginx/nginx-gateway-fabric/pull/4399)
27+
- Fix issue where agent's Pod IP cannot be used to track the connecting data plane Pod. [4470](https://github.com/nginx/nginx-gateway-fabric/pull/4470)
28+
- Fix a bug to preserve external controller annotations for Deployment and DaemonSets to avoid constant updates. [4468](https://github.com/nginx/nginx-gateway-fabric/pull/4468)
29+
- Fix an issue where nginx pod could not connect to control plane when hostnetwork is enabled. [4481](https://github.com/nginx/nginx-gateway-fabric/pull/4481)
30+
31+
HELM CHART:
32+
33+
- The version of the Helm chart is now 2.3.0
34+
35+
UPGRADE:
36+
37+
- The Gateway API version has been updated to 1.4. This version of Gateway API must be installed before installing NGINX Gateway Fabric v2.3.0 [4166](https://github.com/nginx/nginx-gateway-fabric/pull/4166)
38+
- Remove deprecated v1alpha1 ObservabilityPolicy API. [4215](https://github.com/nginx/nginx-gateway-fabric/pull/4215)
39+
40+
COMPATIBILITY:
41+
42+
- Gateway API version: `1.4.1`
43+
- Gateway API Inference Extension version: `1.1.0`
44+
- NGINX version: `1.29.3`
45+
- NGINX Plus version: `R36`
46+
- NGINX Agent version: `v3.6.0`
47+
- Kubernetes version: `1.25+`
48+
49+
CONTAINER IMAGES:
50+
51+
- Control plane: `ghcr.io/nginx/nginx-gateway-fabric:2.3.0`
52+
- Data plane: `ghcr.io/nginx/nginx-gateway-fabric/nginx:2.3.0`
53+
- Data plane with NGINX Plus: `private-registry.nginx.com/nginx-gateway-fabric/nginx-plus:2.3.0`
54+
- Operator: `ghcr.io/nginx/nginx-gateway-fabric/operator:1.1.0`
55+
756
## Release 2.2.2
857

958
_December 10, 2025_

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ You can find the comprehensive NGINX Gateway Fabric user documentation on the [N
3636
We publish NGINX Gateway Fabric releases on GitHub. See
3737
our [releases page](https://github.com/nginx/nginx-gateway-fabric/releases).
3838

39-
The latest release is [2.2.2](https://github.com/nginx/nginx-gateway-fabric/releases/tag/v2.2.2).
39+
The latest release is [2.3.0](https://github.com/nginx/nginx-gateway-fabric/releases/tag/v2.3.0).
4040

4141
The edge version is useful for experimenting with new features that are not yet published in a release. To use, choose
4242
the _edge_ version built from the [latest commit](https://github.com/nginx/nginx-gateway-fabric/commits/main)
@@ -47,7 +47,7 @@ to the correct versions:
4747

4848
| Version | Description | Installation Manifests | Documentation and Examples |
4949
| ------- | ----------- | ---------------------- | -------------------------- |
50-
| Latest release | For production use | [Manifests](https://github.com/nginx/nginx-gateway-fabric/tree/v2.2.2/deploy). | [Documentation](https://docs.nginx.com/nginx-gateway-fabric). [Examples](https://github.com/nginx/nginx-gateway-fabric/tree/v2.2.2/examples). |
50+
| Latest release | For production use | [Manifests](https://github.com/nginx/nginx-gateway-fabric/tree/v2.3.0/deploy). | [Documentation](https://docs.nginx.com/nginx-gateway-fabric). [Examples](https://github.com/nginx/nginx-gateway-fabric/tree/v2.3.0/examples). |
5151
| Edge | For experimental use and latest features | [Manifests](https://github.com/nginx/nginx-gateway-fabric/tree/main/deploy). | [Examples](https://github.com/nginx/nginx-gateway-fabric/tree/main/examples). |
5252

5353
### Versioning
@@ -69,6 +69,7 @@ The following table lists the software versions NGINX Gateway Fabric supports.
6969
| NGINX Gateway Fabric | Gateway API | Kubernetes | NGINX OSS | NGINX Plus | NGINX Agent |
7070
|----------------------|-------------|------------|-----------|------------|-------------|
7171
| Edge | 1.4.1 | 1.25+ | 1.29.3 | R36 | v3.6.0 |
72+
| 2.3.0 | 1.4.1 | 1.25+ | 1.29.3 | R36 | v3.6.0 |
7273
| 2.2.2 | 1.3.0 | 1.25+ | 1.29.2 | R35 | v3.6.0 |
7374
| 2.2.1 | 1.3.0 | 1.25+ | 1.29.2 | R35 | v3.5.0 |
7475
| 2.2.0 | 1.3.0 | 1.25+ | 1.29.2 | R35 | v3.3.2 |

charts/nginx-gateway-fabric/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apiVersion: v2
22
name: nginx-gateway-fabric
33
description: NGINX Gateway Fabric
44
type: application
5-
version: 2.2.2
5+
version: 2.3.0
66
appVersion: "edge"
77
kubeVersion: ">= 1.25.0-0"
88
home: https://github.com/nginx/nginx-gateway-fabric

charts/nginx-gateway-fabric/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
# NGINX Gateway Fabric Helm Chart
33

4-
![Version: 2.2.2](https://img.shields.io/badge/Version-2.2.2-informational?style=flat-square) ![AppVersion: edge](https://img.shields.io/badge/AppVersion-edge-informational?style=flat-square)
4+
![Version: 2.3.0](https://img.shields.io/badge/Version-2.3.0-informational?style=flat-square) ![AppVersion: edge](https://img.shields.io/badge/AppVersion-edge-informational?style=flat-square)
55

66
- [NGINX Gateway Fabric Helm Chart](#nginx-gateway-fabric-helm-chart)
77
- [Introduction](#introduction)

docs/api/pkg.tpl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{{ define "packages" }}
22
---
3-
title: "API reference"
3+
title: API reference
44
weight: 100
5-
type: reference
6-
product: NGF
7-
docs: DOCS-000
5+
nd-content-type: reference
6+
nd-product: FABRIC
7+
nd-docs: DOCS-1855
88
---
99

1010
## Overview

docs/developer/release-process.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ To create a new release, follow these steps:
4242
3. Create a release branch following the `release-X.Y` naming convention.
4343
- Once the release branch is created, reach out to the infra team to get it added to the runner permissions.
4444
4. Once the release branch pipeline completes, run tests using the `release-X.X-rc` images that are pushed to Github (for example, `release-1.3-rc`).
45-
1. Kick off the [longevity tests](https://github.com/nginx/nginx-gateway-fabric/blob/main/tests/README.md#longevity-testing) for both OSS and Plus. You'll need to create two clusters and VMs for this. Before running, update your `vars.env` file with the proper image tag and prefixes. NGF and nginx images will be available from `ghcr.io`, and nginx plus will be available in GCP (`us-docker.pkg.dev/<GCP_PROJECT_ID>/nginx-gateway-fabric/nginx-plus`). These tests need to run for 4 days before releasing. The results should be committed to the main branch and then cherry-picked to the release branch.
45+
1. Kick off the [longevity tests](https://github.com/nginx/nginx-gateway-fabric/blob/main/tests/README.md#longevity-testing) for both OSS and Plus. You'll need to create two clusters and VMs for this. Before running, update your `vars.env` file with the proper image tag and prefixes. NGF and nginx images will be available from `ghcr.io`, and nginx plus will be available in GCP (`us-docker.pkg.dev/<GCP_PROJECT_ID>/nginx-gateway-fabric/nginx-plus`). These tests need to run for 4 days before releasing. The results can be added to the NFR results that are collected in the next step.
4646
2. Kick off the [NFR workflow](https://github.com/nginx/nginx-gateway-fabric/actions/workflows/nfr.yml) in the browser. For `image_tag`, use `release-X.X-rc`, and for `version`, use the upcoming `X.Y.Z` NGF version. Run the workflow on the new release branch. This will run all of the NFR tests which are automated and open a PR with the results files when it is complete. Review this PR and make any necessary changes before merging. Once merged, be sure to cherry-pick the commit to the main branch as well (the original PR targets the release branch).
4747
3. Run the IPv6 tests using the `make ipv6-tests` target. This must be run from within the `tests` directory. An example of running this script for release 2.1.0 would look like this: `make ipv6-test TAG=release-2.1-rc`
4848
5. Run the [Release PR](https://github.com/nginx/nginx-gateway-fabric/actions/workflows/release-pr.yml) workflow to update the repo files for the release. Then there are a few manual steps to complete:
@@ -89,6 +89,8 @@ To create a new release, follow these steps:
8989
- Name the file based on the requirements of the [README](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/README.md). Update the README in the ngf directory and update the site source if necessary (see following example).
9090
- Open a PR. [Example](https://github.com/kubernetes-sigs/gateway-api/pull/3149)
9191
If it's your first time submitting a PR, you will need to sign a CLA using F5, Inc. as the organization.
92+
13. Follow the same steps to upload the `conformance-profile-inference.yaml` to the [Inference Extension repo](https://github.com/kubernetes-sigs/gateway-api-inference-extension/tree/main/conformance/reports).
93+
- You also may need to update other docs for NGF in that repo to ensure that they reference the correct version that we just updated to.
9294

9395
### Patch Release
9496

tests/README.md

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ This directory contains the tests for NGINX Gateway Fabric. The tests are divide
1515
- [Common steps for all tests](#common-steps-for-all-tests)
1616
- [Step 1 - Create a Kubernetes cluster](#step-1---create-a-kubernetes-cluster)
1717
- [Step 2 - Build and Load Images](#step-2---build-and-load-images)
18+
- [GKE](#gke)
1819
- [Conformance Testing](#conformance-testing)
1920
- [Step 1 - Install NGINX Gateway Fabric to configured kind cluster](#step-1---install-nginx-gateway-fabric-to-configured-kind-cluster)
2021
- [Option 1 - Build and install NGINX Gateway Fabric from local to configured kind cluster](#option-1---build-and-install-nginx-gateway-fabric-from-local-to-configured-kind-cluster)
@@ -58,7 +59,7 @@ All the commands below are executed from the `tests` directory. You can see all
5859

5960
### Step 1 - Create a Kubernetes cluster
6061

61-
**Important**: Functional tests can only be run on a `kind` cluster. Conformance tests can be run on `kind` or OpenShift clusters (see [OPENSHIFT_CONFORMANCE.md](OPENSHIFT_CONFORMANCE.md) for OpenShift instructions). NFR tests can only be run on a GKE cluster.
62+
**Important**: Functional tests can only be run on a `kind` cluster. Conformance tests can be run on `kind` or OpenShift clusters (see [OPENSHIFT_CONFORMANCE.md](OPENSHIFT_CONFORMANCE.md) for OpenShift instructions). NFR and longevity tests can only be run on a GKE cluster.
6263

6364
To create a local `kind` cluster:
6465

@@ -102,8 +103,7 @@ make update-firewall-with-local-ip
102103

103104
### Step 2 - Build and Load Images
104105

105-
Loading the images only applies to a `kind` cluster. If using GKE, you will need to tag and push
106-
your images to a registry that is accessible from GKE.
106+
Loading the images only applies to a `kind` cluster. If using GKE, see below
107107

108108
```makefile
109109
make build-images load-images TAG=$(whoami)
@@ -115,14 +115,25 @@ Or, to build NGF with NGINX Plus enabled (NGINX Plus cert and key must exist in
115115
make build-images-with-plus load-images-with-plus TAG=$(whoami)
116116
```
117117

118-
When building images to run on GKE, you'll need to specify `GOARCH=amd64` in the build command if your local system doesn't default to that architecture.
119-
120118
For the telemetry test, which requires a OTel collector, build an image with the following variables set:
121119

122120
```makefile
123121
TELEMETRY_ENDPOINT=otel-collector-opentelemetry-collector.collector.svc.cluster.local:4317 TELEMETRY_ENDPOINT_INSECURE=true
124122
```
125123

124+
#### GKE
125+
126+
If running tests on GKE, you will need to tag and push your images to a registry that is accessible from GKE. When building images to run on GKE, you'll need to specify `GOARCH=amd64` in the build command if your local system doesn't default to that architecture.
127+
128+
If running the longevity tests for a release, you should use the `-rc` images that were pushed as part of the release branch pipeline instead. For example, in your `vars.env` file
129+
130+
```text
131+
TAG=release-2.3-rc
132+
PREFIX=ghcr.io/nginx/nginx-gateway-fabric
133+
NGINX_PREFIX=ghcr.io/nginx/nginx-gateway-fabric/nginx
134+
NGINX_PLUS_PREFIX=us-docker.pkg.dev/<GCP-PROJECT-ID>/nginx-gateway-fabric/nginx-plus
135+
```
136+
126137
## Conformance Testing
127138

128139
### Step 1 - Install NGINX Gateway Fabric to configured kind cluster
@@ -242,13 +253,13 @@ The system tests are meant to be run on a live Kubernetes environment to verify
242253
are similar to the existing conformance tests, but will verify things such as:
243254

244255
- NGF-specific functionality
245-
- Non-Functional requirements (NFR) testing (such as performance, scale, etc.)
256+
- Non-Functional requirements (NFR) testing (such as performance, scale, longevity, etc.)
246257

247-
When running locally, the tests create a port-forward from your NGF Pod to localhost using a port chosen by the
248-
test framework. Traffic is sent over this port. If running on a GCP VM targeting a GKE cluster, the tests will create an
258+
When running locally (functional tests), the tests create a port-forward from your NGF Pod to localhost using a port chosen by the
259+
test framework. Traffic is sent over this port. If running on a GCP VM targeting a GKE cluster (NFR/longevity), the tests will create an
249260
internal LoadBalancer service which will receive the test traffic.
250261

251-
**Important**: Functional tests can only be run on a `kind` cluster. NFR tests can only be run on a GKE cluster.
262+
**Important**: Functional tests can only be run on a `kind` cluster. NFR/longevity tests can only be run on a GKE cluster.
252263

253264
Directory structure is as follows:
254265

0 commit comments

Comments
 (0)