Skip to content

Commit e1e46e8

Browse files
authored
Merge branch 'main' into tests/ipv6-only-environment
2 parents 774c0e7 + 54135b5 commit e1e46e8

30 files changed

+836
-209
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ jobs:
182182
fail-build: false
183183

184184
- name: Upload scan result to GitHub Security tab
185-
uses: github/codeql-action/upload-sarif@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # v3.30.1
185+
uses: github/codeql-action/upload-sarif@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3
186186
if: ${{ !inputs.dry_run }}
187187
continue-on-error: true
188188
with:

.github/workflows/scorecards.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,6 @@ jobs:
6060

6161
# Upload the results to GitHub's code scanning dashboard.
6262
- name: "Upload to code-scanning"
63-
uses: github/codeql-action/upload-sarif@f1f6e5f6af878fb37288ce1c627459e94dbf7d01 # v3.30.1
63+
uses: github/codeql-action/upload-sarif@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3
6464
with:
6565
sarif_file: results.sarif

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ install-crds: ## Install CRDs
130130

131131
.PHONY: install-gateway-crds
132132
install-gateway-crds: ## Install Gateway API CRDs
133-
kubectl kustomize $(SELF_DIR)config/crd/gateway-api/$(if $(filter true,$(ENABLE_EXPERIMENTAL)),experimental,standard) | kubectl apply -f -
133+
kubectl kustomize $(SELF_DIR)config/crd/gateway-api/$(if $(filter true,$(ENABLE_EXPERIMENTAL)),experimental,standard) | kubectl apply --server-side -f -
134134

135135
.PHONY: uninstall-gateway-crds
136136
uninstall-gateway-crds: ## Uninstall Gateway API CRDs

go.mod

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ require (
1818
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0
1919
go.uber.org/zap v1.27.0
2020
golang.org/x/text v0.29.0
21-
google.golang.org/grpc v1.75.0
22-
google.golang.org/protobuf v1.36.8
21+
google.golang.org/grpc v1.75.1
22+
google.golang.org/protobuf v1.36.9
2323
gopkg.in/evanphx/json-patch.v4 v4.13.0
24-
k8s.io/api v0.34.0
25-
k8s.io/apiextensions-apiserver v0.34.0
26-
k8s.io/apimachinery v0.34.0
27-
k8s.io/client-go v0.34.0
24+
k8s.io/api v0.34.1
25+
k8s.io/apiextensions-apiserver v0.34.1
26+
k8s.io/apimachinery v0.34.1
27+
k8s.io/client-go v0.34.1
2828
k8s.io/klog/v2 v2.130.1
29-
sigs.k8s.io/controller-runtime v0.22.0
29+
sigs.k8s.io/controller-runtime v0.22.1
3030
sigs.k8s.io/gateway-api v1.3.0
3131
)
3232

