Skip to content

Commit 7c87b0b

Browse files
committed
Merge remote-tracking branch 'upstream/main' into hpa
2 parents 8075053 + 36e64ae commit 7c87b0b

File tree

9 files changed

+102
-35
lines changed

9 files changed

+102
-35
lines changed

CHANGELOG.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,35 @@ 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.0.1
8+
9+
_June 11, 2025_
10+
11+
Bug Fixes:
12+
13+
- Set proper IP family policy on NGINX LB Service. [3475](https://github.com/nginx/nginx-gateway-fabric/pull/3475).
14+
15+
HELM CHART:
16+
17+
- The version of the Helm chart is now 2.0.1.
18+
- Add support to configure `cert-generator` job pod placement. [3493](https://github.com/nginx/nginx-gateway-fabric/pull/3493). Thanks to [Baburciu](https://github.com/baburciu).
19+
- Add support for configuring the `ttlSecondsAfterFinished` field for the cert-generator job. The default is set to 30s. [3487](https://github.com/nginx/nginx-gateway-fabric/pull/3487). Thanks to [Ab-andresc](https://github.com/ab-andresc).
20+
- Adds support for all additional labels for the control plane service. [3499](https://github.com/nginx/nginx-gateway-fabric/pull/3499). Thanks to [MichasHL](https://github.com/michasHL).
21+
22+
COMPATIBILITY:
23+
24+
- Gateway API version: `1.3.0`
25+
- NGINX version: `1.28.0`
26+
- NGINX Plus version: `R34`
27+
- NGINX Agent version: `v3.0.1`
28+
- Kubernetes version: `1.25+`
29+
30+
CONTAINER IMAGES:
31+
32+
- Control plane: `ghcr.io/nginx/nginx-gateway-fabric:2.0.1`
33+
- Data plane: `ghcr.io/nginx/nginx-gateway-fabric/nginx:2.0.1`
34+
- Data plane with NGINX Plus: `private-registry.nginx.com/nginx-gateway-fabric/nginx-plus:2.0.1`
35+
736
## Release 2.0.0
837

938
_June 5, 2025_

README.md

Lines changed: 4 additions & 3 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.0.0](https://github.com/nginx/nginx-gateway-fabric/releases/tag/v2.0.0).
39+
The latest release is [2.0.1](https://github.com/nginx/nginx-gateway-fabric/releases/tag/v2.0.1).
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.0.0/deploy). | [Documentation](https://docs.nginx.com/nginx-gateway-fabric). [Examples](https://github.com/nginx/nginx-gateway-fabric/tree/v2.0.0/examples). |
50+
| Latest release | For production use | [Manifests](https://github.com/nginx/nginx-gateway-fabric/tree/v2.0.1/deploy). | [Documentation](https://docs.nginx.com/nginx-gateway-fabric). [Examples](https://github.com/nginx/nginx-gateway-fabric/tree/v2.0.1/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
@@ -68,7 +68,8 @@ The following table lists the software versions NGINX Gateway Fabric supports.
6868

6969
| NGINX Gateway Fabric | Gateway API | Kubernetes | NGINX OSS | NGINX Plus | NGINX Agent |
7070
|----------------------|-------------|------------|-----------|------------|-------------|
71-
| Edge | 1.3.0 | 1.25+ | 1.28.0 | R34 | v3.0.0 |
71+
| Edge | 1.3.0 | 1.25+ | 1.28.0 | R34 | v3.0.1 |
72+
| 2.0.1 | 1.3.0 | 1.25+ | 1.28.0 | R34 | v3.0.1 |
7273
| 2.0.0 | 1.3.0 | 1.25+ | 1.28.0 | R34 | v3.0.0 |
7374
| 1.6.2 | 1.2.1 | 1.25+ | 1.27.4 | R33 | --- |
7475
| 1.6.1 | 1.2.1 | 1.25+ | 1.27.4 | R33 | --- |

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.0.0
5+
version: 2.0.1
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.0.0](https://img.shields.io/badge/Version-2.0.0-informational?style=flat-square) ![AppVersion: edge](https://img.shields.io/badge/AppVersion-edge-informational?style=flat-square)
4+
![Version: 2.0.1](https://img.shields.io/badge/Version-2.0.1-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/developer/release-process.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,15 @@ To create a new release, follow these steps:
5454
the [GitHub releases](https://github.com/nginx/nginx-gateway-fabric/releases) after the release branch is
5555
created. If included, use the Release Notes specified in a PR.
5656
- If the supported Gateway API minor version has changed since the last release, add a note to the release notes explaining if the previous version is no longer supported.
57-
6. Ensure you are on the latest version of the release branch and are up-to-date on all commits, then create and push the release tag in the format `vX.Y.Z`. As a result, the CI/CD pipeline will:
57+
- Merge the release PR once it has received all necessary approvals.
58+
6. Ensure you are on the latest version of the release branch and are up-to-date on all commits, then create and push the release tag in the format `vX.Y.Z`.
59+
60+
```shell
61+
git tag vX.Y.Z
62+
git push upstream vX.Y.Z
63+
```
64+
65+
As a result, the CI/CD pipeline will:
5866
- Build NGF, NGINX and NGINX Plus container images with the release tag `X.Y.Z` and push them to the registries.
5967
- Package and publish the Helm chart to the registry.
6068
- Create a GitHub release with an autogenerated changelog and attached release artifacts.

internal/controller/state/graph/httproute.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,11 +187,11 @@ func processHTTPRouteRule(
187187

188188
// rule.BackendRefs are validated separately because of their special requirements
189189
for _, b := range specRule.BackendRefs {
190-
var interfaceFilters []interface{}
190+
var interfaceFilters []any
191191
if len(b.Filters) > 0 {
192-
interfaceFilters = make([]interface{}, 0, len(b.Filters))
193-
for i, v := range b.Filters {
194-
interfaceFilters[i] = v
192+
interfaceFilters = make([]any, 0, len(b.Filters))
193+
for _, filter := range b.Filters {
194+
interfaceFilters = append(interfaceFilters, filter)
195195
}
196196
}
197197
rbr := RouteBackendRef{
@@ -211,7 +211,7 @@ func processHTTPRouteRule(
211211
BackendRef: v1.BackendRef{
212212
BackendObjectReference: filter.RequestMirror.BackendRef,
213213
},
214-
MirrorBackendIdx: helpers.GetPointer[int](i),
214+
MirrorBackendIdx: helpers.GetPointer(i),
215215
}
216216
backendRefs = append(backendRefs, rbr)
217217
}

internal/controller/state/graph/httproute_test.go

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,21 @@ func createHTTPRoute(
5151
},
5252
},
5353
},
54+
BackendRefs: []gatewayv1.HTTPBackendRef{
55+
{
56+
BackendRef: gatewayv1.BackendRef{
57+
BackendObjectReference: gatewayv1.BackendObjectReference{
58+
Kind: helpers.GetPointer[gatewayv1.Kind](kinds.Service),
59+
Name: "backend",
60+
},
61+
},
62+
Filters: []gatewayv1.HTTPRouteFilter{
63+
{
64+
Type: gatewayv1.HTTPRouteFilterExtensionRef,
65+
},
66+
},
67+
},
68+
},
5469
})
5570
}
5671

@@ -88,6 +103,20 @@ func addFilterToPath(hr *gatewayv1.HTTPRoute, path string, filter gatewayv1.HTTP
88103
}
89104
}
90105

106+
var expRouteBackendRef = RouteBackendRef{
107+
BackendRef: gatewayv1.BackendRef{
108+
BackendObjectReference: gatewayv1.BackendObjectReference{
109+
Kind: helpers.GetPointer[gatewayv1.Kind](kinds.Service),
110+
Name: "backend",
111+
},
112+
},
113+
Filters: []any{
114+
gatewayv1.HTTPRouteFilter{
115+
Type: gatewayv1.HTTPRouteFilterExtensionRef,
116+
},
117+
},
118+
}
119+
91120
func TestBuildHTTPRoutes(t *testing.T) {
92121
t.Parallel()
93122

@@ -196,7 +225,7 @@ func TestBuildHTTPRoutes(t *testing.T) {
196225
},
197226
},
198227
Matches: hr.Spec.Rules[0].Matches,
199-
RouteBackendRefs: []RouteBackendRef{},
228+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
200229
},
201230
},
202231
},
@@ -394,7 +423,7 @@ func TestBuildHTTPRoute(t *testing.T) {
394423
Filters: []Filter{},
395424
},
396425
Matches: hr.Spec.Rules[0].Matches,
397-
RouteBackendRefs: []RouteBackendRef{},
426+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
398427
},
399428
{
400429
ValidMatches: true,
@@ -403,7 +432,7 @@ func TestBuildHTTPRoute(t *testing.T) {
403432
Filters: convertHTTPRouteFilters(hr.Spec.Rules[1].Filters),
404433
},
405434
Matches: hr.Spec.Rules[1].Matches,
406-
RouteBackendRefs: []RouteBackendRef{},
435+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
407436
},
408437
},
409438
},
@@ -439,7 +468,7 @@ func TestBuildHTTPRoute(t *testing.T) {
439468
Valid: true,
440469
Filters: []Filter{},
441470
},
442-
RouteBackendRefs: []RouteBackendRef{},
471+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
443472
Matches: hrInvalidMatchesEmptyPathType.Spec.Rules[0].Matches,
444473
},
445474
},
@@ -485,7 +514,7 @@ func TestBuildHTTPRoute(t *testing.T) {
485514
Valid: true,
486515
Filters: []Filter{},
487516
},
488-
RouteBackendRefs: []RouteBackendRef{},
517+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
489518
Matches: hrInvalidMatchesEmptyPathValue.Spec.Rules[0].Matches,
490519
},
491520
},
@@ -552,7 +581,7 @@ func TestBuildHTTPRoute(t *testing.T) {
552581
Filters: []Filter{},
553582
},
554583
Matches: hrInvalidMatches.Spec.Rules[0].Matches,
555-
RouteBackendRefs: []RouteBackendRef{},
584+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
556585
},
557586
},
558587
},
@@ -590,7 +619,7 @@ func TestBuildHTTPRoute(t *testing.T) {
590619
Filters: convertHTTPRouteFilters(hrInvalidFilters.Spec.Rules[0].Filters),
591620
},
592621
Matches: hrInvalidFilters.Spec.Rules[0].Matches,
593-
RouteBackendRefs: []RouteBackendRef{},
622+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
594623
},
595624
},
596625
},
@@ -627,7 +656,7 @@ func TestBuildHTTPRoute(t *testing.T) {
627656
Filters: []Filter{},
628657
},
629658
Matches: hrDroppedInvalidMatches.Spec.Rules[0].Matches,
630-
RouteBackendRefs: []RouteBackendRef{},
659+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
631660
},
632661
{
633662
ValidMatches: true,
@@ -636,7 +665,7 @@ func TestBuildHTTPRoute(t *testing.T) {
636665
Filters: []Filter{},
637666
},
638667
Matches: hrDroppedInvalidMatches.Spec.Rules[1].Matches,
639-
RouteBackendRefs: []RouteBackendRef{},
668+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
640669
},
641670
},
642671
},
@@ -676,7 +705,7 @@ func TestBuildHTTPRoute(t *testing.T) {
676705
Filters: []Filter{},
677706
},
678707
Matches: hrDroppedInvalidMatchesAndInvalidFilters.Spec.Rules[0].Matches,
679-
RouteBackendRefs: []RouteBackendRef{},
708+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
680709
},
681710
{
682711
ValidMatches: true,
@@ -687,7 +716,7 @@ func TestBuildHTTPRoute(t *testing.T) {
687716
hrDroppedInvalidMatchesAndInvalidFilters.Spec.Rules[1].Filters,
688717
),
689718
},
690-
RouteBackendRefs: []RouteBackendRef{},
719+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
691720
},
692721
{
693722
ValidMatches: true,
@@ -696,7 +725,7 @@ func TestBuildHTTPRoute(t *testing.T) {
696725
Filters: []Filter{},
697726
},
698727
Matches: hrDroppedInvalidMatchesAndInvalidFilters.Spec.Rules[2].Matches,
699-
RouteBackendRefs: []RouteBackendRef{},
728+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
700729
},
701730
},
702731
},
@@ -734,7 +763,7 @@ func TestBuildHTTPRoute(t *testing.T) {
734763
Filters: convertHTTPRouteFilters(hrDroppedInvalidFilters.Spec.Rules[0].Filters),
735764
Valid: true,
736765
},
737-
RouteBackendRefs: []RouteBackendRef{},
766+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
738767
},
739768
{
740769
ValidMatches: true,
@@ -743,7 +772,7 @@ func TestBuildHTTPRoute(t *testing.T) {
743772
Filters: convertHTTPRouteFilters(hrDroppedInvalidFilters.Spec.Rules[1].Filters),
744773
Valid: false,
745774
},
746-
RouteBackendRefs: []RouteBackendRef{},
775+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
747776
},
748777
},
749778
},
@@ -785,7 +814,7 @@ func TestBuildHTTPRoute(t *testing.T) {
785814
},
786815
Valid: true,
787816
},
788-
RouteBackendRefs: []RouteBackendRef{},
817+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
789818
},
790819
},
791820
},
@@ -823,7 +852,7 @@ func TestBuildHTTPRoute(t *testing.T) {
823852
Filters: convertHTTPRouteFilters(hrInvalidSnippetsFilter.Spec.Rules[0].Filters),
824853
Valid: false,
825854
},
826-
RouteBackendRefs: []RouteBackendRef{},
855+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
827856
},
828857
},
829858
},
@@ -862,7 +891,7 @@ func TestBuildHTTPRoute(t *testing.T) {
862891
Filters: convertHTTPRouteFilters(hrUnresolvableSnippetsFilter.Spec.Rules[0].Filters),
863892
Valid: false,
864893
},
865-
RouteBackendRefs: []RouteBackendRef{},
894+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
866895
},
867896
},
868897
},
@@ -907,7 +936,7 @@ func TestBuildHTTPRoute(t *testing.T) {
907936
),
908937
Valid: false,
909938
},
910-
RouteBackendRefs: []RouteBackendRef{},
939+
RouteBackendRefs: []RouteBackendRef{expRouteBackendRef},
911940
},
912941
},
913942
},

