Skip to content

Commit 5ef4cd3

Browse files
committed
add support for ipv6
1 parent 7bc0b6e commit 5ef4cd3

File tree

17 files changed

+379
-54
lines changed

17 files changed

+379
-54
lines changed

apis/v1alpha1/nginxproxy_types.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1010

1111
// NginxProxy is a configuration object that is attached to a GatewayClass parametersRef. It provides a way
1212
// to configure global settings for all Gateways defined from the GatewayClass.
13-
type NginxProxy struct { //nolint:govet // standard field alignment, don't change it
13+
type NginxProxy struct {
1414
metav1.TypeMeta `json:",inline"`
1515
metav1.ObjectMeta `json:"metadata,omitempty"`
1616

@@ -27,12 +27,31 @@ type NginxProxyList struct {
2727
Items []NginxProxy `json:"items"`
2828
}
2929

30+
// IPFamilyType specifies the IP family to be used by the server.
31+
//
32+
// +kubebuilder:validation:Enum=both;ipv4;ipv6
33+
type IPFamilyType string
34+
35+
const (
36+
// Dual specifies that the server will use both IPv4 and IPv6.
37+
Dual IPFamilyType = "dual"
38+
// IPv4 specifies that the server will use only IPv4.
39+
IPv4 IPFamilyType = "ipv4"
40+
// IPv6 specifies that the server will use only IPv6.
41+
IPv6 IPFamilyType = "ipv6"
42+
)
43+
3044
// NginxProxySpec defines the desired state of the NginxProxy.
3145
type NginxProxySpec struct {
3246
// Telemetry specifies the OpenTelemetry configuration.
3347
//
3448
// +optional
3549
Telemetry *Telemetry `json:"telemetry,omitempty"`
50+
// IPFamily specifies the IP family to be used by the server.
51+
// Default is "dual", meaning the server will use both IPv4 and IPv6.
52+
//
53+
// +optional
54+
IPFamily IPFamilyType `json:"ipFamily,omitempty"`
3655
// DisableHTTP2 defines if http2 should be disabled for all servers.
3756
// Default is false, meaning http2 will be enabled for all servers.
3857
//

charts/nginx-gateway-fabric/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ The following table lists the configurable parameters of the NGINX Gateway Fabri
260260
| `metrics.enable` | Enable exposing metrics in the Prometheus format. | bool | `true` |
261261
| `metrics.port` | Set the port where the Prometheus metrics are exposed. Format: [1024 - 65535] | int | `9113` |
262262
| `metrics.secure` | Enable serving metrics via https. By default metrics are served via http. Please note that this endpoint will be secured with a self-signed certificate. | bool | `false` |
263-
| `nginx.config` | The configuration for the data plane that is contained in the NginxProxy resource. | object | `{}` |
263+
| `nginx.config` | The configuration for the data plane that is contained in the NginxProxy resource. | object | `{"ipFamily":"dual"}` |
264264
| `nginx.extraVolumeMounts` | extraVolumeMounts are the additional volume mounts for the nginx container. | list | `[]` |
265265
| `nginx.image.pullPolicy` | | string | `"Always"` |
266266
| `nginx.image.repository` | The NGINX image to use. | string | `"ghcr.io/nginxinc/nginx-gateway-fabric/nginx"` |

charts/nginx-gateway-fabric/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ nginx:
8484

8585
# -- The configuration for the data plane that is contained in the NginxProxy resource.
8686
config:
87-
{}
8887
# disableHTTP2: false
88+
ipFamily: dual
8989
# telemetry:
9090
# exporter:
9191
# endpoint: otel-collector.default.svc:4317

config/crd/bases/gateway.nginx.org_nginxproxies.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ spec:
5252
DisableHTTP2 defines if http2 should be disabled for all servers.
5353
Default is false, meaning http2 will be enabled for all servers.
5454
type: boolean
55+
ipFamily:
56+
description: |-
57+
IPFamily specifies the IP family to be used by the server.
58+
Default is "dual", meaning the server will use both IPv4 and IPv6.
59+
enum:
60+
- both
61+
- ipv4
62+
- ipv6
63+
type: string
5564
telemetry:
5665
description: Telemetry specifies the OpenTelemetry configuration.
5766
properties:

deploy/crds.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,15 @@ spec:
697697
DisableHTTP2 defines if http2 should be disabled for all servers.
698698
Default is false, meaning http2 will be enabled for all servers.
699699
type: boolean
700+
ipFamily:
701+
description: |-
702+
IPFamily specifies the IP family to be used by the server.
703+
Default is "dual", meaning the server will use both IPv4 and IPv6.
704+
enum:
705+
- both
706+
- ipv4
707+
- ipv6
708+
type: string
700709
telemetry:
701710
description: Telemetry specifies the OpenTelemetry configuration.
702711
properties:

deploy/manifests/nginx-gateway-experimental.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,10 @@ metadata:
295295
app.kubernetes.io/version: "edge"
296296
spec:
297297
controllerName: gateway.nginx.org/nginx-gateway-controller
298+
parametersRef:
299+
group: gateway.nginx.org
300+
kind: NginxProxy
301+
name: nginx-gateway-proxy-config
298302
---
299303
# Source: nginx-gateway-fabric/templates/nginxgateway.yaml
300304
apiVersion: gateway.nginx.org/v1alpha1
@@ -309,3 +313,15 @@ metadata:
309313
spec:
310314
logging:
311315
level: info
316+
---
317+
# Source: nginx-gateway-fabric/templates/nginxproxy.yaml
318+
apiVersion: gateway.nginx.org/v1alpha1
319+
kind: NginxProxy
320+
metadata:
321+
name: nginx-gateway-proxy-config
322+
labels:
323+
app.kubernetes.io/name: nginx-gateway
324+
app.kubernetes.io/instance: nginx-gateway
325+
app.kubernetes.io/version: "edge"
326+
spec:
327+
ipFamily: dual

deploy/manifests/nginx-gateway.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,10 @@ metadata:
291291
app.kubernetes.io/version: "edge"
292292
spec:
293293
controllerName: gateway.nginx.org/nginx-gateway-controller
294+
parametersRef:
295+
group: gateway.nginx.org
296+
kind: NginxProxy
297+
name: nginx-gateway-proxy-config
294298
---
295299
# Source: nginx-gateway-fabric/templates/nginxgateway.yaml
296300
apiVersion: gateway.nginx.org/v1alpha1
@@ -305,3 +309,15 @@ metadata:
305309
spec:
306310
logging:
307311
level: info
312+
---
313+
# Source: nginx-gateway-fabric/templates/nginxproxy.yaml
314+
apiVersion: gateway.nginx.org/v1alpha1
315+
kind: NginxProxy
316+
metadata:
317+
name: nginx-gateway-proxy-config
318+
labels:
319+
app.kubernetes.io/name: nginx-gateway
320+
app.kubernetes.io/instance: nginx-gateway
321+
app.kubernetes.io/version: "edge"
322+
spec:
323+
ipFamily: dual

deploy/manifests/nginx-plus-gateway-experimental.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,10 @@ metadata:
302302
app.kubernetes.io/version: "edge"
303303
spec:
304304
controllerName: gateway.nginx.org/nginx-gateway-controller
305+
parametersRef:
306+
group: gateway.nginx.org
307+
kind: NginxProxy
308+
name: nginx-gateway-proxy-config
305309
---
306310
# Source: nginx-gateway-fabric/templates/nginxgateway.yaml
307311
apiVersion: gateway.nginx.org/v1alpha1
@@ -316,3 +320,15 @@ metadata:
316320
spec:
317321
logging:
318322
level: info
323+
---
324+
# Source: nginx-gateway-fabric/templates/nginxproxy.yaml
325+
apiVersion: gateway.nginx.org/v1alpha1
326+
kind: NginxProxy
327+
metadata:
328+
name: nginx-gateway-proxy-config
329+
labels:
330+
app.kubernetes.io/name: nginx-gateway
331+
app.kubernetes.io/instance: nginx-gateway
332+
app.kubernetes.io/version: "edge"
333+
spec:
334+
ipFamily: dual

deploy/manifests/nginx-plus-gateway.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,10 @@ metadata:
298298
app.kubernetes.io/version: "edge"
299299
spec:
300300
controllerName: gateway.nginx.org/nginx-gateway-controller
301+
parametersRef:
302+
group: gateway.nginx.org
303+
kind: NginxProxy
304+
name: nginx-gateway-proxy-config
301305
---
302306
# Source: nginx-gateway-fabric/templates/nginxgateway.yaml
303307
apiVersion: gateway.nginx.org/v1alpha1
@@ -312,3 +316,15 @@ metadata:
312316
spec:
313317
logging:
314318
level: info
319+
---
320+
# Source: nginx-gateway-fabric/templates/nginxproxy.yaml
321+
apiVersion: gateway.nginx.org/v1alpha1
322+
kind: NginxProxy
323+
metadata:
324+
name: nginx-gateway-proxy-config
325+
labels:
326+
app.kubernetes.io/name: nginx-gateway
327+
app.kubernetes.io/instance: nginx-gateway
328+
app.kubernetes.io/version: "edge"
329+
spec:
330+
ipFamily: dual

internal/mode/static/nginx/config/http/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ type Server struct {
1010
IsDefaultHTTP bool
1111
IsDefaultSSL bool
1212
GRPC bool
13+
IPv6Enabled bool
1314
}
1415

1516
// Location holds all configuration for an HTTP location.

0 commit comments

Comments
 (0)