@@ -55,7 +55,7 @@ require (
5555
github.com/josharian/intern v1.0.0 // indirect
5656
github.com/json-iterator/go v1.1.12 // indirect
5757
github.com/mailru/easyjson v0.7.7 // indirect
58-
github.com/maxbrunsfeld/counterfeiter/v6 v6.11.3 // indirect
58+
github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 // indirect
5959
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
6060
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
6161
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect

go.sum

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a
111111
github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
112112
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
113113
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
114-
github.com/maxbrunsfeld/counterfeiter/v6 v6.11.3 h1:Eaq36EIyJNp7b3qDhjV7jmDVq/yPeW2v4pTqzGbOGB4=
115-
github.com/maxbrunsfeld/counterfeiter/v6 v6.11.3/go.mod h1:6KKUoQBZBW6PDXJtNfqeEjPXMj/ITTk+cWK9t9uS5+E=
114+
github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 h1:aOeI7xAOVdK+R6xbVsZuU9HmCZYmQVmZgPf9xJUd2Sg=
115+
github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0/go.mod h1:0hZWbtfeCYUQeAQdPLUzETiBhUSns7O6LDj9vH88xKA=
116116
github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
117117
github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
118118
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
@@ -303,10 +303,10 @@ google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:
303303
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE=
304304
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
305305
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
306-
google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
307-
google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
308-
google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
309-
google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
306+
google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
307+
google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
308+
google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
309+
google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
310310
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
311311
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
312312
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
@@ -318,22 +318,22 @@ gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
318318
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
319319
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
320320
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
321-
k8s.io/api v0.34.0 h1:L+JtP2wDbEYPUeNGbeSa/5GwFtIA662EmT2YSLOkAVE=
322-
k8s.io/api v0.34.0/go.mod h1:YzgkIzOOlhl9uwWCZNqpw6RJy9L2FK4dlJeayUoydug=
323-
k8s.io/apiextensions-apiserver v0.34.0 h1:B3hiB32jV7BcyKcMU5fDaDxk882YrJ1KU+ZSkA9Qxoc=
324-
k8s.io/apiextensions-apiserver v0.34.0/go.mod h1:hLI4GxE1BDBy9adJKxUxCEHBGZtGfIg98Q+JmTD7+g0=
325-
k8s.io/apimachinery v0.34.0 h1:eR1WO5fo0HyoQZt1wdISpFDffnWOvFLOOeJ7MgIv4z0=
326-
k8s.io/apimachinery v0.34.0/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
327-
k8s.io/client-go v0.34.0 h1:YoWv5r7bsBfb0Hs2jh8SOvFbKzzxyNo0nSb0zC19KZo=
328-
k8s.io/client-go v0.34.0/go.mod h1:ozgMnEKXkRjeMvBZdV1AijMHLTh3pbACPvK7zFR+QQY=
321+
k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM=
322+
k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk=
323+
k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI=
324+
k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc=
325+
k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4=
326+
k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
327+
k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY=
328+
k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8=
329329
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
330330
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
331331
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA=
332332
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts=
333333
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
334334
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
335-
sigs.k8s.io/controller-runtime v0.22.0 h1:mTOfibb8Hxwpx3xEkR56i7xSjB+nH4hZG37SrlCY5e0=
336-
sigs.k8s.io/controller-runtime v0.22.0/go.mod h1:FwiwRjkRPbiN+zp2QRp7wlTCzbUXxZ/D4OzuQUDwBHY=
335+
sigs.k8s.io/controller-runtime v0.22.1 h1:Ah1T7I+0A7ize291nJZdS1CabF/lB4E++WizgV24Eqg=
336+
sigs.k8s.io/controller-runtime v0.22.1/go.mod h1:FwiwRjkRPbiN+zp2QRp7wlTCzbUXxZ/D4OzuQUDwBHY=
337337
sigs.k8s.io/gateway-api v1.3.0 h1:q6okN+/UKDATola4JY7zXzx40WO4VISk7i9DIfOvr9M=
338338
sigs.k8s.io/gateway-api v1.3.0/go.mod h1:d8NV8nJbaRbEKem+5IuxkL8gJGOZ+FJ+NvOIltV8gDk=
339339
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=

internal/controller/nginx/modules/package-lock.json

Lines changed: 17 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ stop-longevity-test: nfr-test ## Stop the longevity test and collects results
122122
.PHONY: .vm-nfr-test
123123
.vm-nfr-test: ## Runs the NFR tests on the GCP VM (called by `nfr-test`)
124124
CGO_ENABLED=1 go run github.com/onsi/ginkgo/v2/ginkgo --race --randomize-all --randomize-suites --keep-going --fail-on-pending \
125-
--trace -r -v --buildvcs --force-newlines $(GITHUB_OUTPUT) --flake-attempts=2 \
125+
--trace -r -v --buildvcs --force-newlines $(GITHUB_OUTPUT) --flake-attempts=1 --show-node-events --output-interceptor-mode=none \
126126
--label-filter "nfr" $(GINKGO_FLAGS) --timeout 5h ./suite -- --gateway-api-version=$(GW_API_VERSION) \
127127
--gateway-api-prev-version=$(GW_API_PREV_VERSION) --image-tag=$(TAG) --version-under-test=$(NGF_VERSION) \
128128
--ngf-image-repo=$(PREFIX) --nginx-image-repo=$(NGINX_PREFIX) --nginx-plus-image-repo=$(NGINX_PLUS_PREFIX) \
@@ -176,7 +176,7 @@ HELM_PARAMETERS += --set nginxGateway.name=nginx-gateway --set nginx.service.typ
176176
# it overrides the target in the main Makefile when the GW_API_VERSION is set to main
177177
ifeq ($(GW_API_VERSION),main)
178178
install-gateway-crds:
179-
kubectl kustomize "https://github.com/kubernetes-sigs/gateway-api/config/crd/$(if $(filter true,$(ENABLE_EXPERIMENTAL)),experimental,)?timeout=120&ref=main" | kubectl apply -f -
179+
kubectl kustomize "https://github.com/kubernetes-sigs/gateway-api/config/crd/$(if $(filter true,$(ENABLE_EXPERIMENTAL)),experimental,)?timeout=120&ref=main" | kubectl apply --server-side -f -
180180
endif
181181

182182
.PHONY: install-ngf-local-no-build

tests/framework/collector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const (
1313
collectorChartReleaseName = "otel-collector"
1414
//nolint:lll
1515
// renovate: datasource=helm depName=opentelemetry-collector registryUrl=https://open-telemetry.github.io/opentelemetry-helm-charts
16-
collectorChartVersion = "0.132.0"
16+
collectorChartVersion = "0.133.0"
1717
)
1818

1919
// InstallCollector installs the otel-collector.

tests/framework/generate_manifests.go

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"io"
88
"text/template"
99

10+
. "github.com/onsi/ginkgo/v2"
1011
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1112
"k8s.io/apimachinery/pkg/util/yaml"
1213
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -120,9 +121,14 @@ type route struct {
120121

121122
// ScaleObjects contains objects for scale testing.
122123
type ScaleObjects struct {
123-
// BaseObjects contains objects that are common to all scale iterations.
124+
// BaseObjects contains objects that should be created first:
125+
// secrets and other foundational resources.
124126
BaseObjects []client.Object
125-
// ScaleIterationGroups contains objects for each scale iteration.
127+
// GatewayAndServiceObjects contains backend services, deployments, and Gateway objects.
128+
// These are created after BaseObjects to ensure endpoints are ready before traffic.
129+
GatewayAndServiceObjects []client.Object
130+
// ScaleIterationGroups contains HTTPRoute objects for each scale iteration.
131+
// These are applied after GatewayAndServiceObjects to start traffic flow incrementally.
126132
ScaleIterationGroups [][]client.Object
127133
}
128134

@@ -150,12 +156,15 @@ func decodeObjects(reader io.Reader) ([]client.Object, error) {
150156
}
151157

152158
// GenerateScaleListenerObjects generates objects for a given number of listeners for the scale test.
159+
// Secrets are created first in BaseObjects, then backend services/deployments and Gateway in GatewayAndServiceObjects,
160+
// and finally HTTPRoutes in ScaleIterationGroups.
153161
func GenerateScaleListenerObjects(numListeners int, tls bool) (ScaleObjects, error) {
154162
var result ScaleObjects
155163

156164
listeners := make([]listener, 0)
157165
backends := make([]string, 0)
158166
secrets := make([]string, 0)
167+
routes := make([]route, 0)
159168

160169
for i := range numListeners {
161170
listenerName := fmt.Sprintf("listener-%d", i)
@@ -180,35 +189,40 @@ func GenerateScaleListenerObjects(numListeners int, tls bool) (ScaleObjects, err
180189
HostnamePrefix: hostnamePrefix,
181190
BackendName: backendName,
182191
}
192+
routes = append(routes, r)
183193

184194
backends = append(backends, backendName)
185-
186-
objects, err := generateManifests(listeners, []route{r})
187-
if err != nil {
188-
return ScaleObjects{}, err
189-
}
190-
191-
result.ScaleIterationGroups = append(result.ScaleIterationGroups, objects)
192195
}
193196

194197
secretObjects, err := generateSecrets(secrets)
195198
if err != nil {
196199
return ScaleObjects{}, err
197200
}
198-
199201
result.BaseObjects = append(result.BaseObjects, secretObjects...)
200202

201203
backendObjects, err := generateBackendAppObjects(backends)
202204
if err != nil {
203205
return ScaleObjects{}, err
204206
}
207+
result.GatewayAndServiceObjects = append(result.GatewayAndServiceObjects, backendObjects...)
205208

206-
result.BaseObjects = append(result.BaseObjects, backendObjects...)
209+
gatewayObjects, err := generateManifests(listeners, nil)
210+
if err != nil {
211+
return ScaleObjects{}, err
212+
}
213+
result.GatewayAndServiceObjects = append(result.GatewayAndServiceObjects, gatewayObjects...)
214+
215+
routeObjects, err := generateManifests(nil, routes)
216+
if err != nil {
217+
return ScaleObjects{}, err
218+
}
219+
result.ScaleIterationGroups = append(result.ScaleIterationGroups, routeObjects)
207220

208221
return result, nil
209222
}
210223

211224
func generateSecrets(secrets []string) ([]client.Object, error) {
225+
GinkgoWriter.Printf("Generating secrets\n")
212226
objects := make([]client.Object, 0, len(secrets))
213227

214228
for _, secret := range secrets {
@@ -225,6 +239,7 @@ func generateSecrets(secrets []string) ([]client.Object, error) {
225239

226240
objects = append(objects, objs...)
227241
}
242+
GinkgoWriter.Printf("Generated %d secrets\n", len(objects))
228243

229244
return objects, nil
230245
}
@@ -240,6 +255,21 @@ func GenerateScaleHTTPRouteObjects(numRoutes int) (ScaleObjects, error) {
240255

241256
backendName := "backend"
242257

258+
// Generate backend objects and add to GatewayAndServiceObjects
259+
backendObjects, err := generateBackendAppObjects([]string{backendName})
260+
if err != nil {
261+
return ScaleObjects{}, err
262+
}
263+
result.GatewayAndServiceObjects = append(result.GatewayAndServiceObjects, backendObjects...)
264+
265+
// Generate Gateway object and add to GatewayAndServiceObjects
266+
gatewayObjects, err := generateManifests([]listener{l}, nil)
267+
if err != nil {
268+
return ScaleObjects{}, err
269+
}
270+
result.GatewayAndServiceObjects = append(result.GatewayAndServiceObjects, gatewayObjects...)
271+
272+
// Generate HTTPRoute objects for each iteration
243273
for i := range numRoutes {
244274
r := route{
245275
Name: fmt.Sprintf("route-%d", i),
@@ -248,27 +278,15 @@ func GenerateScaleHTTPRouteObjects(numRoutes int) (ScaleObjects, error) {
248278
BackendName: backendName,
249279
}
250280

251-
var listeners []listener
252-
if i == 0 {
253-
// only generate a Gateway on the first iteration
254-
listeners = []listener{l}
255-
}
256-
257-
objects, err := generateManifests(listeners, []route{r})
281+
// Generate only the HTTPRoute (no listeners/gateway)
282+
routeObjects, err := generateManifests(nil, []route{r})
258283
if err != nil {
259284
return ScaleObjects{}, err
260285
}
261286

262-
result.ScaleIterationGroups = append(result.ScaleIterationGroups, objects)
287+
result.ScaleIterationGroups = append(result.ScaleIterationGroups, routeObjects)
263288
}
264289

265-
backendObjects, err := generateBackendAppObjects([]string{backendName})
266-
if err != nil {
267-
return ScaleObjects{}, err
268-
}
269-
270-
result.BaseObjects = backendObjects
271-
272290
return result, nil
273291
}
274292

tests/framework/logging.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package framework
2+
3+
type Option func(*Options)
4+
5+
type Options struct {
6+
logEnabled bool
7+
}
8+
9+
func WithLoggingDisabled() Option {
10+
return func(opts *Options) {
11+
opts.logEnabled = false
12+
}
13+
}

0 commit comments

Comments
 (0)