@ydkn/pulumi-components 0.7.9 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/index.d.ts +2 -1
  2. package/index.js +2 -1
  3. package/index.js.map +1 -1
  4. package/lib/blocky/deployment.js +0 -1
  5. package/lib/blocky/deployment.js.map +1 -1
  6. package/lib/certManager/certificate.d.ts +2 -1
  7. package/lib/certManager/certificate.js +11 -11
  8. package/lib/certManager/certificate.js.map +1 -1
  9. package/lib/certManager/operator.js +0 -1
  10. package/lib/certManager/operator.js.map +1 -1
  11. package/lib/externalDns/operator.js +10 -0
  12. package/lib/externalDns/operator.js.map +1 -1
  13. package/lib/freeradius/deployment.js +10 -11
  14. package/lib/freeradius/deployment.js.map +1 -1
  15. package/lib/grafana/agent.js +1 -1
  16. package/lib/grafana/agent.js.map +1 -1
  17. package/lib/hcloud/assets/fcos-install.sh +1 -1
  18. package/lib/hcloud/cluster.js +1 -1
  19. package/lib/hcloud/cluster.js.map +1 -1
  20. package/lib/hcloud/netbirdAgent.d.ts +1 -0
  21. package/lib/hcloud/netbirdAgent.js +3 -2
  22. package/lib/hcloud/netbirdAgent.js.map +1 -1
  23. package/lib/hcloud/netbirdManagement.js +39 -4
  24. package/lib/hcloud/netbirdManagement.js.map +1 -1
  25. package/lib/k0s/cluster.d.ts +1 -0
  26. package/lib/k0s/cluster.js +46 -0
  27. package/lib/k0s/cluster.js.map +1 -1
  28. package/lib/loki/deployment.d.ts +2 -0
  29. package/lib/loki/deployment.js +63 -33
  30. package/lib/loki/deployment.js.map +1 -1
  31. package/lib/minio/index.d.ts +3 -0
  32. package/lib/minio/index.js +4 -0
  33. package/lib/minio/index.js.map +1 -0
  34. package/lib/minio/operator.d.ts +17 -0
  35. package/lib/minio/operator.js +49 -0
  36. package/lib/minio/operator.js.map +1 -0
  37. package/lib/minio/tenant.d.ts +70 -0
  38. package/lib/minio/tenant.js +194 -0
  39. package/lib/minio/tenant.js.map +1 -0
  40. package/lib/nats/cluster.js +0 -2
  41. package/lib/nats/cluster.js.map +1 -1
  42. package/lib/netbird/agent.d.ts +4 -0
  43. package/lib/netbird/agent.js +47 -16
  44. package/lib/netbird/agent.js.map +1 -1
  45. package/lib/netbird/assets/fix-nftables.sh +20 -0
  46. package/lib/netbird/management.d.ts +7 -0
  47. package/lib/netbird/management.js +49 -24
  48. package/lib/netbird/management.js.map +1 -1
  49. package/lib/plex/mediaServer.js +1 -28
  50. package/lib/plex/mediaServer.js.map +1 -1
  51. package/lib/rook/cluster.js +0 -1
  52. package/lib/rook/cluster.js.map +1 -1
  53. package/lib/traefik/controller.js +0 -1
  54. package/lib/traefik/controller.js.map +1 -1
  55. package/lib/transmission/deployment.js +2 -2
  56. package/lib/ubuntu/deployment.js +0 -1
  57. package/lib/ubuntu/deployment.js.map +1 -1
  58. package/lib/velero/operator.js +1 -1
  59. package/lib/zitadel/deployment.js +2 -2
  60. package/package.json +21 -21
