Skip to content

Commit ba60c5d

Browse files
authored
Merge branch 'nginxinc:main' into test/add-runtime-manager-tests
2 parents 3a8c115 + 6becde2 commit ba60c5d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+4464
-313
lines changed

.github/PULL_REQUEST_TEMPLATE.md

+11
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,14 @@ Before creating a PR, run through this checklist and mark each as complete.
2525
- [ ] I have updated necessary documentation
2626
- [ ] I have rebased my branch onto main
2727
- [ ] I will ensure my PR is targeting the main branch and pulling from my branch from my own fork
28+
29+
### Release notes
30+
31+
If this PR introduces a change that affects users and needs to be mentioned in the [release notes](../CHANGELOG.md),
32+
please add a brief note that summarizes the change.
33+
34+
<!-- If this PR does not require a release note, you can just write NONE in the release-note block below. -->
35+
36+
```release-note
37+
38+
```

.github/workflows/build.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,14 @@ jobs:
148148
sbom: "sbom-${{ inputs.image }}.json"
149149
only-fixed: true
150150
add-cpes-if-none: true
151+
fail-build: false
151152

152153
- name: Upload scan result to GitHub Security tab
153-
uses: github/codeql-action/upload-sarif@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
154+
uses: github/codeql-action/upload-sarif@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3
154155
continue-on-error: true
155156
with:
156157
sarif_file: ${{ steps.scan.outputs.sarif }}
158+
category: build-${{ inputs.image }}
157159
if: always()
158160

159161
- name: Upload Scan Results

.github/workflows/codeql-analysis.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444

4545
# Initializes the CodeQL tools for scanning.
4646
- name: Initialize CodeQL
47-
uses: github/codeql-action/init@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
47+
uses: github/codeql-action/init@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3
4848
with:
4949
languages: ${{ matrix.language }}
5050
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -63,7 +63,7 @@ jobs:
6363
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
6464
# If this step fails, then you should remove it and run the build manually (see below)
6565
- name: Autobuild
66-
uses: github/codeql-action/autobuild@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
66+
uses: github/codeql-action/autobuild@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3
6767

6868
# ℹ️ Command-line programs to run using the OS shell.
6969
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -76,6 +76,6 @@ jobs:
7676
# ./location_of_script_within_repo/buildscript.sh
7777

7878
- name: Perform CodeQL Analysis
79-
uses: github/codeql-action/analyze@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
79+
uses: github/codeql-action/analyze@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3
8080
with:
8181
category: "/language:${{matrix.language}}"

.github/workflows/conformance.yml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ jobs:
3030
matrix:
3131
k8s-version: ["1.23.17", "latest"]
3232
nginx-image: [nginx, nginx-plus]
33+
enable-experimental: [true, false]
3334
permissions:
3435
contents: write # needed for uploading release artifacts
3536
steps:
@@ -148,6 +149,7 @@ jobs:
148149
ngf_tag=${{ steps.ngf-meta.outputs.version }}
149150
if [ ${{ github.event_name }} == "schedule" ]; then export GW_API_VERSION=main; fi
150151
if [ ${{ startsWith(matrix.k8s-version, '1.23') || startsWith(matrix.k8s-version, '1.24') }} == "true" ]; then export INSTALL_WEBHOOK=true; fi
152+
if [ ${{ matrix.enable-experimental }} == "true" ]; then export ENABLE_EXPERIMENTAL=true; fi
151153
make install-ngf-local-no-build${{ matrix.nginx-image == 'nginx-plus' && '-with-plus' || ''}} PREFIX=${ngf_prefix} TAG=${ngf_tag}
152154
working-directory: ./conformance
153155

.github/workflows/dependency-review.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ jobs:
1515
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
1616

1717
- name: "Dependency Review"
18-
uses: actions/dependency-review-action@4901385134134e04cec5fbe5ddfe3b2c5bd5d976 # v4.0.0
18+
uses: actions/dependency-review-action@80f10bf419f34980065523f5efca7ebed17576aa # v4.1.0
1919
with:
2020
config-file: "nginxinc/k8s-common/dependency-review-config.yml@main"

.github/workflows/scorecards.yml

+1-1
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@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
63+
uses: github/codeql-action/upload-sarif@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3
6464
with:
6565
sarif_file: results.sarif

