Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
44 changes: 44 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,46 @@ This document includes a curated changelog for each release. We also publish a c
a [GitHub release](https://github.com/nginx/nginx-gateway-fabric/releases), which, by contrast, is auto-generated
and includes links to all PRs that went into the release.

## Release 2.2.1

_November 12, 2025_

FEATURES:

- Add support to make endpoint picker communication settings configurable. [4105](https://github.com/nginx/nginx-gateway-fabric/pull/4105)

BUG FIXES:

- Support mixed externalname and local services in single route. [4188](https://github.com/nginx/nginx-gateway-fabric/pull/4188)
- Preserve HPA replicas on deployment. [4214](https://github.com/nginx/nginx-gateway-fabric/pull/4214)
- Preserve external controller annotations. [4182](https://github.com/nginx/nginx-gateway-fabric/pull/4182)
- Fix bug where user mounted files were being removed by NGINX. [4178](https://github.com/nginx/nginx-gateway-fabric/pull/4178)
- Fix bug that prevented HPA from working when Inference Extension was enabled. [4247](https://github.com/nginx/nginx-gateway-fabric/pull/4247)

HELM CHART:

- Allow disabling cert-generator with a Helm value. [4186](https://github.com/nginx/nginx-gateway-fabric/pull/4186). Thanks to [fabian4](https://github.com/fabian4)
- The version of the Helm chart is now 2.2.1


KNOWN ISSUES:

- Data plane sometimes does not sync upstream server IPs. [3626](https://github.com/nginx/nginx-gateway-fabric/issues/3626)

COMPATIBILITY:

- Gateway API version: `1.3.0`
- NGINX version: `1.29.2`
- NGINX Plus version: `R35`
- NGINX Agent version: `v3.5.0`
- Kubernetes version: `1.25+`

CONTAINER IMAGES:

- Control plane: `ghcr.io/nginx/nginx-gateway-fabric:2.2.1`
- Data plane: `ghcr.io/nginx/nginx-gateway-fabric/nginx:2.2.1`
- Data plane with NGINX Plus: `private-registry.nginx.com/nginx-gateway-fabric/nginx-plus:2.2.1`

## Release 2.2.0

_October 21, 2025_
Expand All @@ -27,6 +67,10 @@ HELM CHART:
- The version of the Helm chart is now 2.2.0
- Set NGINX Plus default image. [3919](https://github.com/nginx/nginx-gateway-fabric/pull/3919)

KNOWN ISSUES:

- Data plane sometimes does not sync upstream server IPs. [3626](https://github.com/nginx/nginx-gateway-fabric/issues/3626)

COMPATIBILITY:

- Gateway API version: `1.3.0`
Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ You can find the comprehensive NGINX Gateway Fabric user documentation on the [N
We publish NGINX Gateway Fabric releases on GitHub. See
our [releases page](https://github.com/nginx/nginx-gateway-fabric/releases).

The latest release is [2.2.0](https://github.com/nginx/nginx-gateway-fabric/releases/tag/v2.2.0).
The latest release is [2.2.1](https://github.com/nginx/nginx-gateway-fabric/releases/tag/v2.2.1).

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

| Version | Description | Installation Manifests | Documentation and Examples |
|----------------|------------------------------------------|--------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Latest release | For production use | [Manifests](https://github.com/nginx/nginx-gateway-fabric/tree/v2.2.0/deploy). | [Documentation](https://docs.nginx.com/nginx-gateway-fabric). [Examples](https://github.com/nginx/nginx-gateway-fabric/tree/v2.2.0/examples). |
| Latest release | For production use | [Manifests](https://github.com/nginx/nginx-gateway-fabric/tree/v2.2.1/deploy). | [Documentation](https://docs.nginx.com/nginx-gateway-fabric). [Examples](https://github.com/nginx/nginx-gateway-fabric/tree/v2.2.1/examples). |
| 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). |

### Versioning
Expand All @@ -68,7 +68,8 @@ The following table lists the software versions NGINX Gateway Fabric supports.

| NGINX Gateway Fabric | Gateway API | Kubernetes | NGINX OSS | NGINX Plus | NGINX Agent |
|----------------------|-------------|------------|-----------|------------|-------------|
| Edge | 1.4.0 | 1.25+ | 1.29.2 | R35 | v3.5.0 |
| Edge | 1.4.0 | 1.25+ | 1.29.3 | R35 | v3.5.0 |
| 2.2.1 | 1.3.0 | 1.25+ | 1.29.2 | R35 | v3.5.0 |
| 2.2.0 | 1.3.0 | 1.25+ | 1.29.2 | R35 | v3.3.2 |
| 2.1.4 | 1.3.0 | 1.25+ | 1.29.1 | R35 | v3.3.1 |
| 2.1.3 | 1.3.0 | 1.25+ | 1.29.1 | R35 | v3.3.1 |
Expand Down
4 changes: 2 additions & 2 deletions charts/nginx-gateway-fabric/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ apiVersion: v2
name: nginx-gateway-fabric
description: NGINX Gateway Fabric
type: application
version: 2.2.0
appVersion: "2.2.0"
version: 2.2.1
appVersion: "2.2.1"
kubeVersion: ">= 1.25.0-0"
home: https://github.com/nginx/nginx-gateway-fabric
icon: https://raw.githubusercontent.com/nginx/nginx-gateway-fabric/main/charts/nginx-gateway-fabric/chart-icon.png
Expand Down
8 changes: 4 additions & 4 deletions charts/nginx-gateway-fabric/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

# NGINX Gateway Fabric Helm Chart

![Version: 2.2.0](https://img.shields.io/badge/Version-2.2.0-informational?style=flat-square) ![AppVersion: 2.2.0](https://img.shields.io/badge/AppVersion-2.2.0-informational?style=flat-square)
![Version: 2.2.1](https://img.shields.io/badge/Version-2.2.1-informational?style=flat-square) ![AppVersion: 2.2.1](https://img.shields.io/badge/AppVersion-2.2.1-informational?style=flat-square)

- [NGINX Gateway Fabric Helm Chart](#nginx-gateway-fabric-helm-chart)
- [Introduction](#introduction)
Expand Down Expand Up @@ -208,7 +208,7 @@ The following table lists the configurable parameters of the NGINX Gateway Fabri
| `certGenerator.ttlSecondsAfterFinished` | How long to wait after the cert generator job has finished before it is removed by the job controller. | int | `30` |
| `clusterDomain` | The DNS cluster domain of your Kubernetes cluster. | string | `"cluster.local"` |
| `gateways` | A list of Gateway objects. View https://gateway-api.sigs.k8s.io/reference/spec/#gateway for full Gateway reference. | list | `[]` |
| `nginx` | The nginx section contains the configuration for all NGINX data plane deployments installed by the NGINX Gateway Fabric control plane. | object | `{"autoscaling":{"enable":false},"config":{},"container":{"hostPorts":[],"lifecycle":{},"readinessProbe":{},"resources":{},"volumeMounts":[]},"debug":false,"image":{"pullPolicy":"IfNotPresent","repository":"ghcr.io/nginx/nginx-gateway-fabric/nginx","tag":"2.2.0"},"imagePullSecret":"","imagePullSecrets":[],"kind":"deployment","nginxOneConsole":{"dataplaneKeySecretName":"","endpointHost":"agent.connect.nginx.com","endpointPort":443,"skipVerify":false},"patches":[],"plus":false,"pod":{},"replicas":1,"service":{"externalTrafficPolicy":"Local","loadBalancerClass":"","loadBalancerIP":"","loadBalancerSourceRanges":[],"nodePorts":[],"patches":[],"type":"LoadBalancer"},"usage":{"caSecretName":"","clientSSLSecretName":"","endpoint":"","enforceInitialReport":true,"resolver":"","secretName":"nplus-license","skipVerify":false}}` |
| `nginx` | The nginx section contains the configuration for all NGINX data plane deployments installed by the NGINX Gateway Fabric control plane. | object | `{"autoscaling":{"enable":false},"config":{},"container":{"hostPorts":[],"lifecycle":{},"readinessProbe":{},"resources":{},"volumeMounts":[]},"debug":false,"image":{"pullPolicy":"IfNotPresent","repository":"ghcr.io/nginx/nginx-gateway-fabric/nginx","tag":"2.2.1"},"imagePullSecret":"","imagePullSecrets":[],"kind":"deployment","nginxOneConsole":{"dataplaneKeySecretName":"","endpointHost":"agent.connect.nginx.com","endpointPort":443,"skipVerify":false},"patches":[],"plus":false,"pod":{},"replicas":1,"service":{"externalTrafficPolicy":"Local","loadBalancerClass":"","loadBalancerIP":"","loadBalancerSourceRanges":[],"nodePorts":[],"patches":[],"type":"LoadBalancer"},"usage":{"caSecretName":"","clientSSLSecretName":"","endpoint":"","enforceInitialReport":true,"resolver":"","secretName":"nplus-license","skipVerify":false}}` |
| `nginx.autoscaling` | Autoscaling configuration for the NGINX data plane. | object | `{"enable":false}` |
| `nginx.autoscaling.enable` | Enable or disable Horizontal Pod Autoscaler for the NGINX data plane. | bool | `false` |
| `nginx.config` | The configuration for the data plane that is contained in the NginxProxy resource. This is applied globally to all Gateways managed by this instance of NGINX Gateway Fabric. | object | `{}` |
Expand Down Expand Up @@ -246,7 +246,7 @@ The following table lists the configurable parameters of the NGINX Gateway Fabri
| `nginx.usage.resolver` | The nameserver used to resolve the NGINX Plus usage reporting endpoint. Used with NGINX Instance Manager. | string | `""` |
| `nginx.usage.secretName` | The name of the Secret containing the JWT for NGINX Plus usage reporting. Must exist in the same namespace that the NGINX Gateway Fabric control plane is running in (default namespace: nginx-gateway). | string | `"nplus-license"` |
| `nginx.usage.skipVerify` | Disable client verification of the NGINX Plus usage reporting server certificate. | bool | `false` |
| `nginxGateway` | The nginxGateway section contains configuration for the NGINX Gateway Fabric control plane deployment. | object | `{"affinity":{},"autoscaling":{"enable":false},"config":{"logging":{"level":"info"}},"configAnnotations":{},"extraVolumeMounts":[],"extraVolumes":[],"gatewayClassAnnotations":{},"gatewayClassName":"nginx","gatewayControllerName":"gateway.nginx.org/nginx-gateway-controller","gwAPIExperimentalFeatures":{"enable":false},"gwAPIInferenceExtension":{"enable":false,"endpointPicker":{"disableTLS":false,"skipVerify":true}},"image":{"pullPolicy":"IfNotPresent","repository":"ghcr.io/nginx/nginx-gateway-fabric","tag":"2.2.0"},"kind":"deployment","labels":{},"leaderElection":{"enable":true,"lockName":""},"lifecycle":{},"metrics":{"enable":true,"port":9113,"secure":false},"name":"","nodeSelector":{},"podAnnotations":{},"productTelemetry":{"enable":true},"readinessProbe":{"enable":true,"initialDelaySeconds":3,"port":8081},"replicas":1,"resources":{},"service":{"annotations":{},"labels":{}},"serviceAccount":{"annotations":{},"imagePullSecret":"","imagePullSecrets":[],"name":""},"snippetsFilters":{"enable":false},"terminationGracePeriodSeconds":30,"tolerations":[],"topologySpreadConstraints":[]}` |
| `nginxGateway` | The nginxGateway section contains configuration for the NGINX Gateway Fabric control plane deployment. | object | `{"affinity":{},"autoscaling":{"enable":false},"config":{"logging":{"level":"info"}},"configAnnotations":{},"extraVolumeMounts":[],"extraVolumes":[],"gatewayClassAnnotations":{},"gatewayClassName":"nginx","gatewayControllerName":"gateway.nginx.org/nginx-gateway-controller","gwAPIExperimentalFeatures":{"enable":false},"gwAPIInferenceExtension":{"enable":false,"endpointPicker":{"disableTLS":false,"skipVerify":true}},"image":{"pullPolicy":"IfNotPresent","repository":"ghcr.io/nginx/nginx-gateway-fabric","tag":"2.2.1"},"kind":"deployment","labels":{},"leaderElection":{"enable":true,"lockName":""},"lifecycle":{},"metrics":{"enable":true,"port":9113,"secure":false},"name":"","nodeSelector":{},"podAnnotations":{},"productTelemetry":{"enable":true},"readinessProbe":{"enable":true,"initialDelaySeconds":3,"port":8081},"replicas":1,"resources":{},"service":{"annotations":{},"labels":{}},"serviceAccount":{"annotations":{},"imagePullSecret":"","imagePullSecrets":[],"name":""},"snippetsFilters":{"enable":false},"terminationGracePeriodSeconds":30,"tolerations":[],"topologySpreadConstraints":[]}` |
| `nginxGateway.affinity` | The affinity of the NGINX Gateway Fabric control plane pod. | object | `{}` |
| `nginxGateway.autoscaling` | Autoscaling configuration for the NGINX Gateway Fabric control plane. | object | `{"enable":false}` |
| `nginxGateway.autoscaling.enable` | Enable or disable Horizontal Pod Autoscaler for the control plane. | bool | `false` |
Expand All @@ -262,7 +262,7 @@ The following table lists the configurable parameters of the NGINX Gateway Fabri
| `nginxGateway.gwAPIInferenceExtension.endpointPicker` | EndpointPicker TLS configuration. | object | `{"disableTLS":false,"skipVerify":true}` |
| `nginxGateway.gwAPIInferenceExtension.endpointPicker.disableTLS` | Disable TLS for EndpointPicker communication. By default, TLS is enabled. Set to true only for development/testing or when using a service mesh for encryption. | bool | `false` |
| `nginxGateway.gwAPIInferenceExtension.endpointPicker.skipVerify` | Disables TLS certificate verification when connecting to the EndpointPicker. By default, certificate verification is disabled. REQUIRED: Must be true until Gateway API Inference Extension EndpointPicker supports mounting certificates. See: https://github.com/kubernetes-sigs/gateway-api-inference-extension/issues/1556 | bool | `true` |
| `nginxGateway.image` | The image configuration for the NGINX Gateway Fabric control plane. | object | `{"pullPolicy":"IfNotPresent","repository":"ghcr.io/nginx/nginx-gateway-fabric","tag":"2.2.0"}` |
| `nginxGateway.image` | The image configuration for the NGINX Gateway Fabric control plane. | object | `{"pullPolicy":"IfNotPresent","repository":"ghcr.io/nginx/nginx-gateway-fabric","tag":"2.2.1"}` |
| `nginxGateway.image.repository` | The NGINX Gateway Fabric image to use | string | `"ghcr.io/nginx/nginx-gateway-fabric"` |
| `nginxGateway.kind` | The kind of the NGINX Gateway Fabric installation - currently, only deployment is supported. | string | `"deployment"` |
| `nginxGateway.labels` | Set of labels to be added for NGINX Gateway Fabric deployment. | object | `{}` |
Expand Down
4 changes: 2 additions & 2 deletions charts/nginx-gateway-fabric/values.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@
"type": "string"
},
"tag": {
"default": "2.2.0",
"default": "2.2.1",
"required": [],
"title": "tag",
"type": "string"
Expand Down Expand Up @@ -902,7 +902,7 @@
"type": "string"
},
"tag": {
"default": "2.2.0",
"default": "2.2.1",
"required": [],
"title": "tag",
"type": "string"
Expand Down
4 changes: 2 additions & 2 deletions charts/nginx-gateway-fabric/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ nginxGateway:
image:
# -- The NGINX Gateway Fabric image to use
repository: ghcr.io/nginx/nginx-gateway-fabric
tag: 2.2.0
tag: 2.2.1
# @schema
# enum:
# - Always
Expand Down Expand Up @@ -288,7 +288,7 @@ nginx:
image:
# -- The NGINX image to use.
repository: ghcr.io/nginx/nginx-gateway-fabric/nginx
tag: 2.2.0
tag: 2.2.1
# @schema
# enum:
# - Always
Expand Down
32 changes: 16 additions & 16 deletions deploy/azure/deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway
namespace: nginx-gateway
---
Expand All @@ -21,7 +21,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway-cert-generator
namespace: nginx-gateway
---
Expand All @@ -31,7 +31,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway-cert-generator
namespace: nginx-gateway
rules:
Expand All @@ -50,7 +50,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway
rules:
- apiGroups:
Expand Down Expand Up @@ -201,7 +201,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway-cert-generator
namespace: nginx-gateway
roleRef:
Expand All @@ -219,7 +219,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway
roleRef:
apiGroup: rbac.authorization.k8s.io
Expand All @@ -236,7 +236,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway
namespace: nginx-gateway
spec:
Expand All @@ -256,7 +256,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway
namespace: nginx-gateway
spec:
Expand Down Expand Up @@ -304,8 +304,8 @@ spec:
fieldRef:
fieldPath: metadata.labels['app.kubernetes.io/instance']
- name: IMAGE_NAME
value: ghcr.io/nginx/nginx-gateway-fabric:2.2.0
image: ghcr.io/nginx/nginx-gateway-fabric:2.2.0
value: ghcr.io/nginx/nginx-gateway-fabric:2.2.1
image: ghcr.io/nginx/nginx-gateway-fabric:2.2.1
imagePullPolicy: IfNotPresent
name: nginx-gateway
ports:
Expand Down Expand Up @@ -352,7 +352,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway-cert-generator
namespace: nginx-gateway
spec:
Expand All @@ -373,7 +373,7 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: ghcr.io/nginx/nginx-gateway-fabric:2.2.0
image: ghcr.io/nginx/nginx-gateway-fabric:2.2.1
imagePullPolicy: IfNotPresent
name: cert-generator
securityContext:
Expand All @@ -399,7 +399,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx
spec:
controllerName: gateway.nginx.org/nginx-gateway-controller
Expand All @@ -415,7 +415,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway-config
namespace: nginx-gateway
spec:
Expand All @@ -428,7 +428,7 @@ metadata:
labels:
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/version: 2.2.0
app.kubernetes.io/version: 2.2.1
name: nginx-gateway-proxy-config
namespace: nginx-gateway
spec:
Expand All @@ -438,7 +438,7 @@ spec:
image:
pullPolicy: IfNotPresent
repository: ghcr.io/nginx/nginx-gateway-fabric/nginx
tag: 2.2.0
tag: 2.2.1
pod:
nodeSelector:
kubernetes.io/os: linux
Expand Down
Loading
Loading