Skip to content

Commit bf95f9f

Browse files
Merge pull request #5 from disentangle-network/feature/nebula-mesh
Add nebula-pq DaemonSet and ConfigMap templates
2 parents 0d04d5e + c20275d commit bf95f9f

File tree

10 files changed

+195
-56
lines changed

10 files changed

+195
-56
lines changed

.github/workflows/integration-test.yml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,18 @@ jobs:
2929
node_image: kindest/node:${{ matrix.k8s-version }}
3030
cluster_name: disentangle-test
3131

32-
- name: Build test image (or use existing)
32+
- name: Pull and load real image into kind
3333
run: |
34-
# For CI, we use a mock/stub image since we can't build the full Rust binary
35-
# In production CI, this would build from the protocol repo
36-
echo "Using chart default image (pull from registry)"
34+
# Read appVersion from Chart.yaml to stay in sync with the chart.
35+
# Pull the platform-specific image then re-tag to strip the multi-arch
36+
# manifest index, which kind's containerd import cannot handle.
37+
APP_VERSION=$(grep '^appVersion:' helm/disentangle/Chart.yaml | sed 's/appVersion: *"\(.*\)"/\1/')
38+
IMAGE="ghcr.io/disentangle-network/disentangle-node:${APP_VERSION}"
39+
echo "Pulling ${IMAGE} (linux/amd64)"
40+
docker pull --platform linux/amd64 "${IMAGE}"
41+
IMGID=$(docker images --no-trunc -q "${IMAGE}" | head -1)
42+
docker tag "${IMGID}" "${IMAGE}"
43+
kind load docker-image "${IMAGE}" --name disentangle-test
3744
3845
- name: Install chart
3946
run: |

helm/disentangle/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: disentangle
33
description: Helm chart for Disentangle Protocol network deployment
44
type: application
55
version: 0.1.0
6-
appVersion: "0.3.1"
6+
appVersion: "v0.4.0"
77
license: Apache-2.0
88
keywords:
99
- blockchain
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{{- if .Values.nebula.enabled }}
2+
apiVersion: v1
3+
kind: ConfigMap
4+
metadata:
5+
name: {{ include "disentangle.fullname" . }}-nebula-config
6+
labels:
7+
{{- include "disentangle.labels" . | nindent 4 }}
8+
app.kubernetes.io/component: nebula
9+
data:
10+
config.yaml: |
11+
pki:
12+
ca: /etc/nebula/certs/ca.crt
13+
cert: /etc/nebula/certs/host.crt
14+
key: /etc/nebula/certs/host.key
15+
curve: PQ
16+
17+
{{- if eq .Values.nebula.mode "lighthouse" }}
18+
lighthouse:
19+
am_lighthouse: true
20+
{{- else }}
21+
lighthouse:
22+
am_lighthouse: false
23+
hosts:
24+
- "{{ .Values.nebula.lighthouseAddr }}"
25+
{{- end }}
26+
27+
listen:
28+
host: 0.0.0.0
29+
port: {{ .Values.nebula.port }}
30+
31+
punchy:
32+
punch: true
33+
34+
tun:
35+
disabled: false
36+
dev: nebula1
37+
38+
firewall:
39+
outbound:
40+
{{- toYaml .Values.nebula.firewall.outbound | nindent 8 }}
41+
inbound:
42+
{{- toYaml .Values.nebula.firewall.inbound | nindent 8 }}
43+
44+
logging:
45+
level: info
46+
{{- end }}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
{{- if .Values.nebula.enabled }}
2+
apiVersion: apps/v1
3+
kind: DaemonSet
4+
metadata:
5+
name: {{ include "disentangle.fullname" . }}-nebula
6+
labels:
7+
{{- include "disentangle.labels" . | nindent 4 }}
8+
app.kubernetes.io/component: nebula
9+
spec:
10+
selector:
11+
matchLabels:
12+
{{- include "disentangle.selectorLabels" . | nindent 6 }}
13+
app.kubernetes.io/component: nebula
14+
template:
15+
metadata:
16+
labels:
17+
{{- include "disentangle.selectorLabels" . | nindent 8 }}
18+
app.kubernetes.io/component: nebula
19+
spec:
20+
hostNetwork: true
21+
dnsPolicy: ClusterFirstWithHostNet
22+
containers:
23+
- name: nebula
24+
image: "{{ .Values.nebula.image.repository }}:{{ .Values.nebula.image.tag }}"
25+
imagePullPolicy: {{ .Values.nebula.image.pullPolicy }}
26+
securityContext:
27+
capabilities:
28+
add: ["NET_ADMIN"]
29+
ports:
30+
- containerPort: {{ .Values.nebula.port }}
31+
protocol: UDP
32+
name: nebula
33+
volumeMounts:
34+
- name: nebula-config
35+
mountPath: /etc/nebula
36+
readOnly: true
37+
- name: nebula-certs
38+
mountPath: /etc/nebula/certs
39+
readOnly: true
40+
- name: tun
41+
mountPath: /dev/net/tun
42+
command:
43+
- nebula
44+
- -config
45+
- /etc/nebula/config.yaml
46+
volumes:
47+
- name: nebula-config
48+
configMap:
49+
name: {{ include "disentangle.fullname" . }}-nebula-config
50+
- name: nebula-certs
51+
secret:
52+
secretName: {{ .Values.nebula.certSecretName }}
53+
- name: tun
54+
hostPath:
55+
path: /dev/net/tun
56+
type: CharDevice
57+
{{- end }}