@@ -0,0 +1,194 @@
1
+ import * as pulumi from "@pulumi/pulumi";
2
+ import * as random from "@pulumi/random";
3
+ import * as k8s from "@pulumi/kubernetes";
4
+ import { ComponentResource } from "../common/index.js";
5
+ import * as kubernetes from "../kubernetes/index.js";
6
+ import { SecureIngress } from "../traefik/index.js";
7
+ export class Tenant extends ComponentResource {
8
+ helmRelease;
9
+ namespace;
10
+ region;
11
+ hostname;
12
+ adminUsername;
13
+ adminPassword;
14
+ users;
15
+ /**
16
+ * Create a new MinIO tenant resource.
17
+ * @param name The name of the MinIO tenant resource.
18
+ * @param args A bag of arguments to control the MinIO tenant creation.
19
+ * @param opts A bag of options that control this resource's behavior.
20
+ */
21
+ constructor(name, args, opts) {
22
+ super("minio:tenant", name, args, opts);
23
+ const emptyOpts = this.opts();
24
+ const k8sOpts = this.opts(k8s.Provider);
25
+ if (args.region === undefined) {
26
+ args.region = "minio";
27
+ }
28
+ this.adminUsername = pulumi.secret(new random.RandomPassword(`${name}-admin-username`, { length: 24, special: false }, emptyOpts).result);
29
+ this.adminPassword = pulumi.secret(new random.RandomPassword(`${name}-admin-password`, { length: 40, special: false }, emptyOpts).result);
30
+ this.namespace = args.namespace
31
+ ? pulumi.output(args.namespace)
32
+ : new k8s.core.v1.Namespace(name, { metadata: { name } }, k8sOpts).metadata.name;
33
+ const adminCredentialsSecret = `${name}-admin-credentials`;
34
+ this.region = pulumi.output(args.region);
35
+ this.hostname = pulumi
36
+ .all([args.apiIngress, this.namespace])
37
+ .apply(([apiIngress, ns]) => apiIngress?.host ?? `${name}.${ns}.svc`);
38
+ this.users = pulumi.all([args.users]).apply(([users]) => pulumi.all(users ?? []).apply((users) => {
39
+ const usersMap = {};
40
+ for (const user of users ?? []) {
41
+ const accessKey = pulumi.secret(new random.RandomPassword(`${name}-${user.name}-username`, { length: 24, special: false }, emptyOpts)
42
+ .result);
43
+ const secretKey = pulumi.secret(new random.RandomPassword(`${name}-${user.name}-password`, { length: 48, special: false }, emptyOpts)
44
+ .result);
45
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
46
+ const secret = new kubernetes.v1.Secret(`${name}-user-${user.name}`, {
47
+ metadata: { name: `${name}-user-${user.name}`, namespace: this.namespace },
48
+ stringData: {
49
+ CONSOLE_ACCESS_KEY: accessKey,
50
+ CONSOLE_SECRET_KEY: secretKey,
51
+ },
52
+ }, k8sOpts);
53
+ usersMap[user.name] = { accessKey, secretKey };
54
+ }
55
+ return usersMap;
56
+ }));
57
+ this.helmRelease = new kubernetes.helm.v3.Release(name, {
58
+ namespace: this.namespace,
59
+ repositoryOpts: { repo: "https://operator.min.io/" },
60
+ chart: "tenant",
61
+ values: {
62
+ fullnameOverride: name,
63
+ secrets: {
64
+ name: adminCredentialsSecret,
65
+ accessKey: this.adminUsername,
66
+ secretKey: this.adminPassword,
67
+ },
68
+ tenant: {
69
+ name,
70
+ configuration: { name: adminCredentialsSecret },
71
+ env: [
72
+ { name: "MINIO_STORAGE_CLASS_STANDARD", value: args.standardStorageClass ?? "EC:2" },
73
+ { name: "MINIO_STORAGE_CLASS_RRS", value: args.reducedStorageClass ?? "EC:1" },
74
+ { name: "MINIO_BROWSER", value: "on" },
75
+ { name: "MINIO_BROWSER_LOGIN_ANIMATION", value: "off" },
76
+ { name: "MINIO_BROWSER_REDIRECT", value: "false" },
77
+ { name: "MINIO_PROMETHEUS_AUTH_TYPE", value: "public" },
78
+ { name: "MINIO_PROMETHEUS_JOB_ID", value: "minio" },
79
+ { name: "MINIO_UPDATE", value: "off" },
80
+ { name: "MINIO_REGION", value: this.region },
81
+ { name: "MINIO_SERVER_URL", value: this.hostname.apply((hostname) => `https://${hostname}/`) },
82
+ ],
83
+ logging: {
84
+ anonymous: true,
85
+ json: true,
86
+ quiet: false,
87
+ },
88
+ pools: pulumi.all([args.pools]).apply(([pools]) => {
89
+ return pools.map((pool) => {
90
+ return {
91
+ name: pool.name,
92
+ servers: pool.servers,
93
+ volumesPerServer: pool.volumesPerServer ?? 1,
94
+ size: pool.size ?? "10Gi",
95
+ storageClassName: pool.storageClassName,
96
+ resources: pool.resources ?? args.resources,
97
+ affinity: {
98
+ podAntiAffinity: {
99
+ preferredDuringSchedulingIgnoredDuringExecution: [
100
+ {
101
+ weight: 100,
102
+ podAffinityTerm: {
103
+ labelSelector: {
104
+ matchExpressions: [{ key: "v1.min.io/tenant", operator: "In", values: [name] }],
105
+ },
106
+ topologyKey: "kubernetes.io/hostname",
107
+ },
108
+ },
109
+ ],
110
+ },
111
+ },
112
+ };
113
+ });
114
+ }),
115
+ features: {
116
+ domains: {
117
+ minio: pulumi
118
+ .all([args.domains])
119
+ .apply(([domains]) => (domains ?? []).map((domain) => `https://${domain}`)),
120
+ console: pulumi
121
+ .all([args.consoleIngress, this.hostname])
122
+ .apply(([consoleIngress, hostname]) => `https://${consoleIngress?.host ?? hostname}`),
123
+ },
124
+ },
125
+ buckets: pulumi.all([args.buckets]).apply(([buckets]) => pulumi.all(buckets ?? []).apply((buckets) => {
126
+ return buckets.map((bucket) => {
127
+ return {
128
+ name: bucket.name,
129
+ objectLock: bucket.objectLock ?? false,
130
+ };
131
+ });
132
+ })),
133
+ users: pulumi.all([args.users]).apply(([users]) => pulumi.all(users ?? []).apply((users) => {
134
+ return users.map((user) => {
135
+ return {
136
+ name: `${name}-user-${user.name}`,
137
+ };
138
+ });
139
+ })),
140
+ metrics: { enabled: false },
141
+ prometheusOperator: false,
142
+ certificate: {
143
+ requestAutoCert: true,
144
+ },
145
+ },
146
+ ingress: {
147
+ api: this.ingressValues(name, "api", args.apiIngress),
148
+ console: this.ingressValues(name, "console", args.consoleIngress),
149
+ },
150
+ },
151
+ }, { ...k8sOpts, protect: args.protect });
152
+ pulumi.all([args.bucketsIngress]).apply(([bucketsIngress]) => {
153
+ if (bucketsIngress === undefined || bucketsIngress.hosts.length === 0) {
154
+ return;
155
+ }
156
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
157
+ const bucketsSecureIngress = new SecureIngress(`${name}-buckets`, {
158
+ metadata: { name: `${name}-buckets`, namespace: this.namespace, annotations: bucketsIngress.annotations },
159
+ spec: {
160
+ ingressClassName: bucketsIngress.ingressClassName,
161
+ rules: bucketsIngress.hosts.map((host) => {
162
+ return {
163
+ host: host,
164
+ http: {
165
+ paths: [{ path: "/", pathType: "Prefix", backend: { service: { name, port: { number: 443 } } } }],
166
+ },
167
+ };
168
+ }),
169
+ },
170
+ }, k8sOpts);
171
+ });
172
+ this.registerOutputs();
173
+ }
174
+ ingressValues(name, type, args) {
175
+ return pulumi.all([args]).apply(([args]) => {
176
+ if (args === undefined || args.enabled === undefined || args.enabled === false) {
177
+ return { enabled: false, host: "", tls: [] };
178
+ }
179
+ return {
180
+ enabled: true,
181
+ ingressClassName: args.ingressClassName,
182
+ annotations: {
183
+ "traefik.ingress.kubernetes.io/router.entrypoints": "websecure",
184
+ "traefik.ingress.kubernetes.io/router.tls": "true",
185
+ "cert-manager.io/cluster-issuer": "letsencrypt",
186
+ ...args.annotations,
187
+ },
188
+ host: args.host,
189
+ tls: [{ hosts: [args.host], secretName: `${name}-${type}-tls` }],
190
+ };
191
+ });
192
+ }
193
+ }
194
+ //# sourceMappingURL=tenant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../../lib/minio/tenant.ts"],"names":[],"mappings":"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"}
@@ -115,7 +115,6 @@ export class Cluster extends ComponentResource {
115
115
  if (body.statusCode !== 200) {
116
116
  return reject(new Error(`failed to fetch dashboard json`));
117
117
  }
118
- // eslint-disable-next-line no-template-curly-in-string
119
118
  resolve(body.data.replaceAll("${DS__NATS-PROMETHEUS}", "prometheus"));
120
119
  })