.gitleaksignore

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
68d1f6eb80d23c8650c11629459dd6a06c986ca1:internal/state/graph/graph_test.go:private-key:44
44
890fddb787ff3560b9b743647a36b649d498ae51:internal/state/graph/secret_test.go:private-key:35
55
890fddb787ff3560b9b743647a36b649d498ae51:internal/state/change_processor_test.go:private-key:211
6+
internal/mode/static/state/graph/config_maps_test.go:private-key:35

Makefile

+4-5
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,17 @@ generate-crds: ## Generate CRDs and Go types using kubebuilder
8181
go run sigs.k8s.io/controller-tools/cmd/controller-gen object paths=./apis/...
8282

8383
.PHONY: generate-manifests
84-
generate-manifests: generate-manifests-plus ## Generate manifests using Helm.
84+
generate-manifests: ## Generate manifests using Helm.
8585
cp $(CHART_DIR)/crds/* $(MANIFEST_DIR)/crds/
8686
helm template nginx-gateway $(CHART_DIR) $(HELM_TEMPLATE_COMMON_ARGS) $(HELM_TEMPLATE_EXTRA_ARGS_FOR_ALL_MANIFESTS_FILE) -n nginx-gateway | cat $(strip $(MANIFEST_DIR))/namespace.yaml - > $(strip $(MANIFEST_DIR))/nginx-gateway.yaml
87+
helm template nginx-gateway $(CHART_DIR) $(HELM_TEMPLATE_COMMON_ARGS) $(HELM_TEMPLATE_EXTRA_ARGS_FOR_ALL_MANIFESTS_FILE) --set nginx.plus=true --set nginx.image.repository=$(NGINX_PLUS_PREFIX) -n nginx-gateway | cat $(strip $(MANIFEST_DIR))/namespace.yaml - > $(strip $(MANIFEST_DIR))/nginx-plus-gateway.yaml
88+
helm template nginx-gateway $(CHART_DIR) $(HELM_TEMPLATE_COMMON_ARGS) $(HELM_TEMPLATE_EXTRA_ARGS_FOR_ALL_MANIFESTS_FILE) --set nginxGateway.gwAPIExperimentalFeatures.enable=true -n nginx-gateway | cat $(strip $(MANIFEST_DIR))/namespace.yaml - > $(strip $(MANIFEST_DIR))/nginx-gateway-experimental.yaml
89+
helm template nginx-gateway $(CHART_DIR) $(HELM_TEMPLATE_COMMON_ARGS) $(HELM_TEMPLATE_EXTRA_ARGS_FOR_ALL_MANIFESTS_FILE) --set nginxGateway.gwAPIExperimentalFeatures.enable=true --set nginx.plus=true --set nginx.image.repository=$(NGINX_PLUS_PREFIX) -n nginx-gateway | cat $(strip $(MANIFEST_DIR))/namespace.yaml - > $(strip $(MANIFEST_DIR))/nginx-plus-gateway-experimental.yaml
8790
helm template nginx-gateway $(CHART_DIR) $(HELM_TEMPLATE_COMMON_ARGS) --set metrics.enable=false -n nginx-gateway -s templates/deployment.yaml > conformance/provisioner/static-deployment.yaml
8891
helm template nginx-gateway $(CHART_DIR) $(HELM_TEMPLATE_COMMON_ARGS) -n nginx-gateway -s templates/service.yaml > $(strip $(MANIFEST_DIR))/service/loadbalancer.yaml
8992
helm template nginx-gateway $(CHART_DIR) $(HELM_TEMPLATE_COMMON_ARGS) --set service.annotations.'service\.beta\.kubernetes\.io\/aws-load-balancer-type'="nlb" -n nginx-gateway -s templates/service.yaml > $(strip $(MANIFEST_DIR))/service/loadbalancer-aws-nlb.yaml
9093
helm template nginx-gateway $(CHART_DIR) $(HELM_TEMPLATE_COMMON_ARGS) --set service.type=NodePort --set service.externalTrafficPolicy="" -n nginx-gateway -s templates/service.yaml > $(strip $(MANIFEST_DIR))/service/nodeport.yaml
9194

92-
.PHONY: generate-manifests-plus
93-
generate-manifests-plus: ## Generate manifests using Helm for NGINX Plus.
94-
helm template nginx-gateway $(CHART_DIR) $(HELM_TEMPLATE_COMMON_ARGS) $(HELM_TEMPLATE_EXTRA_ARGS_FOR_ALL_MANIFESTS_FILE) --set nginx.plus=true --set nginx.image.repository=$(NGINX_PLUS_PREFIX) -n nginx-gateway | cat $(strip $(MANIFEST_DIR))/namespace.yaml - > $(strip $(MANIFEST_DIR))/nginx-plus-gateway.yaml
95-
9695
.PHONY: crds-release-file
9796
crds-release-file: ## Generate combined crds file for releases
9897
scripts/combine-crds.sh

README.md

+18-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/nginxinc/nginx-gateway-fabric/badge)](https://api.securityscorecards.dev/projects/github.com/nginxinc/nginx-gateway-fabric)
22
[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B5618%2Fgithub.com%2Fnginxinc%2Fnginx-gateway-fabric.svg?type=shield)](https://app.fossa.com/projects/custom%2B5618%2Fgithub.com%2Fnginxinc%2Fnginx-gateway-fabric?ref=badge_shield)
3+
[![Continuous Integration](https://github.com/nginxinc/nginx-gateway-fabric/actions/workflows/ci.yml/badge.svg)](https://github.com/nginxinc/nginx-gateway-fabric/actions/workflows/ci.yml)
4+
[![Conformance Testing](https://github.com/nginxinc/nginx-gateway-fabric/actions/workflows/conformance.yml/badge.svg)](https://github.com/nginxinc/nginx-gateway-fabric/actions/workflows/conformance.yml)
5+
[![Go Report Card](https://goreportcard.com/badge/github.com/nginxinc/nginx-gateway-fabric)](https://goreportcard.com/report/github.com/nginxinc/nginx-gateway-fabric)
6+
[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/nginxinc/nginx-gateway-fabric?logo=github&sort=semver)](https://github.com/nginxinc/nginx-gateway-fabric/releases/latest)
7+
[![Slack](https://img.shields.io/badge/slack-%23nginx--gateway--fabric-green?logo=slack)](https://nginxcommunity.slack.com/channels/nginx-gateway-fabric)
8+
[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
39

410
# NGINX Gateway Fabric
511

@@ -18,11 +24,8 @@ Learn about our [design principles](/docs/developer/design-principles.md) and [a
1824

1925
1. [Quick Start on a kind cluster](https://docs.nginx.com/nginx-gateway-fabric/installation/running-on-kind/).
2026
2. [Install](https://docs.nginx.com/nginx-gateway-fabric/installation/) NGINX Gateway Fabric.
21-
3. [Build](https://docs.nginx.com/nginx-gateway-fabric/installation/ngf-images/building-the-images/) an NGINX Gateway Fabric container image from source or use a pre-built image
22-
available
23-
on [GitHub Container Registry](https://github.com/nginxinc/nginx-gateway-fabric/pkgs/container/nginx-gateway-fabric).
24-
4. Deploy various [examples](examples).
25-
5. Read our [How-to guides](https://docs.nginx.com/nginx-gateway-fabric/how-to/).
27+
3. Deploy various [examples](examples).
28+
4. Read our [How-to guides](https://docs.nginx.com/nginx-gateway-fabric/how-to/).
2629

2730
You can find the comprehensive NGINX Gateway Fabric user documentation on the [NGINX Documentation](https://docs.nginx.com/nginx-gateway-fabric/) website.
2831

@@ -34,14 +37,14 @@ our [releases page](https://github.com/nginxinc/nginx-gateway-fabric/releases).
3437
The latest release is [1.1.0](https://github.com/nginxinc/nginx-gateway-fabric/releases/tag/v1.1.0).
3538

3639
The edge version is useful for experimenting with new features that are not yet published in a release. To use, choose
37-
the *edge* version built from the [latest commit](https://github.com/nginxinc/nginx-gateway-fabric/commits/main)
40+
the _edge_ version built from the [latest commit](https://github.com/nginxinc/nginx-gateway-fabric/commits/main)
3841
from the main branch.
3942

4043
The table below summarizes the options regarding the images, manifests, documentation and examples and gives your links
4144
to the correct versions:
4245

4346
| Version | Description | Installation Manifests | Documentation and Examples |
44-
|----------------|------------------------------------------|-----------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
47+
| -------------- | ---------------------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
4548
| Latest release | For production use | [Manifests](https://github.com/nginxinc/nginx-gateway-fabric/tree/v1.1.0/deploy). | [Documentation](https://docs.nginx.com/nginx-gateway-fabric). [Examples](https://github.com/nginxinc/nginx-gateway-fabric/tree/v1.1.0/examples). |
4649
| Edge | For experimental use and latest features | [Manifests](https://github.com/nginxinc/nginx-gateway-fabric/tree/main/deploy). | [Documentation](https://github.com/nginxinc/nginx-gateway-fabric/tree/main/site/content). [Examples](https://github.com/nginxinc/nginx-gateway-fabric/tree/main/examples). |
4750

@@ -57,21 +60,20 @@ The features that will go into the next release are reflected in the
5760
corresponding [milestone](https://github.com/nginxinc/nginx-gateway-fabric/milestones). Refer to
5861
the [Issue Lifecycle](ISSUE_LIFECYCLE.md) document for information on issue creation and assignment to releases.
5962

60-
6163
## Technical Specifications
6264

6365
The following table lists the software versions NGINX Gateway Fabric supports.
6466

6567
| NGINX Gateway Fabric | Gateway API | Kubernetes | NGINX OSS | NGINX Plus |
66-
|----------------------|-------------|------------|-----------|------------|
67-
| Edge | 1.0.0 | 1.23+ | 1.25.3 | R31 |
68+
| -------------------- | ----------- | ---------- | --------- | ---------- |
69+
| Edge | 1.0.0 | 1.23+ | 1.25.4 | R31 |
6870
| 1.1.0 | 1.0.0 | 1.23+ | 1.25.3 | n/a |
6971
| 1.0.0 | 0.8.1 | 1.23+ | 1.25.2 | n/a |
7072
| 0.6.0 | 0.8.0 | 1.23+ | 1.25.2 | n/a |
71-
| 0.5.0 | 0.7.1 | 1.21+ | 1.25.x * | n/a |
72-
| 0.4.0 | 0.7.1 | 1.21+ | 1.25.x * | n/a |
73-
| 0.3.0 | 0.6.2 | 1.21+ | 1.23.x * | n/a |
74-
| 0.2.0 | 0.5.1 | 1.21+ | 1.21.x * | n/a |
73+
| 0.5.0 | 0.7.1 | 1.21+ | 1.25.x \* | n/a |
74+
| 0.4.0 | 0.7.1 | 1.21+ | 1.25.x \* | n/a |
75+
| 0.3.0 | 0.6.2 | 1.21+ | 1.23.x \* | n/a |
76+
| 0.2.0 | 0.5.1 | 1.21+ | 1.21.x \* | n/a |
7577
| 0.1.0 | 0.5.0 | 1.19+ | 1.21.3 | n/a |
7678

7779
\*the installation manifests use the minor version of NGINX container image (e.g. 1.25) and the patch version is not
@@ -112,10 +114,8 @@ contact us directly via [email protected] or on the [NGINX Community Slack][s
112114
the `#nginx-gateway-fabric`
113115
channel.
114116

115-
[bug]:https://github.com/nginxinc/nginx-gateway-fabric/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=
116-
117-
[idea]:https://github.com/nginxinc/nginx-gateway-fabric/discussions/categories/ideas
118-
117+
[bug]: https://github.com/nginxinc/nginx-gateway-fabric/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=
118+
[idea]: https://github.com/nginxinc/nginx-gateway-fabric/discussions/categories/ideas
119119
[slack]: https://nginxcommunity.slack.com/channels/nginx-gateway-fabric
120120

121121
## Community Meetings

build/Dockerfile.nginx

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# syntax=docker/dockerfile:1.6
2-
FROM nginx:1.25.3-alpine
2+
FROM nginx:1.25.4-alpine
33

44
ARG NJS_DIR
55
ARG NGINX_CONF_DIR
@@ -9,8 +9,6 @@ RUN apk add --no-cache libcap \
99
&& mkdir -p /var/lib/nginx /usr/lib/nginx/modules \
1010
&& setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx \
1111
&& setcap -v 'cap_net_bind_service=+ep' /usr/sbin/nginx \
12-
# Update packages for CVE-2023-52425
13-
&& apk --no-cache upgrade libexpat \
1412
&& apk del libcap
1513

1614
COPY ${NJS_DIR}/httpmatches.js /usr/lib/nginx/modules/njs/httpmatches.js

cmd/gateway/commands.go

+12
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ func createStaticModeCommand() *cobra.Command {
5656
leaderElectionDisableFlag = "leader-election-disable"
5757
leaderElectionLockNameFlag = "leader-election-lock-name"
5858
plusFlag = "nginx-plus"
59+
gwAPIExperimentalFlag = "gateway-api-experimental-features"
5960
)
6061

6162
// flag values
@@ -95,6 +96,8 @@ func createStaticModeCommand() *cobra.Command {
9596
}
9697

9798
plus bool
99+
100+
gwExperimentalFeatures bool
98101
)
99102

100103
cmd := &cobra.Command{
@@ -172,6 +175,7 @@ func createStaticModeCommand() *cobra.Command {
172175
Plus: plus,
173176
TelemetryReportPeriod: period,
174177
Version: version,
178+
ExperimentalFeatures: gwExperimentalFeatures,
175179
}
176180

177181
if err := static.StartManager(conf); err != nil {
@@ -285,6 +289,14 @@ func createStaticModeCommand() *cobra.Command {
285289
"Use NGINX Plus",
286290
)
287291

292+
cmd.Flags().BoolVar(
293+
&gwExperimentalFeatures,
294+
gwAPIExperimentalFlag,
295+
false,
296+
"Enable the experimental features of Gateway API which are supported by NGINX Gateway Fabric. "+
297+
"Requires the Gateway APIs installed from the experimental channel.",
298+
)
299+
288300
return cmd
289301
}
290302

conformance/Makefile

+4-3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ CRDS=../deploy/manifests/crds/
1515
STATIC_MANIFEST=provisioner/static-deployment.yaml
1616
PROVISIONER_MANIFEST=provisioner/provisioner.yaml
1717
INSTALL_WEBHOOK ?= false
18+
ENABLE_EXPERIMENTAL ?= false
1819
.DEFAULT_GOAL := help
1920

2021
.PHONY: help
@@ -37,7 +38,7 @@ create-kind-cluster: ## Create a kind cluster
3738

3839
.PHONY: update-ngf-manifest
3940
update-ngf-manifest: ## Update the NGF deployment manifest image names and imagePullPolicies
40-
cd .. && make generate-manifests HELM_TEMPLATE_EXTRA_ARGS_FOR_ALL_MANIFESTS_FILE="--set nginxGateway.kind=skip" HELM_TEMPLATE_COMMON_ARGS="--set nginxGateway.image.repository=$(PREFIX) --set nginxGateway.image.tag=$(TAG) --set nginxGateway.image.pullPolicy=Never --set nginx.image.repository=$(NGINX_PREFIX) --set nginx.image.tag=$(TAG) --set nginx.image.pullPolicy=Never" && cd -
41+
cd .. && make generate-manifests HELM_TEMPLATE_EXTRA_ARGS_FOR_ALL_MANIFESTS_FILE="--set nginxGateway.kind=skip" HELM_TEMPLATE_COMMON_ARGS="--set nginxGateway.image.repository=$(PREFIX) --set nginxGateway.image.tag=$(TAG) --set nginxGateway.image.pullPolicy=Never --set nginx.image.repository=$(NGINX_PREFIX) --set nginx.image.tag=$(TAG) --set nginx.image.pullPolicy=Never --set nginxGateway.experimentalFeatures.enable=$(ENABLE_EXPERIMENTAL)" && cd -
4142

4243
.PHONY: update-ngf-manifest-with-plus
4344
update-ngf-manifest-with-plus: ## Update the NGF deployment manifest image names and imagePullPolicies including nginx-plus
@@ -61,7 +62,7 @@ load-images-with-plus: ## Load NGF and NGINX Plus images on configured kind clus
6162

6263
.PHONY: prepare-ngf-dependencies
6364
prepare-ngf-dependencies: update-ngf-manifest ## Install NGF dependencies on configured kind cluster
64-
./scripts/install-gateway.sh $(GW_API_VERSION) $(INSTALL_WEBHOOK)
65+
./scripts/install-gateway.sh $(GW_API_VERSION) $(INSTALL_WEBHOOK) $(ENABLE_EXPERIMENTAL)
6566
kubectl apply -f $(CRDS)
6667
kubectl apply -f $(NGF_MANIFEST)
6768

@@ -118,7 +119,7 @@ uninstall-ngf: uninstall-k8s-components undo-manifests-update ## Uninstall NGF o
118119
.PHONY: uninstall-k8s-components
119120
uninstall-k8s-components: ## Uninstall installed components on configured kind cluster
120121
-kubectl delete -f $(NGF_MANIFEST)
121-
./scripts/uninstall-gateway.sh $(GW_API_VERSION) $(INSTALL_WEBHOOK)
122+
./scripts/uninstall-gateway.sh $(GW_API_VERSION) $(INSTALL_WEBHOOK) $(ENABLE_EXPERIMENTAL)
122123
kubectl delete clusterrole nginx-gateway-provisioner
123124
kubectl delete clusterrolebinding nginx-gateway-provisioner
124125

0 commit comments

Comments
 (0)