helm/disentangle/values.yaml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,35 @@ securityContext:
9090
runAsNonRoot: true
9191
runAsUser: 1000
9292

93+
# Nebula-PQ overlay mesh
94+
nebula:
95+
enabled: false
96+
image:
97+
repository: ghcr.io/disentangle-network/nebula-pq
98+
tag: "latest"
99+
pullPolicy: IfNotPresent
100+
# Mode: "lighthouse" or "node"
101+
mode: "node"
102+
# Overlay network CIDR (e.g., 10.42.0.0/16)
103+
overlayCidr: "10.42.0.0/16"
104+
# Lighthouse address (ip:port) - required for mode=node
105+
lighthouseAddr: ""
106+
# Port for nebula UDP traffic
107+
port: 4242
108+
# Certificate secret name (created by launch mesh add, SOPS-encrypted)
109+
certSecretName: "nebula-certs"
110+
# Firewall rules
111+
firewall:
112+
outbound:
113+
- port: any
114+
proto: any
115+
host: any
116+
inbound:
117+
- port: any
118+
proto: any
119+
groups:
120+
- disentangle
121+
93122
# Node scheduling
94123
nodeSelector: {}
95124
tolerations: []

tests/golden/custom-resources.yaml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ metadata:
88
helm.sh/chart: disentangle-0.1.0
99
app.kubernetes.io/name: disentangle
1010
app.kubernetes.io/instance: golden-test
11-
app.kubernetes.io/version: "0.3.1"
11+
app.kubernetes.io/version: "v0.4.0"
1212
app.kubernetes.io/managed-by: Helm
1313
spec:
1414
minAvailable: 6
@@ -26,7 +26,7 @@ metadata:
2626
helm.sh/chart: disentangle-0.1.0
2727
app.kubernetes.io/name: disentangle
2828
app.kubernetes.io/instance: golden-test
29-
app.kubernetes.io/version: "0.3.1"
29+
app.kubernetes.io/version: "v0.4.0"
3030
app.kubernetes.io/managed-by: Helm
3131
---
3232
# Source: disentangle/templates/configmap.yaml
@@ -38,7 +38,7 @@ metadata:
3838
helm.sh/chart: disentangle-0.1.0
3939
app.kubernetes.io/name: disentangle
4040
app.kubernetes.io/instance: golden-test
41-
app.kubernetes.io/version: "0.3.1"
41+
app.kubernetes.io/version: "v0.4.0"
4242
app.kubernetes.io/managed-by: Helm
4343
data:
4444
cluster-config.yaml: |
@@ -67,7 +67,7 @@ metadata:
6767
helm.sh/chart: disentangle-0.1.0
6868
app.kubernetes.io/name: disentangle
6969
app.kubernetes.io/instance: golden-test
70-
app.kubernetes.io/version: "0.3.1"
70+
app.kubernetes.io/version: "v0.4.0"
7171
app.kubernetes.io/managed-by: Helm
7272
spec:
7373
type: ClusterIP
@@ -94,7 +94,7 @@ metadata:
9494
helm.sh/chart: disentangle-0.1.0
9595
app.kubernetes.io/name: disentangle
9696
app.kubernetes.io/instance: golden-test
97-
app.kubernetes.io/version: "0.3.1"
97+
app.kubernetes.io/version: "v0.4.0"
9898
app.kubernetes.io/managed-by: Helm
9999
spec:
100100
type: ClusterIP
@@ -116,7 +116,7 @@ metadata:
116116
helm.sh/chart: disentangle-0.1.0
117117
app.kubernetes.io/name: disentangle
118118
app.kubernetes.io/instance: golden-test
119-
app.kubernetes.io/version: "0.3.1"
119+
app.kubernetes.io/version: "v0.4.0"
120120
app.kubernetes.io/managed-by: Helm
121121
spec:
122122
serviceName: golden-test-disentangle-headless
@@ -138,7 +138,7 @@ spec:
138138
type: RuntimeDefault
139139
containers:
140140
- name: disentangle-node
141-
image: ghcr.io/disentangle-network/disentangle-node:0.3.1
141+
image: ghcr.io/disentangle-network/disentangle-node:v0.4.0
142142
imagePullPolicy: IfNotPresent
143143
securityContext:
144144
allowPrivilegeEscalation: false
@@ -220,7 +220,7 @@ metadata:
220220
helm.sh/chart: disentangle-0.1.0
221221
app.kubernetes.io/name: disentangle
222222
app.kubernetes.io/instance: golden-test
223-
app.kubernetes.io/version: "0.3.1"
223+
app.kubernetes.io/version: "v0.4.0"
224224
app.kubernetes.io/managed-by: Helm
225225
annotations:
226226
"helm.sh/hook": test
@@ -284,7 +284,7 @@ metadata:
284284
helm.sh/chart: disentangle-0.1.0
285285
app.kubernetes.io/name: disentangle
286286
app.kubernetes.io/instance: golden-test
287-
app.kubernetes.io/version: "0.3.1"
287+
app.kubernetes.io/version: "v0.4.0"
288288
app.kubernetes.io/managed-by: Helm
289289
annotations:
290290
"helm.sh/hook": test
@@ -357,7 +357,7 @@ metadata:
357357
helm.sh/chart: disentangle-0.1.0
358358
app.kubernetes.io/name: disentangle
359359
app.kubernetes.io/instance: golden-test
360-
app.kubernetes.io/version: "0.3.1"
360+
app.kubernetes.io/version: "v0.4.0"
361361
app.kubernetes.io/managed-by: Helm
362362
annotations:
363363
"helm.sh/hook": test