121
120
  .catch(() => {
@@ -125,7 +124,6 @@ export class Cluster extends ComponentResource {
125
124
  this.grafanaDashboard = new Dashboard(`${name}-grafana-dashboard`, {
126
125
  metadata: { namespace: this.namespace, name: pulumi.interpolate `${name}-grafana-dashboard` },
127
126
  name: "nats-jetstream",
128
- // eslint-disable-next-line security/detect-non-literal-fs-filename
129
127
  data: pulumi.all([dashboardPromise]).apply(([promise]) => promise ?? ""),
130
128
  }, opts);
131
129
  this.registerOutputs();
@@ -1 +1 @@
1
- {"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../../lib/nats/cluster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../../lib/nats/cluster.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,15 @@ export interface AgentArgs {
11
11
  nodeSelector?: pulumi.Input<{
12
12
  [key: string]: pulumi.Input<string>;
13
13
  }>;
14
+ extraBlacklistInterfaces?: pulumi.Input<pulumi.Input<string>[]>;
14
15
  }
15
16
  export declare class Agent extends ComponentResource {
17
+ private static readonly extraBlacklistInterfaces;
16
18
  static readonly interfaceName = "wt0";
17
19
  static readonly interfacePort = 51820;
20
+ private readonly extraBlacklistInterfaces;
18
21
  private readonly secret;
22
+ private readonly fixNFTScript;
19
23
  private readonly daemonSet;
20
24
  private readonly podDisruptionBudget;
21
25
  readonly namespace: pulumi.Output<string>;
@@ -1,11 +1,17 @@
1
1
  import * as pulumi from "@pulumi/pulumi";
2
2
  import * as k8s from "@pulumi/kubernetes";
3
+ import * as fs from "fs";
4
+ import * as path from "path";
5
+ import * as url from "url";
3
6
  import { ComponentResource } from "../common/index.js";
4
7
  import * as kubernetes from "../kubernetes/index.js";
5
8
  export class Agent extends ComponentResource {
9
+ static extraBlacklistInterfaces = ["wireguard.cali", "wg-v6.cali"];
6
10
  static interfaceName = "wt0";
7
11
  static interfacePort = 51820;
12
+ extraBlacklistInterfaces;
8
13
  secret;
14
+ fixNFTScript;
9
15
  daemonSet;
10
16
  podDisruptionBudget;
11
17
  namespace;
@@ -22,6 +28,18 @@ export class Agent extends ComponentResource {
22
28
  opts = this.opts(k8s.Provider);
23
29
  this.interfaceName = args.interfaceName ? pulumi.output(args.interfaceName) : pulumi.output(Agent.interfaceName);
24
30
  this.interfacePort = args.interfacePort ? pulumi.output(args.interfacePort) : pulumi.output(Agent.interfacePort);
31
+ this.extraBlacklistInterfaces = pulumi
32
+ .all([args.extraBlacklistInterfaces, this.interfaceName])
33
+ .apply(([extraBlacklistInterfaces, interfaceName]) => pulumi.all(extraBlacklistInterfaces ?? []).apply((extraBlacklistInterfaces) => {
34
+ const interfaces = Agent.extraBlacklistInterfaces;
35
+ interfaces.push(interfaceName);
36
+ for (const iface of extraBlacklistInterfaces) {
37
+ if (!interfaces.includes(iface)) {
38
+ interfaces.push(iface);
39
+ }
40
+ }
41
+ return interfaces.map((iface) => pulumi.output(iface));
42
+ }));
25
43
  this.namespace = args.namespace
26
44
  ? pulumi.output(args.namespace)
27
45
  : new k8s.core.v1.Namespace(name, { metadata: { name } }, opts).metadata.name;
@@ -35,6 +53,7 @@ export class Agent extends ComponentResource {
35
53
  },
36
54
  };
37
55
  const secretName = name;
56
+ const fixNFTScriptName = `${metadata.name}-fix-nftables`;
38
57
  this.secret = new kubernetes.v1.Secret(name, {
39
58
  metadata: { ...metadata, name: secretName },
40
59
  stringData: {
@@ -43,6 +62,14 @@ export class Agent extends ComponentResource {
43
62
  MANAGEMENT_URL: args.managementUrl,
44
63
  INTERFACE_NAME: this.interfaceName,
45
64
  WIREGUARD_PORT: pulumi.interpolate `${this.interfacePort}`,
65
+ LOG_LEVEL: "info",
66
+ DISABLE_CUSTOM_ROUTING: "true",
67
+ },
68
+ }, opts);
69
+ this.fixNFTScript = new k8s.core.v1.ConfigMap(name, {
70
+ metadata: { ...metadata, name: fixNFTScriptName },
71
+ data: {
72
+ "fix-nftables.sh": fs.readFileSync(path.join(path.dirname(url.fileURLToPath(import.meta.url)), "assets", "fix-nftables.sh"), "utf-8"),
46
73
  },
47
74
  }, opts);
48
75
  this.daemonSet = new k8s.apps.v1.DaemonSet(name, {
@@ -63,12 +90,19 @@ export class Agent extends ComponentResource {
63
90
  name: "netbird",
64
91
  image: pulumi.interpolate `netbirdio/netbird:${args.version ?? "latest"}`,
65
92
  imagePullPolicy: "Always",
66
- securityContext: { capabilities: { add: ["NET_ADMIN"] } },
93
+ securityContext: {
94
+ privileged: true,
95
+ capabilities: { add: ["NET_ADMIN", "SYS_RESOURCE", "SYS_ADMIN"] },
96
+ },
97
+ args: [
98
+ "--extra-iface-blacklist",
99
+ this.extraBlacklistInterfaces.apply((interfaces) => pulumi.all(interfaces).apply((interfaces) => interfaces.join(","))),
100
+ ],
67
101
  envFrom: [{ secretRef: { name: secretName }, prefix: "NB_" }],
68
102
  volumeMounts: [{ name: "config", mountPath: "/etc/netbird/" }],
69
103
  resources: {
70
- requests: { memory: "32Mi" },
71
- limits: { memory: "48Mi" },
104
+ requests: { memory: "48Mi" },
105
+ limits: { memory: "64Mi" },
72
106
  },
73
107
  },
74
108
  ].concat(args.networkRange
@@ -76,26 +110,23 @@ export class Agent extends ComponentResource {
76
110
  name: "fix-nftables",
77
111
  image: "alpine:latest",
78
112
  imagePullPolicy: "Always",
79
- command: pulumi.all([this.interfaceName, args.networkRange]).apply(([ifname, cidr]) => {
80
- return [
81
- "sh",
82
- "-c",
83
- [
84
- "apk --quiet --no-cache add nftables",
85
- `nft add rule netbird netbird-acl-input-filter position 8 iifname "${ifname}" ip saddr ${cidr} ip daddr ${cidr} jump netbird-acl-input-rules`,
86
- `nft add rule netbird netbird-acl-output-filter position 13 oifname "${ifname}" ip saddr ${cidr} ip daddr ${cidr} jump netbird-acl-output-rules`,
87
- "sleep infinity",
88
- ].join(" && "),
89
- ];
90
- }),
91
113
  securityContext: { capabilities: { add: ["NET_ADMIN"] } },
114
+ command: [
115
+ pulumi.interpolate `/usr/local/bin/fix-nftables.sh`,
116
+ this.interfaceName,
117
+ args.networkRange,
118
+ ],
119
+ volumeMounts: [{ name: "fix-nftables", mountPath: "/usr/local/bin" }],
92
120
  resources: {
93
121
  requests: { memory: "16Mi" },
94
122
  limits: { memory: "96Mi" },
95
123
  },
96
124
  }
97
125
  : []),
98
- volumes: [{ name: "config", hostPath: { path: "/var/lib/netbird", type: "DirectoryOrCreate" } }],
126
+ volumes: [
127
+ { name: "config", hostPath: { path: `/var/lib/netbird/${name}`, type: "DirectoryOrCreate" } },
128
+ { name: "fix-nftables", configMap: { name: fixNFTScriptName, defaultMode: 0o755 } },
129
+ ],
99
130
  terminationGracePeriodSeconds: 10,
100
131
  },
101
132
  },
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../lib/netbird/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAarD,MAAM,OAAO,KAAM,SAAQ,iBAAiB;IACnC,MAAM,CAAU,aAAa,GAAG,KAAK,CAAC;IACtC,MAAM,CAAU,aAAa,GAAG,KAAK,CAAC;IAE5B,MAAM,CAAuB;IAC7B,SAAS,CAAwB;IACjC,mBAAmB,CAAoC;IACxD,SAAS,CAAwB;IACjC,aAAa,CAAwB;IACrC,aAAa,CAAwB;IAErD;;;;;OAKG;IACH,YAAY,IAAY,EAAE,IAAe,EAAE,IAAsC;QAC/E,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEzC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACjH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAEjH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;YAC7B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAC/B,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAEhF,MAAM,QAAQ,GAAG;YACf,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE;gBACN,wBAAwB,EAAE,SAAS;gBACnC,6BAA6B,EAAE,OAAO;gBACtC,4BAA4B,EAAE,IAAI;aACnC;SACF,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC;QAExB,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,MAAM,CACpC,IAAI,EACJ;YACE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;YAC3C,UAAU,EAAE;gBACV,SAAS,EAAE,IAAI,CAAC,QAAQ;gBACxB,SAAS,EAAE,IAAI,CAAC,aAAa;gBAC7B,cAAc,EAAE,IAAI,CAAC,aAAa;gBAClC,cAAc,EAAE,IAAI,CAAC,aAAa;gBAClC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAA,GAAG,IAAI,CAAC,aAAa,EAAE;aAC1D;SACF,EACD,IAAI,CACL,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CACxC,IAAI,EACJ;YACE,QAAQ;YACR,IAAI,EAAE;gBACJ,QAAQ,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE;gBAC1C,QAAQ,EAAE;oBACR,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;oBACrC,IAAI,EAAE;wBACJ,WAAW,EAAE;4BACX,EAAE,GAAG,EAAE,gCAAgC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;4BACnF,EAAE,GAAG,EAAE,uCAAuC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;yBAC3F;wBACD,YAAY,EAAE,IAAI,CAAC,YAAY;wBAC/B,WAAW,EAAE,IAAI;wBACjB,UAAU,EAAE;4BACV;gCACE,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,MAAM,CAAC,WAAW,CAAA,qBAAqB,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE;gCACxE,eAAe,EAAE,QAAQ;gCACzB,eAAe,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE;gCACzD,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;gCAC7D,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;gCAC9D,SAAS,EAAE;oCACT,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;oCAC5B,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;iCAC3B;6BACmC;yBACvC,CAAC,MAAM,CACN,IAAI,CAAC,YAAY;4BACf,CAAC,CAAC;gCACE,IAAI,EAAE,cAAc;gCACpB,KAAK,EAAE,eAAe;gCACtB,eAAe,EAAE,QAAQ;gCACzB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;oCACpF,OAAO;wCACL,IAAI;wCACJ,IAAI;wCACJ;4CACE,qCAAqC;4CACrC,qEAAqE,MAAM,cAAc,IAAI,aAAa,IAAI,+BAA+B;4CAC7I,uEAAuE,MAAM,cAAc,IAAI,aAAa,IAAI,gCAAgC;4CAChJ,gBAAgB;yCACjB,CAAC,IAAI,CAAC,MAAM,CAAC;qCACf,CAAC;gCACJ,CAAC,CAAC;gCACF,eAAe,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE;gCACzD,SAAS,EAAE;oCACT,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;oCAC5B,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;iCAC3B;6BACF;4BACH,CAAC,CAAC,EAAE,CACP;wBACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC;wBAChG,6BAA6B,EAAE,EAAE;qBAClC;iBACF;aACF;SACF,EACD,IAAI,CACL,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAC9D,IAAI,EACJ;YACE,QAAQ;YACR,IAAI,EAAE;gBACJ,YAAY,EAAE,CAAC;gBACf,QAAQ,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE;aAC3C;SACF,EACD,IAAI,CACL,CAAC;QAEF,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../lib/netbird/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ #!/bin/sh
2
+
3
+ IFACE="${1}"
4
+ CIDR="${2}"
5
+
6
+ apk --quiet --no-cache add nftables
7
+
8
+ while true; do
9
+ input_handle=$(nft -a -n list ruleset 2>/dev/null | grep "iifname \"${IFACE}\" ip saddr ${CIDR} ip daddr ${CIDR} jump netbird-acl-input-rules" | awk '{print $NF}')
10
+ if [ -z "${input_handle}" ]; then
11
+ nft add rule netbird netbird-acl-input-filter position 8 iifname "${IFACE}" ip saddr "${CIDR}" ip daddr "${CIDR}" jump netbird-acl-input-rules
12
+ fi
13
+
14
+ output_handle=$(nft -a -n list ruleset 2>/dev/null | grep "oifname \"${IFACE}\" ip saddr ${CIDR} ip daddr ${CIDR} jump netbird-acl-output-rules" | awk '{print $NF}')
15
+ if [ -z "${output_handle}" ]; then
16
+ nft add rule netbird netbird-acl-output-filter position 13 oifname "${IFACE}" ip saddr "${CIDR}" ip daddr "${CIDR}" jump netbird-acl-output-rules
17
+ fi
18
+
19
+ sleep 10
20
+ done
@@ -24,9 +24,16 @@ export interface ManagementArgs {
24
24
  [key: string]: pulumi.Input<string>;
25
25
  }>;
26
26
  version?: pulumi.Input<string>;
27
+ coturnIPs?: pulumi.Input<pulumi.Input<string>[]>;
27
28
  protect?: boolean;
28
29
  }
29
30
  export declare class Management extends ComponentResource {
31
+ static readonly coturnPort = 3478;
32
+ static readonly coturnPortAlt = 3479;
33
+ static readonly coturnPortTLS = 5349;
34
+ static readonly coturnPortTLSAlt = 5350;
35
+ static readonly coturnPortMin = 49152;
36
+ static readonly coturnPortMax = 65535;
30
37
  private readonly turnUsername;
31
38
  private readonly turnPassword;
32
39
  private readonly dataEncryptionKey;
@@ -6,6 +6,12 @@ import * as kubernetes from "../kubernetes/index.js";
6
6
  import * as traefik from "../traefik/index.js";
7
7
  import * as node from "../node/index.js";
8
8
  export class Management extends ComponentResource {
9
+ static coturnPort = 3478;
10
+ static coturnPortAlt = 3479;
11
+ static coturnPortTLS = 5349;
12
+ static coturnPortTLSAlt = 5350;
13
+ static coturnPortMin = 49152;
14
+ static coturnPortMax = 65535;
9
15
  turnUsername;
10
16
  turnPassword;
11
17
  dataEncryptionKey;
@@ -134,23 +140,33 @@ export class Management extends ComponentResource {
134
140
  metadata: coturnMetadata,
135
141
  stringData: {
136
142
  "turnserver.conf": pulumi
137
- .all([args.relayHostname, this.turnUsername, this.turnPassword])
138
- .apply(([relayHostname, turnUsername, turnPassword]) => [
139
- "listening-port=3478",
140
- "tls-listening-port=5349",
141
- "min-port=49152",
142
- "max-port=65535",
143
- "fingerprint",
144
- "lt-cred-mech",
145
- `user=${turnUsername}:${turnPassword}`,
146
- `realm=${relayHostname}`,
147
- "cert=/etc/coturn/certs/cert.pem",
148
- "pkey=/etc/coturn/private/privkey.pem",
149
- "log-file=stdout",
150
- "no-software-attribute",
151
- `pidfile="/var/tmp/turnserver.pid"`,
152
- "no-cli",
153
- ].join("\n")),
143
+ .all([args.relayHostname, this.turnUsername, this.turnPassword, args.coturnIPs])
144
+ .apply(([relayHostname, turnUsername, turnPassword, coturnIPs]) => pulumi.all(coturnIPs ?? []).apply((coturnIPs) => {
145
+ const config = [
146
+ `listening-port=${Management.coturnPort}`,
147
+ `alt-listening-port=${Management.coturnPortAlt}`,
148
+ `tls-listening-port=${Management.coturnPortTLS}`,
149
+ `alt-tls-listening-port=${Management.coturnPortTLSAlt}`,
150
+ `min-port=${Management.coturnPortMin}`,
151
+ `max-port=${Management.coturnPortMax}`,
152
+ "fingerprint",
153
+ "lt-cred-mech",
154
+ `user=${turnUsername}:${turnPassword}`,
155
+ `realm=${relayHostname}`,
156
+ "cert=/etc/coturn/certs/cert.pem",
157
+ "pkey=/etc/coturn/private/privkey.pem",
158
+ "log-file=stdout",
159
+ "no-software-attribute",
160
+ `pidfile="/var/tmp/turnserver.pid"`,
161
+ "no-cli",
162
+ "no-tls",
163
+ ];
164
+ for (const coturnIP of coturnIPs) {
165
+ config.push(`listening-ip=${coturnIP}`);
166
+ config.push(`relay-ip=${coturnIP}`);
167
+ }
168
+ return config.join("\n");
169
+ })),
154
170
  },
155
171
  }, k8sOpts);
156
172
  this.coturnDaemonSet = new k8s.apps.v1.DaemonSet(`${name}-coturn`, {
@@ -171,10 +187,12 @@ export class Management extends ComponentResource {
171
187
  name: "coturn",
172
188
  image: "coturn/coturn:latest",
173
189
  imagePullPolicy: "Always",
174
- args: ["-c /etc/turnserver.conf"],
190
+ args: ["-c", "/etc/turnserver.conf"],
175
191
  ports: [
176
- { name: "turn", protocol: "UDP", containerPort: 3478 },
177
- { name: "turn-tls", protocol: "UDP", containerPort: 5349 },
192
+ { name: "turn", protocol: "UDP", containerPort: Management.coturnPort },
193
+ { name: "turn-alt", protocol: "UDP", containerPort: Management.coturnPortAlt },
194
+ { name: "turn-tls", protocol: "UDP", containerPort: Management.coturnPortTLS },
195
+ { name: "turn-tls-alt", protocol: "UDP", containerPort: Management.coturnPortTLSAlt },
178
196
  ],
179
197
  volumeMounts: [
180
198
  { name: "config", mountPath: "/etc/turnserver.conf", subPath: "turnserver.conf", readOnly: true },
@@ -203,8 +221,10 @@ export class Management extends ComponentResource {
203
221
  spec: {
204
222
  selector: coturnMetadata.labels,
205
223
  ports: [
206
- { name: "turn", protocol: "UDP", port: 3478, targetPort: "turn" },
207
- { name: "turn-tls", protocol: "UDP", port: 5349, targetPort: "turn-tls" },
224
+ { name: "turn", protocol: "UDP", port: Management.coturnPort, targetPort: "turn" },
225
+ { name: "turn-alt", protocol: "UDP", port: Management.coturnPortAlt, targetPort: "turn-atl" },
226
+ { name: "turn-tls", protocol: "UDP", port: Management.coturnPortTLS, targetPort: "turn-tls" },
227
+ { name: "turn-tls-alt", protocol: "UDP", port: Management.coturnPortTLSAlt, targetPort: "turn-tls-alt" },
208
228
  ],
209
229
  },
210
230
  }, { ...k8sOpts, dependsOn: [this.coturnDaemonSet] });
@@ -230,10 +250,15 @@ export class Management extends ComponentResource {
230
250
  this.dataEncryptionKey,
231
251
  ])
232
252
  .apply(([idp, hostname, relayHostname, turnUsername, turnPassword, dataEncryptionKey]) => JSON.stringify({
233
- Stuns: [{ Proto: "udp", URI: `stun:${relayHostname}:3478` }],
253
+ Stuns: [{ Proto: "udp", URI: `stun:${relayHostname}:${Management.coturnPort}` }],
234
254
  TURNConfig: {
235
255
  Turns: [
236
- { Proto: "udp", URI: `stun:${relayHostname}:3478`, Username: turnUsername, Password: turnPassword },
256
+ {
257
+ Proto: "udp",
258
+ URI: `stun:${relayHostname}:${Management.coturnPort}`,
259
+ Username: turnUsername,
260
+ Password: turnPassword,
261
+ },
237
262
  ],
238
263
  TimeBasedCredentials: false,
239
264
  },