internal/controller/status/prepare_requests.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ func removeDuplicateIndexParentRefs(parentRefs []graph.ParentRef) []graph.Parent
103103
idxToParentRef[ref.Idx] = append(idxToParentRef[ref.Idx], ref)
104104
}
105105

106-
results := make([]graph.ParentRef, len(idxToParentRef))
106+
results := make([]graph.ParentRef, 0, len(idxToParentRef))
107107

108108
for idx, refs := range idxToParentRef {
109109
if len(refs) == 1 {
110-
results[idx] = refs[0]
110+
results = append(results, refs[0])
111111
continue
112112
}
113113

@@ -124,7 +124,7 @@ func removeDuplicateIndexParentRefs(parentRefs []graph.ParentRef) []graph.Parent
124124
}
125125
}
126126
}
127-
results[idx] = winningParentRef
127+
results = append(results, winningParentRef)
128128
}
129129

130130
return results

internal/controller/status/prepare_requests_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ func TestBuildHTTPRouteStatuses(t *testing.T) {
445445

446446
err := k8sClient.Get(context.Background(), nsname, &hr)
447447
g.Expect(err).ToNot(HaveOccurred())
448-
g.Expect(helpers.Diff(expected, hr.Status)).To(BeEmpty())
448+
g.Expect(expected.RouteStatus.Parents).To(ConsistOf(hr.Status.Parents))
449449
}
450450
}
451451

@@ -524,7 +524,7 @@ func TestBuildGRPCRouteStatuses(t *testing.T) {
524524

525525
err := k8sClient.Get(context.Background(), nsname, &hr)
526526
g.Expect(err).ToNot(HaveOccurred())
527-
g.Expect(helpers.Diff(expected, hr.Status)).To(BeEmpty())
527+
g.Expect(expected.RouteStatus.Parents).To(ConsistOf(hr.Status.Parents))
528528
}
529529
}
530530

@@ -601,7 +601,7 @@ func TestBuildTLSRouteStatuses(t *testing.T) {
601601

602602
err := k8sClient.Get(context.Background(), nsname, &hr)
603603
g.Expect(err).ToNot(HaveOccurred())
604-
g.Expect(helpers.Diff(expected, hr.Status)).To(BeEmpty())
604+
g.Expect(expected.RouteStatus.Parents).To(ConsistOf(hr.Status.Parents))
605605
}
606606
}
607607

0 commit comments

Comments
 (0)