tests/golden/default.yaml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ metadata:
88
helm.sh/chart: disentangle-0.1.0
99
app.kubernetes.io/name: disentangle
1010
app.kubernetes.io/instance: golden-test
11-
app.kubernetes.io/version: "0.3.1"
11+
app.kubernetes.io/version: "v0.4.0"
1212
app.kubernetes.io/managed-by: Helm
1313
spec:
1414
minAvailable: 3
@@ -26,7 +26,7 @@ metadata:
2626
helm.sh/chart: disentangle-0.1.0
2727
app.kubernetes.io/name: disentangle
2828
app.kubernetes.io/instance: golden-test
29-
app.kubernetes.io/version: "0.3.1"
29+
app.kubernetes.io/version: "v0.4.0"
3030
app.kubernetes.io/managed-by: Helm
3131
---
3232
# Source: disentangle/templates/configmap.yaml
@@ -38,7 +38,7 @@ metadata:
3838
helm.sh/chart: disentangle-0.1.0
3939
app.kubernetes.io/name: disentangle
4040
app.kubernetes.io/instance: golden-test
41-
app.kubernetes.io/version: "0.3.1"
41+
app.kubernetes.io/version: "v0.4.0"
4242
app.kubernetes.io/managed-by: Helm
4343
data:
4444
cluster-config.yaml: |
@@ -67,7 +67,7 @@ metadata:
6767
helm.sh/chart: disentangle-0.1.0
6868
app.kubernetes.io/name: disentangle
6969
app.kubernetes.io/instance: golden-test
70-
app.kubernetes.io/version: "0.3.1"
70+
app.kubernetes.io/version: "v0.4.0"
7171
app.kubernetes.io/managed-by: Helm
7272
spec:
7373
type: ClusterIP
@@ -94,7 +94,7 @@ metadata:
9494
helm.sh/chart: disentangle-0.1.0
9595
app.kubernetes.io/name: disentangle
9696
app.kubernetes.io/instance: golden-test
97-
app.kubernetes.io/version: "0.3.1"
97+
app.kubernetes.io/version: "v0.4.0"
9898
app.kubernetes.io/managed-by: Helm
9999
spec:
100100
type: ClusterIP
@@ -116,7 +116,7 @@ metadata:
116116
helm.sh/chart: disentangle-0.1.0
117117
app.kubernetes.io/name: disentangle
118118
app.kubernetes.io/instance: golden-test
119-
app.kubernetes.io/version: "0.3.1"
119+
app.kubernetes.io/version: "v0.4.0"
120120
app.kubernetes.io/managed-by: Helm
121121
spec:
122122
serviceName: golden-test-disentangle-headless
@@ -138,7 +138,7 @@ spec:
138138
type: RuntimeDefault
139139
containers:
140140
- name: disentangle-node
141-
image: ghcr.io/disentangle-network/disentangle-node:0.3.1
141+
image: ghcr.io/disentangle-network/disentangle-node:v0.4.0
142142
imagePullPolicy: IfNotPresent
143143
securityContext:
144144
allowPrivilegeEscalation: false
@@ -220,7 +220,7 @@ metadata:
220220
helm.sh/chart: disentangle-0.1.0
221221
app.kubernetes.io/name: disentangle
222222
app.kubernetes.io/instance: golden-test
223-
app.kubernetes.io/version: "0.3.1"
223+
app.kubernetes.io/version: "v0.4.0"
224224
app.kubernetes.io/managed-by: Helm
225225
annotations:
226226
"helm.sh/hook": test
@@ -284,7 +284,7 @@ metadata:
284284
helm.sh/chart: disentangle-0.1.0
285285
app.kubernetes.io/name: disentangle
286286
app.kubernetes.io/instance: golden-test
287-
app.kubernetes.io/version: "0.3.1"
287+
app.kubernetes.io/version: "v0.4.0"
288288
app.kubernetes.io/managed-by: Helm
289289
annotations:
290290
"helm.sh/hook": test
@@ -357,7 +357,7 @@ metadata:
357357
helm.sh/chart: disentangle-0.1.0
358358
app.kubernetes.io/name: disentangle
359359
app.kubernetes.io/instance: golden-test
360-
app.kubernetes.io/version: "0.3.1"
360+
app.kubernetes.io/version: "v0.4.0"
361361
app.kubernetes.io/managed-by: Helm
362362
annotations:
363363
"helm.sh/hook": test

0 commit comments

Comments
 (0)