Skip to content

Commit ed4e30d

Browse files
kubernetes-operator v0.2.0 (#26)
1 parent 1b7ef66 commit ed4e30d

20 files changed

+543
-158
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: Test netbird-operator-config Chart
2+
3+
on:
4+
push:
5+
pull_request:
6+
7+
jobs:
8+
test-e2e:
9+
name: Run on Ubuntu
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Clone the code
13+
uses: actions/checkout@v4
14+
15+
- name: Install the latest version of kind
16+
run: |
17+
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
18+
chmod +x ./kind
19+
sudo mv ./kind /usr/local/bin/kind
20+
21+
- name: Verify kind installation
22+
run: kind version
23+
24+
- name: Create kind cluster
25+
run: kind create cluster
26+
27+
- name: Install Helm
28+
run: |
29+
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
30+
31+
- name: Verify Helm installation
32+
run: helm version
33+
34+
- name: Lint Helm Chart
35+
run: |
36+
helm lint ./charts/kubernetes-operator
37+
38+
- name: Install cert-manager via Helm
39+
run: |
40+
helm repo add jetstack https://charts.jetstack.io
41+
helm repo update
42+
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true
43+
44+
- name: Wait for cert-manager to be ready
45+
run: |
46+
kubectl wait --namespace cert-manager --for=condition=available --timeout=300s deployment/cert-manager
47+
kubectl wait --namespace cert-manager --for=condition=available --timeout=300s deployment/cert-manager-cainjector
48+
kubectl wait --namespace cert-manager --for=condition=available --timeout=300s deployment/cert-manager-webhook
49+
50+
- name: Install Helm chart for project
51+
run: |
52+
helm install test-chart --create-namespace --namespace netbird --set 'operator.image.tag=debug' ./charts/kubernetes-operator
53+
54+
- name: Check Helm release status
55+
run: |
56+
helm status test-chart --namespace netbird
57+
58+
- name: Install config chart for project
59+
run: |
60+
helm install test-chart-config --create-namespace --namespace netbird ./charts/netbird-operator-config
61+
62+
- name: Check config release status
63+
run: |
64+
helm status test-chart-config --namespace netbird

charts/kubernetes-operator/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ apiVersion: v2
22
name: kubernetes-operator
33
description: NetBird Kubernetes Operator
44
type: application
5-
version: 0.1.15
6-
appVersion: "0.1.5"
5+
version: 0.2.0
6+
appVersion: "0.2.0"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
fullnameOverride: "netbird-api-gateway"
2+
3+
controller:
4+
replicaCount: 1
5+
allowSnippetAnnotations: true
6+
nodeSelector:
7+
kubernetes.io/os: null
8+
service:
9+
type: ClusterIP
10+
admissionWebhooks:
11+
enabled: false
12+
ingressClassResource:
13+
name: netbird-api-gateway
14+
controllerValue: k8s.io/netbird-api-gateway
15+
ingressClass: netbird-api-gateway
16+
config:
17+
ssl-redirect: "true"

charts/kubernetes-operator/templates/_helpers.tpl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ helm.sh/chart: {{ include "kubernetes-operator.chart" . }}
4040
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
4141
{{- end }}
4242
app.kubernetes.io/managed-by: {{ .Release.Service }}
43+
{{- if .Values.general.labels }}
44+
{{- range $key, $val := .Values.general.labels }}
45+
{{ $key }}: "{{ $val }}"
46+
{{- end }}
47+
{{- end }}
4348
{{- end }}
4449

4550
{{/*

charts/kubernetes-operator/templates/deployment.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ spec:
6666
{{- if .Values.routingClientImage }}
6767
- --netbird-client-image={{.Values.routingClientImage}}
6868
{{- end }}
69+
{{- if .Values.general.labels }}
70+
{{- $list := list }}
71+
{{- range $k, $v := .Values.general.labels }}
72+
{{- $list = append $list (printf "%s=%s" $k $v) }}
73+
{{- end }}
74+
- --default-labels="{{ join ", " $list }}"
75+
{{- end }}
6976
ports:
7077
- name: webhook-server
7178
containerPort: {{ .Values.webhook.service.port }}

charts/kubernetes-operator/templates/kubernetes-nbresource.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ spec:
2727
spec:
2828
initContainers:
2929
- name: wait-network-ready
30-
image: {{ .Values.ingress.kubernetesAPI.customKubectlImage | default "registry.suse.com/suse/kubectl:latest"}}
30+
image: "netbirdio/kubectl:latest"
3131
command:
32-
- bash
32+
- sh
3333
- -c
3434
args:
35-
- kubectl wait --for 'jsonpath={.status.networkID}' -n {{ $routerNS }} nbroutingpeer router;
35+
- kubectl wait --for 'jsonpath={.status.networkID}' -n {{ $routerNS }} nbroutingpeer router;
3636
containers:
3737
- name: apply-nbresource
38-
image: {{ .Values.ingress.kubernetesAPI.customKubectlImage | default "registry.suse.com/suse/kubectl:latest"}}
38+
image: "netbirdio/kubectl:latest"
3939
env:
4040
- name: NBRESOURCE_VALUE
4141
value: |
@@ -62,7 +62,7 @@ spec:
6262
tcpPorts:
6363
- 443
6464
command:
65-
- bash
65+
- sh
6666
- -c
6767
args:
6868
- kubectl delete NBResource --ignore-not-found -n default kubernetes; export NETWORK_ID=$(kubectl get NBRoutingPeer -n {{ $routerNS }} router -o 'jsonpath={.status.networkID}'); echo "$NBRESOURCE_VALUE" | envsubst | kubectl apply -f -

charts/kubernetes-operator/templates/nbpolicies.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ metadata:
88
labels:
99
app.kubernetes.io/component: operator
1010
{{- include "kubernetes-operator.labels" $ | nindent 4 }}
11+
annotations:
12+
helm.sh/resource-policy: keep
1113
name: {{ $k }}
1214
spec:
1315
name: {{ $v.name }}

charts/kubernetes-operator/templates/nbroutingpeers.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ metadata:
1010
labels:
1111
app.kubernetes.io/component: operator
1212
{{- include "kubernetes-operator.labels" $ | nindent 4 }}
13+
annotations:
14+
helm.sh/resource-policy: keep
1315
name: router
1416
namespace: {{ $k }}
1517
{{ $spec := merge $defaults $v }}
@@ -51,6 +53,8 @@ metadata:
5153
labels:
5254
app.kubernetes.io/component: operator
5355
{{- include "kubernetes-operator.labels" $ | nindent 4 }}
56+
annotations:
57+
helm.sh/resource-policy: keep
5458
name: router
5559
{{- if or (or (or .replicas .resources) (or .labels .annotations)) (or .nodeSelector .tolerations) }}
5660
spec:
Lines changed: 41 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,41 @@
1-
apiVersion: batch/v1
2-
kind: Job
3-
metadata:
4-
name: {{ include "kubernetes-operator.fullname" . }}-delete-routers
5-
labels:
6-
app.kubernetes.io/component: operator
7-
{{- include "kubernetes-operator.labels" . | nindent 4 }}
8-
annotations:
9-
helm.sh/hook: pre-delete
10-
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
11-
spec:
12-
backoffLimit: 3
13-
template:
14-
metadata:
15-
name: {{ include "kubernetes-operator.fullname" . }}
16-
labels:
17-
app.kubernetes.io/component: operator
18-
{{- include "kubernetes-operator.labels" . | nindent 8 }}
19-
{{- with .Values.operator.podLabels }}
20-
{{- toYaml . | nindent 8 }}
21-
{{- end }}
22-
spec:
23-
containers:
24-
- name: pre-delete
25-
image: {{ .Values.ingress.kubernetesAPI.customKubectlImage | default "registry.suse.com/suse/kubectl:latest"}}
26-
args:
27-
- delete
28-
- --all
29-
- -A
30-
- --cascade=foreground
31-
- --ignore-not-found
32-
- NBRoutingPeer
33-
serviceAccountName: {{ include "kubernetes-operator.serviceAccountName" . }}
34-
restartPolicy: Never
35-
---
36-
apiVersion: batch/v1
37-
kind: Job
38-
metadata:
39-
name: {{ include "kubernetes-operator.fullname" . }}-delete-policies
40-
labels:
41-
app.kubernetes.io/component: operator
42-
{{- include "kubernetes-operator.labels" . | nindent 4 }}
43-
annotations:
44-
helm.sh/hook: pre-delete
45-
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
46-
spec:
47-
backoffLimit: 3
48-
template:
49-
metadata:
50-
name: {{ include "kubernetes-operator.fullname" . }}
51-
labels:
52-
app.kubernetes.io/component: operator
53-
{{- include "kubernetes-operator.labels" . | nindent 8 }}
54-
{{- with .Values.operator.podLabels }}
55-
{{- toYaml . | nindent 8 }}
56-
{{- end }}
57-
spec:
58-
containers:
59-
- name: pre-delete
60-
image: {{ .Values.ingress.kubernetesAPI.customKubectlImage | default "registry.suse.com/suse/kubectl:latest"}}
61-
args:
62-
- delete
63-
- --all
64-
- --cascade=foreground
65-
- --ignore-not-found
66-
- NBPolicy
67-
serviceAccountName: {{ include "kubernetes-operator.serviceAccountName" . }}
68-
restartPolicy: Never
69-
---
1+
{{/*apiVersion: batch/v1*/}}
2+
{{/*kind: Job*/}}
3+
{{/*metadata:*/}}
4+
{{/* name: {{ include "kubernetes-operator.fullname" . }}-delete-router-deployments*/}}
5+
{{/* labels:*/}}
6+
{{/* app.kubernetes.io/component: operator*/}}
7+
{{/* {{- include "kubernetes-operator.labels" . | nindent 4 }}*/}}
8+
{{/* annotations:*/}}
9+
{{/* helm.sh/hook: pre-delete*/}}
10+
{{/* helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded*/}}
11+
{{/*spec:*/}}
12+
{{/* backoffLimit: 3*/}}
13+
{{/* template:*/}}
14+
{{/* metadata:*/}}
15+
{{/* name: {{ include "kubernetes-operator.fullname" . }}*/}}
16+
{{/* labels:*/}}
17+
{{/* app.kubernetes.io/component: operator*/}}
18+
{{/* {{- include "kubernetes-operator.labels" . | nindent 8 }}*/}}
19+
{{/* {{- with .Values.operator.podLabels }}*/}}
20+
{{/* {{- toYaml . | nindent 8 }}*/}}
21+
{{/* {{- end }}*/}}
22+
{{/* spec:*/}}
23+
{{/* containers:*/}}
24+
{{/* - name: pre-delete*/}}
25+
{{/* image: "netbirdio/kubectl:latest"*/}}
26+
{{/* imagePullPolicy: {{ .Values.operator.image.pullPolicy }}*/}}
27+
{{/* command:*/}}
28+
{{/* - sh*/}}
29+
{{/* - -c*/}}
30+
{{/* args:*/}}
31+
{{/* - kubectl get NBRoutingPeer -A --no-headers -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name | while read "L"; do kubectl patch --type=json -p '[{"op":"replace","path":"/spec/disableDeployment","value":true}]' NBRoutingPeer -n $(echo "$L" | awk '{print $1}') $(echo "$L" | awk '{print $2}'); done*/}}
32+
{{/* - name: delete-wait*/}}
33+
{{/* image: "netbirdio/kubectl:latest"*/}}
34+
{{/* imagePullPolicy: {{ .Values.operator.image.pullPolicy }}*/}}
35+
{{/* command:*/}}
36+
{{/* - sh*/}}
37+
{{/* - -c*/}}
38+
{{/* args:*/}}
39+
{{/* - kubectl get NBRoutingPeer -A --no-headers -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name | while read "L"; do kubectl wait --for=delete deployment -n $(echo "$L" | awk '{print $1}') $(echo "$L" | awk '{print $2}'); done*/}}
40+
{{/* serviceAccountName: {{ include "kubernetes-operator.serviceAccountName" . }}*/}}
41+
{{/* restartPolicy: Never*/}}

charts/kubernetes-operator/templates/webhook.yaml

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -96,84 +96,6 @@ webhooks:
9696
apiVersion: admissionregistration.k8s.io/v1
9797
kind: ValidatingWebhookConfiguration
9898
metadata:
99-
{{- if $.Values.webhook.enableCertManager }}
100-
annotations:
101-
cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ template "kubernetes-operator.fullname" . }}-serving-cert
102-
{{- end }}
103-
name: {{ include "kubernetes-operator.fullname" . }}-vnbresource-webhook
104-
labels:
105-
{{- include "kubernetes-operator.labels" . | nindent 4 }}
106-
webhooks:
107-
- clientConfig:
108-
{{- if not $.Values.webhook.enableCertManager }}
109-
caBundle: {{ $tls.caCert }}
110-
{{ end }}
111-
service:
112-
name: {{ template "kubernetes-operator.webhookService" . }}
113-
namespace: {{ $.Release.Namespace }}
114-
path: /validate-netbird-io-v1-nbresource
115-
failurePolicy: {{ .Values.webhook.failurePolicy }}
116-
name: vnbresource-v1.netbird.io
117-
admissionReviewVersions:
118-
- v1
119-
{{- if .Values.webhook.namespaceSelectors }}
120-
namespaceSelector:
121-
matchExpressions:
122-
{{ toYaml .Values.webhook.namespaceSelectors | nindent 4 }}
123-
{{ end }}
124-
rules:
125-
- apiGroups:
126-
- netbird.io
127-
apiVersions:
128-
- v1
129-
operations:
130-
- DELETE
131-
resources:
132-
- "nbresources"
133-
sideEffects: None
134-
---
135-
apiVersion: admissionregistration.k8s.io/v1
136-
kind: ValidatingWebhookConfiguration
137-
metadata:
138-
{{- if $.Values.webhook.enableCertManager }}
139-
annotations:
140-
cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ template "kubernetes-operator.fullname" . }}-serving-cert
141-
{{- end }}
142-
name: {{ include "kubernetes-operator.fullname" . }}-vnbroutingpeer-webhook
143-
labels:
144-
{{- include "kubernetes-operator.labels" . | nindent 4 }}
145-
webhooks:
146-
- clientConfig:
147-
{{- if not $.Values.webhook.enableCertManager }}
148-
caBundle: {{ $tls.caCert }}
149-
{{ end }}
150-
service:
151-
name: {{ template "kubernetes-operator.webhookService" . }}
152-
namespace: {{ $.Release.Namespace }}
153-
path: /validate-netbird-io-v1-nbroutingpeer
154-
failurePolicy: {{ .Values.webhook.failurePolicy }}
155-
name: vnbroutingpeer-v1.netbird.io
156-
admissionReviewVersions:
157-
- v1
158-
{{- if .Values.webhook.namespaceSelectors }}
159-
namespaceSelector:
160-
matchExpressions:
161-
{{ toYaml .Values.webhook.namespaceSelectors | nindent 4 }}
162-
{{ end }}
163-
rules:
164-
- apiGroups:
165-
- netbird.io
166-
apiVersions:
167-
- v1
168-
operations:
169-
- DELETE
170-
resources:
171-
- "nbroutingpeers"
172-
sideEffects: None
173-
---
174-
apiVersion: admissionregistration.k8s.io/v1
175-
kind: ValidatingWebhookConfiguration
176-
metadata:
17799
{{- if $.Values.webhook.enableCertManager }}
178100
annotations:
179101
cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ template "kubernetes-operator.fullname" . }}-serving-cert

0 commit comments

Comments
 (0)