Skip to content

Commit fe74b4a

Browse files
DaniD3vmikkeldamsgaard
authored andcommitted
feat(netbird): allow specifying stunService.nodePort
1 parent f986e24 commit fe74b4a

5 files changed

Lines changed: 51 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
77

88
## Unreleased
99

10+
### Added
11+
12+
- **netbird**: Add `server.stunService.nodePort` value to allow specifying a
13+
fixed NodePort number when `server.stunService.type` is `NodePort`.
14+
1015
## [0.4.2] — 2026-04-21
1116

1217
### Added

charts/netbird/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,16 @@ server:
369369
port: 3478
370370
```
371371

372+
To pin a specific NodePort instead of letting Kubernetes assign one automatically:
373+
374+
```yaml
375+
server:
376+
stunService:
377+
type: NodePort
378+
port: 3478
379+
nodePort: 30478
380+
```
381+
372382
Point DNS at one or more node IPs. Clients will connect on the allocated
373383
NodePort (check `kubectl get svc` for the assigned port).
374384

@@ -737,6 +747,7 @@ ADFS) can be tested manually:
737747
| `server.service.port` | int | `80` | Server service port |
738748
| `server.stunService.type` | string | `"LoadBalancer"` | STUN service type |
739749
| `server.stunService.port` | int | `3478` | STUN service port |
750+
| `server.stunService.nodePort` | int | `null` | Fixed NodePort number |
740751
| `server.stunService.annotations` | object | `{}` | STUN service annotations |
741752

742753
#### Server Ingress

charts/netbird/templates/server-stun-service.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ spec:
1616
port: {{ .Values.server.stunService.port }}
1717
targetPort: stun
1818
protocol: UDP
19+
{{- if and (eq .Values.server.stunService.type "NodePort") (not (kindIs "invalid" .Values.server.stunService.nodePort)) }}
20+
nodePort: {{ .Values.server.stunService.nodePort }}
21+
{{- end }}
1922
selector:
2023
{{- include "netbird.server.selectorLabels" . | nindent 4 }}
2124

charts/netbird/tests/server-stun-service_test.yaml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,35 @@ tests:
4343
path: spec.type
4444
value: NodePort
4545

46+
- it: should set nodePort when type is NodePort and nodePort is specified
47+
set:
48+
server.stunService.type: NodePort
49+
server.stunService.nodePort: 30478
50+
asserts:
51+
- contains:
52+
path: spec.ports
53+
content:
54+
name: stun
55+
port: 3478
56+
targetPort: stun
57+
protocol: UDP
58+
nodePort: 30478
59+
60+
- it: should not set nodePort for LoadBalancer type even if nodePort is specified
61+
set:
62+
server.stunService.type: LoadBalancer
63+
server.stunService.nodePort: 30478
64+
asserts:
65+
- isNull:
66+
path: spec.ports[0].nodePort
67+
68+
- it: should not set nodePort for NodePort type when nodePort is not specified
69+
set:
70+
server.stunService.type: NodePort
71+
asserts:
72+
- isNull:
73+
path: spec.ports[0].nodePort
74+
4675
- it: should include selector labels
4776
asserts:
4877
- isSubset:

charts/netbird/values.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,9 @@ server:
421421
stunService:
422422
type: LoadBalancer
423423
port: 3478
424+
# -- Optional nodePort for NodePort service type (valid range: 30000–32767).
425+
# Omit or set to null to let Kubernetes allocate automatically.
426+
nodePort: null
424427
annotations: {}
425428

426429
# -- Ingress for HTTP routes (API + OAuth2).

0 commit comments

Comments
 (0)