487 Commits

Author SHA1 Message Date
f248087e80 update 2025-03-21 05:12:52 -05:00
cd8f0e32d7 update 2025-03-21 05:07:24 -05:00
d9e448249e update 2025-03-21 05:05:26 -05:00
8949f640b7 update 2025-03-21 05:03:43 -05:00
9514e7c27c update 2025-03-21 05:01:31 -05:00
698daaab4c update 2025-03-21 04:49:13 -05:00
b0a9deb35f update 2025-03-20 06:27:21 -05:00
e5007648b6 update 2025-03-20 06:25:50 -05:00
5efe416248 update 2025-03-20 06:21:53 -05:00
22e9d5a08e update 2025-03-20 06:20:32 -05:00
336880a9b0 update 2025-03-20 06:18:45 -05:00
9addbbde4b update 2025-03-20 06:13:38 -05:00
6678b38ad9 update 2025-03-20 06:12:38 -05:00
e4e0132735 update 2025-03-20 06:05:54 -05:00
48077bdce5 update 2025-03-20 06:05:33 -05:00
2fda7414f2 update 2025-03-20 06:00:05 -05:00
cf1ffc1c97 update 2025-03-20 05:56:25 -05:00
f0252b7791 update 2025-03-20 05:50:17 -05:00
6caf043848 update 2025-03-20 05:49:06 -05:00
07577ce836 update 2025-03-20 05:47:29 -05:00
a88d9cf29c update 2025-03-20 05:43:28 -05:00
64d8e1d9ef update 2025-03-20 05:42:41 -05:00
65b6f1b63b update 2025-03-20 05:32:43 -05:00
57d47c8513 update 2025-03-20 05:27:52 -05:00
b1e4fc4ee3 updat 2025-03-20 05:18:45 -05:00
ead660ccc9 update 2025-03-20 05:17:42 -05:00
296c837bde update 2025-03-20 05:16:37 -05:00
1e328b5644 update 2025-03-20 05:11:45 -05:00
6cd0785009 update 2025-03-20 05:10:35 -05:00
1160ba317a update 2025-03-20 04:51:34 -05:00
04e8cd9137 update 2025-03-20 04:47:26 -05:00
409d39dcc5 update 2025-03-20 04:46:44 -05:00
c338eb860c update 2025-03-19 06:31:17 -05:00
0d72b08ff2 update 2025-03-19 06:18:36 -05:00
1366c2e6b1 update 2025-03-19 05:32:22 -05:00
2f7b994044 update 2025-03-19 05:31:43 -05:00
64c978a14f update 2025-03-19 05:30:45 -05:00
f475828569 update 2025-03-19 05:28:58 -05:00
843f050195 update 2025-03-19 05:26:29 -05:00
c24dcdfe2c update 2025-03-19 05:22:46 -05:00
28ddc5ccea update 2025-03-19 05:13:25 -05:00
e3857454b7 update 2025-03-19 05:11:50 -05:00
e6fa7ebb78 update 2025-03-19 05:04:06 -05:00
55341ba0d6 update 2025-03-19 05:01:38 -05:00
e7c2605097 update 2025-03-19 05:00:50 -05:00
b682553b27 update 2025-03-19 04:58:39 -05:00
47125c5d68 update 2025-03-19 04:57:53 -05:00
c0b2f5ede3 update 2025-03-19 04:55:15 -05:00
f1d96f60c1 update 2025-03-19 04:53:20 -05:00
78796fce97 update 2025-03-19 04:52:06 -05:00
32dd761dc4 update 2025-03-19 04:51:22 -05:00
144d9d547a update 2025-03-19 04:46:58 -05:00
f7434b0810 update 2025-03-18 06:38:22 -05:00
a24fc8a605 update 2025-03-18 06:34:13 -05:00
e6c9a0b9ed update 2025-03-18 06:31:01 -05:00
c6d963d635 update 2025-03-18 06:25:39 -05:00
399fadef3f update 2025-03-18 06:24:54 -05:00
9165bd44a9 update 2025-03-18 06:24:03 -05:00
093bf40127 update 2025-03-18 06:21:58 -05:00
d217345a25 update 2025-03-18 06:20:22 -05:00
3b69fdcf8f update 2025-03-18 06:19:13 -05:00
513298f3be update 2025-03-18 06:16:52 -05:00
4c4f67525d update 2025-03-18 06:15:33 -05:00
39fae09f58 update 2025-03-18 06:15:05 -05:00
22aad9eb54 update 2025-03-18 05:58:53 -05:00
2450688ab8 update 2025-03-18 05:56:39 -05:00
d73f626ae5 update 2025-03-18 05:55:10 -05:00
04e76a3e90 update 2025-03-18 05:06:45 -05:00
2e45f7b899 update 2025-03-17 06:17:20 -05:00
7f3961964d update 2025-03-17 05:35:46 -05:00
813e8a8eb3 update 2025-03-17 05:26:24 -05:00
b2a369b479 update 2025-03-17 05:24:13 -05:00
0907c0fdc8 update 2025-03-17 05:20:34 -05:00
a50b3ca1d4 update 2025-03-17 05:13:50 -05:00
9d45ebf641 update 2025-03-17 05:00:00 -05:00
961e332e71 update 2025-03-17 04:59:19 -05:00
8d63bc4ea9 update 2025-03-16 21:32:29 -05:00
fa64786dcf update 2025-03-16 21:29:37 -05:00
3590ea3840 update 2025-03-16 21:22:07 -05:00
ce6b64840e update 2025-03-16 21:15:28 -05:00
f68327747a update 2025-03-16 13:35:16 -05:00
2df7ebbf4c update 2025-03-16 13:33:00 -05:00
1c63f8028a update 2025-03-16 13:27:48 -05:00
12f0ca2388 update 2025-03-16 13:24:13 -05:00
a833b3f921 update 2025-03-14 05:25:41 -05:00
ace5603daa update 2025-03-14 05:23:13 -05:00
0fede19fdf update 2025-03-14 05:10:24 -05:00
59c2db2c0f update 2025-03-14 05:09:53 -05:00
158ff3c97d update 2025-03-14 05:07:06 -05:00
700f186474 update storage 2025-03-13 14:47:27 -05:00
b35fe6bc66 update 2025-03-11 06:21:43 -05:00
52382885b0 update 2025-03-11 05:46:55 -05:00
8452f0ee77 update 2025-03-11 05:18:52 -05:00
3cf69d0883 update 2025-03-11 05:15:52 -05:00
3c65f2e76a update 2025-03-10 05:53:53 -05:00
6ef8bee912 update 2025-03-10 05:50:09 -05:00
839f9d1d7e update 2025-03-10 05:49:26 -05:00
8f2086854d update 2025-03-10 05:47:15 -05:00
70a2b51314 update 2025-03-10 05:37:56 -05:00
5900798f5f update 2025-03-10 05:36:31 -05:00
a81951925b update 2025-03-10 05:17:31 -05:00
5cccda199f update 2025-03-10 05:14:50 -05:00
ab91170043 update 2025-03-10 05:09:28 -05:00
b1f85151d8 update 2025-03-09 09:32:06 -05:00
44008f5f43 update 2025-03-09 09:06:39 -05:00
91e8082e00 update 2025-03-09 09:00:49 -05:00
b743ca035a update 2025-03-09 08:59:25 -05:00
3392892b51 update 2025-03-09 08:34:34 -05:00
566f722c89 update 2025-03-08 14:57:56 -06:00
93725b3f55 update 2025-03-08 14:56:11 -06:00
f6bd6425a1 update 2025-03-05 06:28:07 -06:00
e2dabca525 update 2025-03-05 06:27:02 -06:00
77b5b9033e update 2025-03-05 06:26:22 -06:00
9a28ec8af2 update 2025-03-05 06:24:10 -06:00
26c56ff358 update 2025-03-05 06:22:29 -06:00
26c910fa68 update 2025-03-05 06:16:00 -06:00
0cffd50693 update 2025-03-05 06:15:23 -06:00
4f51496342 update 2025-03-05 05:55:56 -06:00
2bfdb75705 update 2025-03-05 05:49:13 -06:00
2ad04019a8 update 2025-03-05 05:03:41 -06:00
5635fe8a06 update 2025-03-04 06:33:37 -06:00
bc56685869 update 2025-03-04 06:31:41 -06:00
8a7930b7c4 update 2025-03-04 06:29:58 -06:00
6e558c52b4 update 2025-03-04 06:25:25 -06:00
5bdee88d29 update 2025-03-04 06:20:56 -06:00
092ec28ea9 update 2025-03-04 06:14:21 -06:00
35d002cb3b update 2025-03-04 06:09:03 -06:00
90ebb30286 update 2025-03-04 06:07:48 -06:00
29bf3e7c92 update 2025-03-04 06:02:22 -06:00
6f2a3d014e update 2025-03-04 05:51:35 -06:00
25082c9e4d update 2025-03-04 05:49:03 -06:00
8f282427b7 update 2025-03-04 05:47:12 -06:00
d06f96c3ad update 2025-03-04 05:46:11 -06:00
2ffacfd4b9 update 2025-03-04 05:45:43 -06:00
59d5fb98df update 2025-03-04 05:44:11 -06:00
d6b3091454 update 2025-03-04 05:38:10 -06:00
2e798f2a06 update 2025-03-04 05:35:48 -06:00
36685f382d update 2025-03-04 05:32:02 -06:00
e0f4cf206d update 2025-03-04 05:28:38 -06:00
a314f60d38 update 2025-03-04 05:23:48 -06:00
d180197086 update 2025-03-04 05:19:42 -06:00
d724b929da update 2025-03-04 05:19:17 -06:00
53313df223 update 2025-03-04 05:18:47 -06:00
d6427b326d update 2025-03-04 05:18:00 -06:00
d39ab5d5a3 update 2025-03-04 05:14:17 -06:00
947835171c update 2025-03-04 05:12:59 -06:00
f4f58bfedc update 2025-03-04 05:11:26 -06:00
f9b1ae184d update 2025-03-04 05:04:13 -06:00
d273f21505 update 2025-03-04 04:58:29 -06:00
041cf0933d update 2025-03-04 04:57:38 -06:00
bdf93b5a06 update 2025-03-04 04:57:12 -06:00
3b65e94019 update 2025-03-04 04:54:30 -06:00
fcc9cb0e63 update 2025-03-04 04:50:58 -06:00
9e44ebc46c update 2025-03-04 04:48:38 -06:00
2ba68c7507 update 2025-03-03 06:11:46 -06:00
06349d5f0e update 2025-03-03 05:45:22 -06:00
b22eda0a0a update 2025-03-03 05:35:02 -06:00
d0ea0ff250 update 2025-03-03 05:33:40 -06:00
58feb47a9d update 2025-03-03 05:29:21 -06:00
10087d55f7 update 2025-03-03 05:15:50 -06:00
b6b17c5ced update 2025-03-03 05:15:06 -06:00
733b933a00 update 2025-03-03 05:14:30 -06:00
933cc9dadd update 2025-03-03 05:10:30 -06:00
a92b9cda21 update 2025-03-03 05:09:42 -06:00
ed3ecba7df update 2025-02-28 06:07:32 -06:00
2b9947223b update 2025-02-28 05:53:29 -06:00
c57cfc7d5a update 2025-02-28 05:43:07 -06:00
61dcae2e97 update 2025-02-28 05:01:56 -06:00
acbaf37e8a update 2025-02-28 04:58:22 -06:00
6344b58687 update 2025-02-28 04:51:47 -06:00
0742770dbe update 2025-02-28 04:47:44 -06:00
8b5342c168 update 2025-02-28 04:44:41 -06:00
b199c8f6ed update 2025-02-27 06:00:55 -06:00
a2706177c6 update 2025-02-27 05:55:04 -06:00
207cc5f7c8 update 2025-02-27 05:49:00 -06:00
9dbe6dc445 update 2025-02-27 05:44:09 -06:00
b2ad83f1ba update 2025-02-27 05:41:41 -06:00
02c9ab3486 update 2025-02-27 05:33:26 -06:00
0a18126a39 update 2025-02-27 05:32:45 -06:00
3dc3dbbaba update 2025-02-27 05:28:32 -06:00
820147d04c update 2025-02-27 05:04:49 -06:00
529a38d2e5 update 2025-02-27 04:59:00 -06:00
990f93ff26 update 2025-02-27 04:56:05 -06:00
01904f7ca7 update 2025-02-26 06:07:05 -06:00
a8040986d7 update 2025-02-26 06:06:22 -06:00
3e7d6961fc update 2025-02-26 06:04:50 -06:00
ded9d4b18c update 2025-02-26 05:59:26 -06:00
adb83da550 update 2025-02-26 05:57:40 -06:00
5a65a188be update 2025-02-26 05:50:50 -06:00
3b722331c9 update 2025-02-26 05:49:47 -06:00
4e497f0945 update 2025-02-26 05:47:48 -06:00
bcb090a117 update 2025-02-26 05:46:23 -06:00
e260f2c0c8 update 2025-02-26 05:44:46 -06:00
6a04c3dd85 update 2025-02-26 05:41:25 -06:00
ff9ed9cb65 update 2025-02-26 05:38:19 -06:00
eb94cf66d6 update 2025-02-26 05:27:51 -06:00
a9b6632a15 update 2025-02-26 05:25:31 -06:00
b9b5046e8b update 2025-02-26 05:23:31 -06:00
b829e8303c update 2025-02-26 05:09:02 -06:00
8510dbe766 update 2025-02-26 05:05:11 -06:00
e9426a2f77 update 2025-02-26 05:00:34 -06:00
daa528630a update 2025-02-26 05:00:06 -06:00
a15a57af34 update 2025-02-26 04:58:20 -06:00
7f75de1fe1 update 2025-02-26 04:51:50 -06:00
ba79286ce6 add cert manager to dmz 2025-02-26 04:49:40 -06:00
ed3d4941b3 update 2025-02-25 06:27:03 -06:00
1ee6edb43d update 2025-02-25 06:23:01 -06:00
5ad8140324 update 2025-02-25 06:22:11 -06:00
04d21b3909 update 2025-02-25 06:21:11 -06:00
49a46eba48 update 2025-02-25 06:17:50 -06:00
de7c9b5c13 update 2025-02-25 06:16:17 -06:00
62097968d7 update 2025-02-25 05:40:16 -06:00
cb70aecd1d update 2025-02-25 05:31:46 -06:00
ee464ed40f update 2025-02-25 05:28:31 -06:00
29fbf7ec7b update 2025-02-25 05:10:35 -06:00
dc075d4247 update 2025-02-25 05:09:32 -06:00
3c8bd3ffd0 update 2025-02-24 06:21:11 -06:00
b549c9cfb2 update 2025-02-24 06:12:36 -06:00
701f6d1f96 update 2025-02-24 05:54:08 -06:00
2af0e7a3ae update 2025-02-24 05:52:49 -06:00
fc2d1e8a1a update 2025-02-24 05:20:54 -06:00
d53bb7b37c update 2025-02-24 05:00:01 -06:00
8f97c4cd33 update dns 2025-02-23 12:38:27 -06:00
354a9c63a9 update 2025-02-19 04:48:16 -06:00
0e5aa931f6 update 2025-02-18 05:04:20 -06:00
94554fe6fa update 2025-02-18 04:57:23 -06:00
628793d5df remove postgres to rebuild 2025-02-18 04:55:34 -06:00
7443e025e0 update 2025-02-16 20:37:24 -06:00
0859efa0c7 add ansible base role 2025-02-16 20:29:30 -06:00
e20429f6a7 remove postgres 2025-02-16 17:37:31 -06:00
7b65ae0599 update 2025-02-16 17:29:44 -06:00
95bfaf4a70 add authentik 2025-02-16 17:28:09 -06:00
37fdb0a1ac update 2025-02-16 13:06:08 -06:00
ca44e683f6 update 2025-02-16 13:02:18 -06:00
96f65d5322 Add serial 2025-02-15 13:03:53 -06:00
d182b00e75 Add serial 2025-02-15 13:01:59 -06:00
004d2d5155 Add serial 2025-02-15 12:59:54 -06:00
156a75c0a0 update proxmox 2025-02-15 06:40:10 -06:00
4645e52f2a Move pfsense to unifi 2025-02-14 06:27:56 -06:00
4084517dd7 Add terraform for infra 2025-02-14 05:11:19 -06:00
1da4a9e23b Add terraform for infra 2025-02-14 05:00:28 -06:00
48dca828a9 Add terraform for infra 2025-02-13 06:38:43 -06:00
5c2169d138 Add terraform for infra 2025-02-13 06:21:03 -06:00
7b5b1b8aa1 Add terraform for infra 2025-02-13 06:18:36 -06:00
0dab6f4f33 Add terraform for infra 2025-02-13 06:15:07 -06:00
e14f7ac627 Add terraform for infra 2025-02-13 06:13:26 -06:00
53c4949927 Add terraform for infra 2025-02-13 06:06:23 -06:00
dade7fd152 update 2025-02-12 19:48:06 -06:00
c3fd5e1894 update 2025-02-12 15:24:25 -06:00
1de9ef55e2 update 2025-02-12 15:22:06 -06:00
4ee9c3da06 update 2025-02-12 15:20:47 -06:00
3e4a682e7b update 2025-02-12 15:17:37 -06:00
a66cdf40e3 update 2025-02-12 06:14:46 -06:00
6cd37b4bd0 update 2025-02-12 06:08:45 -06:00
c91fe325af update 2025-02-12 06:06:04 -06:00
848096364f update 2025-02-12 06:05:11 -06:00
a891c0ab20 update 2025-02-12 06:04:20 -06:00
2f202e9993 update 2025-02-12 05:52:17 -06:00
fad26e6e13 update 2025-02-12 05:43:28 -06:00
7a56cca0ee update 2025-02-12 05:41:26 -06:00
b05b5345ed update 2025-02-12 05:37:44 -06:00
b94d180811 update 2025-02-12 05:36:32 -06:00
80316602d5 update 2025-02-12 05:35:18 -06:00
4a0b91f737 update 2025-02-12 05:27:59 -06:00
bd45075112 update 2025-02-12 05:18:31 -06:00
664bd5b324 update 2025-02-12 05:13:12 -06:00
7d6c60117a update 2025-02-12 05:07:41 -06:00
fa66a33b41 update 2025-02-12 05:02:31 -06:00
fa6ca7c7b1 update 2025-02-12 04:57:45 -06:00
d550eba84d update 2025-02-11 04:46:05 -06:00
5d5fbd7fac update 2025-02-11 04:45:24 -06:00
9003f7f475 update 2025-02-11 04:43:51 -06:00
1641178875 update 2025-02-10 13:24:29 -06:00
03befcb0f8 update 2025-02-09 07:40:44 -06:00
1019a69c77 update 2025-02-09 06:48:31 -06:00
aabd349d60 update 2025-02-09 06:47:35 -06:00
786c034ef6 update 2025-02-09 06:46:19 -06:00
435533502b update 2025-02-09 06:44:29 -06:00
4f74f8d575 update 2025-02-09 06:26:53 -06:00
5ad335cc1e update 2025-02-09 06:22:07 -06:00
a6f6f38769 update 2025-02-09 06:18:31 -06:00
23edb4e2cc update 2025-02-09 06:14:44 -06:00
7f774c7dbd update 2025-02-09 06:14:04 -06:00
f3d914e308 update 2025-02-08 19:26:49 -06:00
14da96a2a9 update 2025-02-08 19:03:58 -06:00
f87e727b40 update 2025-02-08 19:02:07 -06:00
31437ce7bf update 2025-02-03 06:01:54 -06:00
6830296715 update 2025-02-03 06:01:01 -06:00
0ee046914a update 2025-02-03 06:00:28 -06:00
27cadcf8ce update 2025-02-03 05:56:30 -06:00
60c66fa3f3 update 2025-02-03 05:39:59 -06:00
f7f3719a74 update 2025-02-03 05:37:44 -06:00
0642f11a1a update 2025-02-03 05:36:54 -06:00
5a0a17b33f update 2025-01-28 05:51:49 -06:00
e4a429d720 update 2025-01-28 05:46:04 -06:00
2fda03d34e update 2025-01-28 04:54:07 -06:00
64396cd6e0 update 2025-01-28 04:49:28 -06:00
8eb26560e0 update 2025-01-27 05:53:46 -06:00
13e648043e update 2025-01-27 05:52:46 -06:00
d48a2c406e update 2025-01-27 05:49:49 -06:00
32bb9882e2 update 2025-01-27 05:49:38 -06:00
080cd1b3c1 update 2025-01-27 05:48:19 -06:00
d69480189b update 2025-01-27 05:45:44 -06:00
4483c0a657 update 2025-01-27 05:44:50 -06:00
edbfe65ce1 update 2025-01-27 05:43:10 -06:00
7cae2987a4 update 2025-01-27 05:40:07 -06:00
f885ed4329 update 2025-01-27 05:33:07 -06:00
d8ea4a907f update 2025-01-27 05:28:59 -06:00
ad18535ce7 update 2025-01-27 05:27:14 -06:00
f978937455 update 2025-01-27 05:26:32 -06:00
142254c94a update 2025-01-27 05:16:19 -06:00
81ed14c3ee update 2025-01-27 05:14:13 -06:00
950d5f7950 update 2025-01-27 05:12:47 -06:00
23356d2d3e update 2025-01-27 05:05:59 -06:00
2de99e6812 update 2025-01-27 04:55:55 -06:00
058d4c943f update 2025-01-24 05:33:05 -06:00
7a3567144f update 2025-01-24 05:28:37 -06:00
9276abe7cc update 2025-01-24 05:06:33 -06:00
c5077c097d update 2025-01-24 04:56:01 -06:00
cdd9419cff update 2025-01-23 15:36:53 -06:00
f1333aa0ee update 2025-01-23 15:36:31 -06:00
f9096df658 update 2025-01-23 06:05:24 -06:00
09d140bb64 update 2025-01-23 05:56:26 -06:00
91001c230e update 2025-01-23 05:55:55 -06:00
4087eb7aaf update 2025-01-23 05:13:24 -06:00
37640bd420 update 2025-01-22 06:26:29 -06:00
7588fa3279 update 2025-01-22 06:23:42 -06:00
08ca20b874 update 2025-01-22 06:22:56 -06:00
547ef2ffbc update 2025-01-22 06:21:04 -06:00
b4f701c084 update 2025-01-22 06:12:57 -06:00
a47fe24d51 update 2025-01-22 05:43:12 -06:00
881de48183 move back to HA 2025-01-22 05:42:15 -06:00
61eb2cb68e update 2025-01-22 05:41:34 -06:00
e17ffa9f3f update 2025-01-22 05:40:34 -06:00
b50e31d42d update 2025-01-22 05:39:28 -06:00
622114aace update 2025-01-22 05:38:10 -06:00
2c8321d9b1 update 2025-01-21 05:51:57 -06:00
985a291936 update 2025-01-21 05:42:08 -06:00
1490ef6c5e update 2025-01-21 05:40:38 -06:00
b45a04349e update 2025-01-21 05:36:24 -06:00
685dcde9c3 update 2025-01-21 05:12:47 -06:00
d18d64f0eb update 2025-01-21 05:02:56 -06:00
c3110978c7 update 2025-01-21 05:01:41 -06:00
03d69a40a0 update 2025-01-21 05:00:25 -06:00
a398e63650 update 2025-01-21 04:58:11 -06:00
5acce59cd1 update 2025-01-20 05:03:31 -06:00
9899459652 update 2025-01-20 05:01:13 -06:00
1c4624104a update 2025-01-19 13:51:52 -06:00
709def73de update 2025-01-19 13:25:12 -06:00
f0fd21ec86 update 2025-01-19 13:15:32 -06:00
7a6313f716 update 2025-01-19 13:12:27 -06:00
7dc22c2051 update 2025-01-19 13:10:58 -06:00
b3c020d810 update 2025-01-19 09:33:00 -06:00
ba19811491 update 2025-01-19 09:26:11 -06:00
c956f88f43 update 2025-01-19 09:07:29 -06:00
8e65ceca52 update 2025-01-19 09:03:53 -06:00
535a47a8f2 update 2025-01-19 08:53:43 -06:00
a9789b1221 update 2025-01-19 08:51:53 -06:00
87dd7d3da0 update 2025-01-19 08:47:39 -06:00
82ad8815f2 update 2025-01-16 06:00:29 -06:00
5089d01c06 update 2025-01-16 05:59:15 -06:00
f8f5f27cb0 add ingress 2025-01-16 05:55:52 -06:00
4c2e87944c update cert 2025-01-16 05:33:47 -06:00
b6fa1079b6 update 2025-01-15 06:15:44 -06:00
f5ceac3ec1 add vault 2025-01-15 06:00:30 -06:00
1966f141dc update config 2025-01-15 05:47:05 -06:00
f8d0229580 add metallb 2025-01-15 05:46:40 -06:00
e36610cd49 update 2025-01-15 05:42:45 -06:00
0c27dd360c add traefik to infra 2025-01-15 05:41:59 -06:00
user
e7c28dde45 update 2025-01-15 05:18:13 -06:00
user
41cc7889af ujpdate 2025-01-15 05:15:41 -06:00
user
f8899caf78 update 2025-01-15 05:12:37 -06:00
user
b47edf477b Add infra 2025-01-15 04:50:13 -06:00
54a82177f2 Update file deployment.yaml 2025-01-14 21:43:53 +00:00
f3684f197c Update file values.yaml 2025-01-11 14:41:37 +00:00
5f693d0020 Update file values.yaml 2025-01-11 14:40:35 +00:00
14a659df5b Update file values.yaml 2025-01-11 14:30:36 +00:00
46724e763c Update file s3.yaml 2025-01-11 14:27:01 +00:00
33c5d25271 remove top level files 2025-01-07 04:45:49 -06:00
99006a8900 Update folder location 2025-01-06 05:18:54 -06:00
a42b3e785d Update folder location 2025-01-06 05:14:52 -06:00
c39f20e371 Update folder location 2025-01-06 05:01:00 -06:00
dc324a2d8b Update whitelist 2025-01-04 07:17:43 -06:00
2d4d3773b7 Update ollama 2024-12-19 05:00:42 -06:00
54e12aa8c1 Update ollama auth 2024-12-15 08:04:32 -06:00
47d4e5015e Update ollama auth 2024-12-15 08:01:14 -06:00
e60030016e Update file ollama.yaml 2024-12-13 10:52:57 +00:00
6645dd77f6 update IP range 2024-11-17 10:24:23 -06:00
f1f8a9e837 update IP range 2024-11-17 10:14:22 -06:00
47214c5a93 Update file values.yaml 2024-10-15 11:12:18 +00:00
a1b05d6f8a Update chart version 2024-09-30 04:47:53 -05:00
8ca00e2715 Update chart version 2024-09-30 04:45:20 -05:00
7cbe7932f1 Update chart version 2024-09-30 04:41:20 -05:00
97d73b36c4 Update chart version 2024-09-29 08:56:15 -05:00
679742ab45 Update chart version 2024-09-29 08:55:44 -05:00
9b1680cfc8 Update chart version 2024-09-29 08:54:11 -05:00
dd3ca7c9a4 Update chart version 2024-09-29 08:51:08 -05:00
4a67df78b3 Update chart version 2024-09-29 08:45:48 -05:00
dde4eac238 Update chart version 2024-09-29 08:43:25 -05:00
f9987ac705 Update chart version 2024-09-29 08:43:01 -05:00
6705352a10 Update chart version 2024-09-29 08:41:06 -05:00
599e86e1a9 Update chart version 2024-09-29 08:37:42 -05:00
4826c5beb6 Update chart version 2024-09-29 08:33:29 -05:00
1284e2ec60 Update chart version 2024-09-29 08:28:14 -05:00
7f6e182084 Update chart version 2024-09-29 07:50:40 -05:00
a565952e0c Update chart version 2024-09-29 07:48:50 -05:00
f64bdfbedd Update chart version 2024-09-29 07:39:11 -05:00
e6a8aa74b4 Update chart version 2024-09-29 07:34:52 -05:00
b1c45f939b Update chart version 2024-09-29 07:29:39 -05:00
3bfec1450f Update chart version 2024-09-29 07:23:46 -05:00
d5224c0c7f Update chart version 2024-09-29 07:20:05 -05:00
4e37bfb8dc Update chart version 2024-09-29 07:13:09 -05:00
45ae3523b9 Update chart version 2024-09-29 06:43:58 -05:00
1151680f65 Update chart version 2024-09-29 06:42:16 -05:00
1aefb8163b Update chart version 2024-09-29 06:39:44 -05:00
e935822058 Update chart version 2024-09-29 06:35:39 -05:00
49b23b1788 Update chart version 2024-09-29 06:22:50 -05:00
bd2def6d46 Update chart version 2024-09-29 06:18:47 -05:00
10fcd43274 Update chart version 2024-09-13 06:23:48 -05:00
126c6e6f45 Update chart version 2024-09-13 06:20:00 -05:00
10ce90a460 Update chart version 2024-09-13 06:17:56 -05:00
c3cd2c0b8b Update chart version 2024-09-13 06:14:44 -05:00
8b74b2efb6 Update chart version 2024-09-13 06:10:15 -05:00
eecf949f86 Update worker count 2024-09-10 04:48:15 -05:00
2b951b2814 update authentik version 2024-09-10 04:43:57 -05:00
a1293abaf6 update 2024-08-31 07:40:14 -05:00
5781c6ddda update 2024-08-31 07:23:47 -05:00
42fc48bb27 update 2024-08-31 07:22:25 -05:00
0f908a1460 update 2024-08-31 07:19:33 -05:00
1febc6915e update 2024-08-31 07:14:08 -05:00
a99e0649dd update 2024-08-31 07:11:20 -05:00
d28f17120b upupdate 2024-08-30 05:08:33 -05:00
44d099ad9e update 2024-08-30 05:04:57 -05:00
5c866c2eb7 update 2024-08-30 05:04:25 -05:00
216cece298 update 2024-08-30 05:03:40 -05:00
f16da3d3a8 update resources 2024-08-30 04:58:02 -05:00
f12b7aa532 update resource 2024-08-30 04:56:01 -05:00
8ec254f59c enable autoscaller 2024-08-30 04:52:29 -05:00
33fd621ec8 add resource limits 2024-08-30 04:51:35 -05:00
89b8364fe5 add resource limits 2024-08-30 04:49:03 -05:00
52038a7585 update 2024-08-29 05:04:25 -05:00
885ab5e3d7 update 2024-08-29 05:02:08 -05:00
7843ae7c29 update 2024-08-29 04:57:40 -05:00
e2d1e01708 update 2024-08-29 04:55:28 -05:00
e8cafed885 update 2024-08-29 04:50:55 -05:00
62b7efad89 update 2024-08-27 04:58:07 -05:00
47ddf2fd28 update 2024-08-25 06:32:15 -05:00
31b689d5fe update 2024-08-25 06:28:15 -05:00
5ef03e6dbe update 2024-08-25 06:27:05 -05:00
38bb3538a3 update 2024-08-25 06:22:33 -05:00
8c77e53669 update 2024-08-25 06:20:12 -05:00
44aac27362 update 2024-08-25 06:19:34 -05:00
0f4048072d update 2024-08-25 06:11:13 -05:00
b6f0c41d5d update 2024-08-25 06:09:41 -05:00
3259cd6f37 update 2024-08-25 06:07:19 -05:00
418162a9e0 update 2024-08-25 05:43:48 -05:00
de022ea46b update 2024-08-25 05:33:43 -05:00
a50214eafc update 2024-08-25 05:32:20 -05:00
be2ee6274a update 2024-08-25 05:12:54 -05:00
1fbe3dbc95 update 2024-08-25 05:08:59 -05:00
f8a13c4bff update 2024-08-25 05:05:59 -05:00
c9d77c5eec update 2024-08-25 05:03:23 -05:00
3457eba0a2 update 2024-08-25 04:52:22 -05:00
738d19edfa update 2024-08-25 04:40:58 -05:00
23d397e5d4 update 2024-08-25 04:35:16 -05:00
10bfb6fd54 update 2024-08-25 04:34:31 -05:00
0ff6377bd6 update 2024-08-24 21:30:35 -05:00
8d92151ad3 update 2024-08-24 21:29:00 -05:00
3f74860c28 update 2024-08-24 21:28:14 -05:00
f12af0f92f update 2024-08-24 21:28:03 -05:00
86a5af321d update 2024-08-24 21:25:12 -05:00
4a1e4f980d update 2024-08-24 21:23:10 -05:00
bf6c021d8b update 2024-08-24 21:09:10 -05:00
0abc90d9cd update 2024-08-24 21:08:06 -05:00
e2cabee7dd update 2024-08-24 20:57:18 -05:00
1f2fd56d89 update 2024-08-24 20:56:13 -05:00
785a256258 update 2024-08-24 20:47:17 -05:00
26c3a919c6 update 2024-08-24 20:33:10 -05:00
280298cc0a update 2024-08-24 20:31:37 -05:00
f5b4c58367 update 2024-08-24 20:30:21 -05:00
0a3f3d99d7 update 2024-08-24 20:29:32 -05:00
21405024f7 add pfsense 2024-08-24 20:23:35 -05:00
61110282d5 update 2024-08-11 07:57:18 -05:00
5765f9b5d7 revert 2024-08-11 07:50:53 -05:00
f70c55dcf2 update 2024-08-11 07:48:13 -05:00
b2212a6608 move to nfs 2024-08-11 07:47:05 -05:00
5e5a7b3803 update 2024-08-11 07:40:16 -05:00
276 changed files with 8201 additions and 594 deletions

2
.gitignore vendored
View File

@@ -1 +1,3 @@
.idea
infra/terraform/.terraform
infra/terraform/.terraform.lock.hcl

3
.gitlab/.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,3 @@
include:
- local: infra/.gitlab/.gitlab-ci.yml
- local: dmz/.gitlab/.gitlab-ci.yml

4
Untitled Normal file
View File

@@ -0,0 +1,4 @@
VAULT_HELM_SECRET_NAME=$(kubectl get secrets -n vault --output=json | jq -r '.items[].metadata | select(.name|startswith("vault-token-")).name')
TOKEN_REVIEW_JWT=$(kubectl get secret $VAULT_HELM_SECRET_NAME -n vault --output='go-template={{ .data.token }}' | base64 --decode)
KUBE_CA_CERT=$(kubectl config view --raw --minify --flatten --output='jsonpath={.clusters[].cluster.certificate-authority-data}' | base64 --decode)
KUBE_HOST=$(kubectl config view --raw --minify --flatten --output='jsonpath={.clusters[].cluster.server}')

5
ansible/base.yaml Normal file
View File

@@ -0,0 +1,5 @@
- hosts: all
gather_facts: yes
become: yes
roles:
- base

View File

@@ -0,0 +1,4 @@
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

View File

@@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGhPVgL8gXdRTw0E2FvlOUoUI4vd794nB0nZVIsc+U5M

View File

@@ -0,0 +1,4 @@
Use of this system is restricted to authorized users only, and all use is subjected to an acceptable use policy.
IF YOU ARE NOT AUTHORIZED TO USE THIS SYSTEM, DISCONNECT NOW.

View File

@@ -0,0 +1,4 @@
THIS SYSTEM IS FOR AUTHORIZED USE ONLY
All activities are logged and monitored.

View File

@@ -0,0 +1,95 @@
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 1024
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
ClientAliveInterval 300
#enable remote powershell
#Subsystem powershell /usr/bin/pwsh -sshs -NoLogo

View File

@@ -0,0 +1,143 @@
- name: Update packages
apt:
name: '*'
state: latest
update_cache: yes
only_upgrade: yes
retries: 300
delay: 10
- name: Remove packages not needed anymore
apt:
autoremove: yes
retries: 300
delay: 10
- name: Install required packages Debian
apt:
state: latest
pkg: "{{ item }}"
with_items: "{{ required_packages }}"
retries: 300
delay: 10
- name: Create user account
user:
name: "user"
shell: /bin/bash
state: present
createhome: yes
- name: ensure ssh folder exists for user
file:
path: /home/user/.ssh
owner: user
group: user
mode: "0700"
state: directory
- name: Deploy SSH Key (user)
copy:
dest: /home/user/.ssh/authorized_keys
src: files/authorized_keys_user
owner: user
group: user
force: true
- name: Remove Root SSH Configuration
file:
path: /root/.ssh
state: absent
- name: Copy Secured SSHD Configuration
copy:
src: files/sshd_config_secured
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: "0644"
when: ansible_os_family == "Debian"
- name: Copy Secured SSHD Configuration
copy:
src: files/sshd_config_secured_redhat
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: "0644"
when: ansible_os_family == "RedHat"
- name: Restart SSHD
systemd:
name: sshd
daemon_reload: yes
state: restarted
enabled: yes
ignore_errors: yes
- name: Copy unattended-upgrades file
copy:
src: files/10periodic
dest: /etc/apt/apt.conf.d/10periodic
owner: root
group: root
mode: "0644"
force: yes
when: ansible_os_family == "Debian"
- name: Remove undesirable packages
package:
name: "{{ unnecessary_software }}"
state: absent
when: ansible_os_family == "Debian"
- name: Stop and disable unnecessary services
service:
name: "{{ item }}"
state: stopped
enabled: no
with_items: "{{ unnecessary_services }}"
ignore_errors: yes
- name: Set a message of the day
copy:
dest: /etc/motd
src: files/motd
owner: root
group: root
mode: 0644
- name: Set a login banner
copy:
dest: "{{ item }}"
src: files/issue
owner: root
group: root
mode: 0644
with_items:
- /etc/issue
- /etc/issue.net
- name: set timezone
shell: timedatectl set-timezone America/Chicago
- name: Enable cockpit
systemd:
name: cockpit
daemon_reload: yes
state: restarted
enabled: yes
- name: change password
ansible.builtin.user:
name: "user"
state: present
password: "{{ lookup('ansible.builtin.env', 'USER_PASSWORD') | password_hash('sha512') }}"
- name: add user to sudoers
community.general.sudoers:
name: user
state: present
user: user
commands: ALL

View File

@@ -0,0 +1,17 @@
required_packages:
- ufw
- qemu-guest-agent
- fail2ban
- unattended-upgrades
- cockpit
- nfs-common
- open-iscsi
unnecessary_services:
- postfix
- telnet
unnecessary_software:
- tcpdump
- nmap-ncat
- wpa_supplicant

View File

@@ -1,23 +0,0 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: internalproxy
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: internalproxy
directory:
recurse: true
destination:
server: https://kubernetes.default.svc
namespace: internalproxy
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -1,20 +0,0 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: gatekeeper
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: gatekeeper
destination:
namespace: gatekeeper
name: in-cluster
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -1,21 +0,0 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: gitlab-runner
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: gitlab-runner
destination:
namespace: gitlab-runner
name: in-cluster
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -0,0 +1,95 @@
stages:
- plan
- apply
- destroy
variables:
WORKDIR: $CI_PROJECT_DIR/dmz/terraform
GITLAB_TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/dmz
image:
name: registry.durp.info/opentofu/opentofu:latest
entrypoint: [""]
.tf-init:
before_script:
- cd $WORKDIR
- tofu init
-reconfigure
-backend-config="address=${GITLAB_TF_ADDRESS}"
-backend-config="lock_address=${GITLAB_TF_ADDRESS}/lock"
-backend-config="unlock_address=${GITLAB_TF_ADDRESS}/lock"
-backend-config="username=gitlab-ci-token"
-backend-config="password=${CI_JOB_TOKEN}"
-backend-config="lock_method=POST"
-backend-config="unlock_method=DELETE"
-backend-config="retry_wait_min=5"
format:
stage: .pre
allow_failure: false
script:
- cd $WORKDIR
- tofu fmt -diff -check -write=false
rules:
- changes:
- "dmz/terraform/*.tf"
validate:
stage: .pre
allow_failure: false
extends: .tf-init
script:
- tofu validate
rules:
- changes:
- "dmz/terraform/*.tf"
plan-dmz-infrastructure:
stage: plan
variables:
PLAN: plan.tfplan
JSON_PLAN_FILE: tfplan.json
ENVIRONMENT_NAME: dmz
allow_failure: false
extends: .tf-init
script:
- apk add --update curl jq
- alias convert_report="jq -r '([.resource_changes[].change.actions?]|flatten)|{\"create\":(map(select(.==\"create\"))|length),\"update\":(map(select(.==\"update\"))|length),\"delete\":(map(select(.==\"delete\"))|length)}'"
- tofu plan -out=$PLAN $ARGUMENTS
- tofu show --json $PLAN | jq -r '([.resource_changes[].change.actions?]|flatten)|{"create":(map(select(.=="create"))|length),"update":(map(select(.=="update"))|length),"delete":(map(select(.=="delete"))|length)}' > $JSON_PLAN_FILE
artifacts:
reports:
terraform: $WORKDIR/$JSON_PLAN_FILE
needs: ["validate","format"]
rules:
- changes:
- "dmz/terraform/*.tf"
apply-dmz-infrastructure:
stage: apply
variables:
ENVIRONMENT_NAME: dmz
allow_failure: false
extends: .tf-init
script:
- tofu apply -auto-approve $ARGUMENTS
rules:
- changes:
- "dmz/terraform/*.tf"
when: manual
needs: ["plan-dmz-infrastructure"]
destroy-dmz-infrastructure:
stage: destroy
variables:
ENVIRONMENT_NAME: dmz
allow_failure: false
extends: .tf-init
script:
- tofu destroy -auto-approve $ARGUMENTS
rules:
- changes:
- "dmz/terraform/*.tf"
when: manual
needs: ["plan-dmz-infrastructure"]

12
dmz/authentik/Chart.yaml Normal file
View File

@@ -0,0 +1,12 @@
apiVersion: v2
name: authentik
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
dependencies:
- name: authentik-remote-cluster
repository: https://charts.goauthentik.io
version: 2.0.0

30
dmz/authentik/values.yaml Normal file
View File

@@ -0,0 +1,30 @@
authentik-remote-cluster:
# -- Provide a name in place of `authentik`. Prefer using global.nameOverride if possible
nameOverride: ""
# -- String to fully override `"authentik.fullname"`. Prefer using global.fullnameOverride if possible
fullnameOverride: ""
# -- Override the Kubernetes version, which is used to evaluate certain manifests
kubeVersionOverride: ""
## Globally shared configuration for authentik components.
global:
# -- Provide a name in place of `authentik`
nameOverride: ""
# -- String to fully override `"authentik.fullname"`
fullnameOverride: ""
# -- A custom namespace to override the default namespace for the deployed resources.
namespaceOverride: ""
# -- Common labels for all resources.
additionalLabels: {}
# app: authentik
# -- Annotations to apply to all resources
annotations: {}
serviceAccountSecret:
# -- Create a secret with the service account credentials
enabled: true
clusterRole:
# -- Create a clusterole in addition to a namespaced role.
enabled: true

View File

@@ -8,4 +8,4 @@ appVersion: 0.0.1
dependencies:
- name: cert-manager
repository: https://charts.jetstack.io
version: 1.*.*
version: v1.16.3

View File

@@ -0,0 +1,16 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: issuer
secrets:
- name: issuer-token-lmzpj
---
apiVersion: v1
kind: Secret
metadata:
name: issuer-token-lmzpj
annotations:
kubernetes.io/service-account.name: issuer
type: kubernetes.io/service-account-token

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,22 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: cloudflare-api-token-secret
spec:
secretStoreRef:
name: vault
kind: ClusterSecretStore
target:
name: cloudflare-api-token-secret
data:
- secretKey: cloudflare-api-token-secret
remoteRef:
key: kv/cert-manager
property: cloudflare-api-token-secret
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault

View File

@@ -0,0 +1,26 @@
cert-manager:
crds:
enabled: true
image:
registry: registry.internal.durp.info
repository: jetstack/cert-manager-controller
pullPolicy: Always
replicaCount: 3
extraArgs:
- --dns01-recursive-nameservers=1.1.1.1:53,1.0.0.1:53
- --dns01-recursive-nameservers-only
podDnsPolicy: None
podDnsConfig:
nameservers:
- "1.1.1.1"
- "1.0.0.1"
webhook:
image:
registry: registry.internal.durp.info
repository: jetstack/cert-manager-webhook
pullPolicy: Always
cainjector:
image:
registry: registry.internal.durp.info
repository: jetstack/cert-manager-cainjector
pullPolicy: Always

View File

@@ -9,4 +9,4 @@ appVersion: 0.0.1
dependencies:
- name: external-dns
repository: https://charts.bitnami.com/bitnami
version: 6.20.3
version: 8.3.8

View File

@@ -0,0 +1,30 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: external-dns-secret
spec:
secretStoreRef:
name: vault
kind: ClusterSecretStore
target:
name: external-dns
data:
- secretKey: cloudflare_api_email
remoteRef:
key: kv/cloudflare
property: cloudflare_api_email
- secretKey: cloudflare_api_key
remoteRef:
key: kv/cloudflare
property: cloudflare_api_key
- secretKey: cloudflare_api_token
remoteRef:
key: kv/cloudflare
property: cloudflare_api_token
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault

View File

@@ -0,0 +1,18 @@
external-dns:
global:
imageRegistry: "registry.durp.info"
image:
pullPolicy: Always
txtPrefix: "dmz-"
sources:
- service
provider: cloudflare
cloudflare:
secretName : "external-dns"
proxied: false
policy: sync

View File

@@ -0,0 +1,11 @@
apiVersion: v2
name: external-secrets
description: A Helm chart for Kubernetes
type: application
version: 0.0.1
appVersion: 0.0.1
dependencies:
- name: external-secrets
repository: https://charts.external-secrets.io
version: 0.13.0

View File

@@ -0,0 +1,81 @@
apiVersion: v1
data:
vault.pem: |
-----BEGIN CERTIFICATE-----
MIIEszCCA5ugAwIBAgIUZEzzxqEuYiKHkL1df+Cb22NRRJMwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAxMJZHVycC5pbmZvMB4XDTI1MDEyMzIyMzQ0MloXDTM1MDEy
MTExMTU1NVowIDEeMBwGA1UEAxMVdmF1bHQuaW5mcmEuZHVycC5pbmZvMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkZM0ue4bMcmmATs+kGYSpR2hLUzq
scGIwCtqmaKCMbd1xhmgjnIR3zvSRptLR2GVGvc1ti6qby0jXYvcqbxkHvay00zW
2zYN+M2m4lXpuWzg1t6NEoO6XGAsGj2v0vcVktPPU9uj0rGUVGWWfsvjoXqQFg5I
jdxsxK9SvMvw2XtE3FgKxpzCyw94InIHlcPwFTO+3ZdKStZlMbUDIkmszLBrWFcr
XOsPDfLxqMy0Ck//LKIt8djh3254FHB1GG5+kI+JSW1o+tUcL2NymvIINwm/2acS
1uTm+j9W7iEXav0pJNmm+/dzSskc3Y0ftM0h2HCXgitBIaEZnUVneNHOLwIDAQAB
o4IB7zCCAeswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
BBYEFCaQ2q7j7LyBGETEZ5qaJAdlISKCMB8GA1UdIwQYMBaAFO1jCyGkpFO+QiR2
dfBMWVYeWrQ2MIH0BggrBgEFBQcBAQSB5zCB5DAzBggrBgEFBQcwAYYnaHR0cHM6
Ly8xOTIuMTY4LjIwLjI1Mzo4MjAxL3YxL3BraS9vY3NwMD0GCCsGAQUFBzABhjFo
dHRwczovL3Jvb3QtdmF1bHQuaW50ZXJuYWwuZHVycC5pbmZvL3YxL3BraS9vY3Nw
MDEGCCsGAQUFBzAChiVodHRwczovLzE5Mi4xNjguMjAuMjUzOjgyMDEvdjEvcGtp
L2NhMDsGCCsGAQUFBzAChi9odHRwczovL3Jvb3QtdmF1bHQuaW50ZXJuYWwuZHVy
cC5pbmZvL3YxL3BraS9jYTAgBgNVHREEGTAXghV2YXVsdC5pbmZyYS5kdXJwLmlu
Zm8wbwYDVR0fBGgwZjAsoCqgKIYmaHR0cHM6Ly8xOTIuMTY4LjIwLjI1Mzo4MjAx
L3YxL3BraS9jcmwwNqA0oDKGMGh0dHBzOi8vcm9vdC12YXVsdC5pbnRlcm5hbC5k
dXJwLmluZm8vdjEvcGtpL2NybDANBgkqhkiG9w0BAQsFAAOCAQEAuJ+lplY/+A5L
5LzkljbKDTy3U6PLv1LtxqVCOFGiJXBnXMjtVW07bBEUadzFRNW8GHQ3w5QzOG6k
/vE/TrrJho7l05J/uc+BUrPSNjefLmQV6hn4jrP86PR0vzRfbSqKKBIID9M7+zi6
GFvHlVkSHsQyMQp7JOoax9KVzW2Y+OIgw7Lgw2tP122WCt2SIF0QenoZHsoW0guj
tzTJRmJDjn6XeJ7L3FPkf37H6ub0Jg3zBGr6eorEFfYZNN5CXezjqMFBpRdq4UIo
1M3A7o3uyZFcFsp/vGDcMBkwaCsBV9idu/HwkvGaTUNI285ilBORPD0bMZnACq/9
+Q/cdsO5lg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEmzCCA4OgAwIBAgIUQwCAs82sgSuiaVbjANHScO2DSfAwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAxMJZHVycC5pbmZvMB4XDTI1MDEyMzExMjEyNVoXDTM1MDEy
MTExMTU1NVowFDESMBAGA1UEAxMJZHVycC5pbmZvMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAn9fjGRqqFsqguz56X6cXZwEMtD9wElwSFCb4Fc8YTzlH
4fV13QwXKESLE/Q+7bw4y4FJQ8BiGNbxxbQOOgWhfGGlQyFa1lfhJtYLfqRN5C2/
S7nr0YxDB9duc4OAExVL6Pr4/Koc+vDZY03l7RzwnF2AOM9DjFTASw01TphCQjRk
U+upiN2TUhUPejV/gMR+zXM6pn98UBKG1dNubS0HzAMwAEXAPm141NDyWUCPT9+3
6P03Ka8mUTx3X49OCtvJEGEQbtlnTFQaOSkP1yLW+XRMHw3sQaV2PWXu5fInbEpZ
+SuzmgLOXtmQNmHLav9q1qeTVkpBGPWvfh2Vh1JJhQIDAQABo4IB4zCCAd8wDgYD
VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJaP17f1Zw0V
55Ks9Uf0USVWl0BPMB8GA1UdIwQYMBaAFO1jCyGkpFO+QiR2dfBMWVYeWrQ2MIH0
BggrBgEFBQcBAQSB5zCB5DAzBggrBgEFBQcwAYYnaHR0cHM6Ly8xOTIuMTY4LjIw
LjI1Mzo4MjAxL3YxL3BraS9vY3NwMD0GCCsGAQUFBzABhjFodHRwczovL3Jvb3Qt
dmF1bHQuaW50ZXJuYWwuZHVycC5pbmZvL3YxL3BraS9vY3NwMDEGCCsGAQUFBzAC
hiVodHRwczovLzE5Mi4xNjguMjAuMjUzOjgyMDEvdjEvcGtpL2NhMDsGCCsGAQUF
BzAChi9odHRwczovL3Jvb3QtdmF1bHQuaW50ZXJuYWwuZHVycC5pbmZvL3YxL3Br
aS9jYTAUBgNVHREEDTALgglkdXJwLmluZm8wbwYDVR0fBGgwZjAsoCqgKIYmaHR0
cHM6Ly8xOTIuMTY4LjIwLjI1Mzo4MjAxL3YxL3BraS9jcmwwNqA0oDKGMGh0dHBz
Oi8vcm9vdC12YXVsdC5pbnRlcm5hbC5kdXJwLmluZm8vdjEvcGtpL2NybDANBgkq
hkiG9w0BAQsFAAOCAQEAiqAZ4zNIEkCWcvpDRq0VyJuk59sVtJr5X4FscHQ179nE
QbbvMe+EBDFS6XQml1Elj8jiPa/D5O9Oc6Iisnm5+weZKwApz/lQ+XVkWLCoEplB
ZZ9fcWVCbMLt0xlt8qn5z/mYKfbCT7ZCqDO+prQZt+ADJcQbiknfroAAqEbNKxwN
Y9uUyOWNF3SxJEch4w2dtX+IEVmxeZnhMy8OuP0SQKl8aW40ugiG0ZD5yTBBfOD9
zsrGSU/iSatn0b7bevBhaL96hz1/rNR1cL+4/albX2hrr8Rv3/SB2DLtNQlQW0ls
AfhXAqP5zL+Ytgf1Of/pVdgnhxrYUY7RKCSGY5Hagw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDLzCCAhegAwIBAgIUNHdvOzam2HPVdwXpMHUy4wl8ZRYwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAxMJZHVycC5pbmZvMB4XDTI1MDEyMzExMTUyNVoXDTM1MDEy
MTExMTU1NVowFDESMBAGA1UEAxMJZHVycC5pbmZvMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEA8XDTVEtRI3+k4yuvqVqfIiLRQJcXbmhfVtAeYk+5j9Ox
p1w9YHdnPLqLFrD1PzadjqYeAp/fwlEFfs6lqwoTS8S9vhaFqcgB57nVMb77dTBb
/08XHXOU6FPRjdFKm5QMpS7tn1XacPMy/o0bKqRREQeiuFDGVRyuF5PUgvWc1dvJ
l27JvvgYktgjfpNS4DlCxg4lGXT5abvaKf2hnr65egaIo/yRWN9wnvAzRiY7oci7
GA1oKz87Yc1tfL2gcynrwccOOCF/eUKesJR1I6GXNkN/a1fcr+Ld9Z9NhHBtO+vE
N8DsZY+kG7DE3M4BCCTFUzllcYHjaW4HaF9vZW+PYwIDAQABo3kwdzAOBgNVHQ8B
Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7WMLIaSkU75CJHZ1
8ExZVh5atDYwHwYDVR0jBBgwFoAU7WMLIaSkU75CJHZ18ExZVh5atDYwFAYDVR0R
BA0wC4IJZHVycC5pbmZvMA0GCSqGSIb3DQEBCwUAA4IBAQAS/qUI/1Yv07xUTK5k
r93kC7GSPpmpkXIsfjChAl93sebN143fu70NUP74jjCc0Wkb8hRofGg10E+/24r1
AI0KsLhzKzfIASxUVQAn8RTptLruaaPLboSA4MUZ8IB5y8Vy8E3/KtD0gD80j64Y
rm9XGHA0HTJHbPUTb/Rux2g0E7WtiyWSWH8mqzbegU8IrkM3eVT4+ylBE7YkfWDD
dw44sB71tfmDKpzWg6XQ6YMh0YfnyG1fYCj9LhuecNY9Uuo6cjDaAvkzMewWwqDx
Q2Ekas98Di6itCP8vET+gBDjeCc+XR6Hx6vzWmxlZhwDuxEKL1a2/DabUxJyMNzv
55Fn
-----END CERTIFICATE-----
kind: ConfigMap
metadata:
name: ca-pemstore

View File

@@ -0,0 +1,94 @@
external-secrets:
replicaCount: 3
revisionHistoryLimit: 1
leaderElect: true
installCRDs: true
crds:
createClusterExternalSecret: true
createClusterSecretStore: true
createClusterGenerator: true
createPushSecret: true
conversion:
enabled: false
image:
repository: registry.durp.info/external-secrets/external-secrets
pullPolicy: Always
extraVolumes:
- name: ca-pemstore
configMap:
name: ca-pemstore
extraVolumeMounts:
- name: ca-pemstore
mountPath: /etc/ssl/certs/vault.pem
subPath: vault.pem
readOnly: true
resources:
requests:
memory: 32Mi
cpu: 10m
limits:
memory: 32Mi
cpu: 10m
webhook:
create: false
failurePolicy: Ignore
log:
level: debug
image:
repository: registry.durp.info/external-secrets/external-secrets
pullPolicy: Always
extraVolumes:
- name: ca-pemstore
configMap:
name: ca-pemstore
extraVolumeMounts:
- name: ca-pemstore
mountPath: /etc/ssl/certs/vault.pem
subPath: vault.pem
readOnly: true
resources:
requests:
memory: 32Mi
cpu: 10m
limits:
memory: 32Mi
cpu: 10m
certController:
create: false
revisionHistoryLimit: 1
log:
level: debug
image:
repository: registry.durp.info/external-secrets/external-secrets
pullPolicy: Always
tag: ""
resources:
requests:
memory: 32Mi
cpu: 10m
limits:
memory: 32Mi
cpu: 10m
extraVolumes:
- name: ca-pemstore
configMap:
name: ca-pemstore
extraVolumeMounts:
- name: ca-pemstore
mountPath: /etc/ssl/certs/vault.pem
subPath: vault.pem
readOnly: true

View File

@@ -0,0 +1,15 @@
apiVersion: v2
name: gitlab-runner
description: A Helm chart for Kubernetes
type: application
version: 0.0.1
appVersion: 0.0.1
dependencies:
- name: gitlab-runner
repository: https://charts.gitlab.io/
version: 0.69.0
- name: gitlab-runner
repository: https://charts.gitlab.io/
version: 0.69.0
alias: personal

View File

@@ -0,0 +1,48 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: gitlab-secret
spec:
secretStoreRef:
name: vault
kind: ClusterSecretStore
target:
name: gitlab-secret
data:
- secretKey: runner-registration-token
remoteRef:
key: kv/gitlab/runner
property: runner-registration-token
- secretKey: runner-token
remoteRef:
key: kv/gitlab/runner
property: runner-token
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault
---
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: gitlab-secret-personal
spec:
secretStoreRef:
name: vault
kind: ClusterSecretStore
target:
name: gitlab-secret-personal
data:
- secretKey: runner-token
remoteRef:
key: kv/gitlab/runner
property: personal-runner-token
- secretKey: runner-registration-token
remoteRef:
key: kv/gitlab/runner
property: personal-runner-token

View File

@@ -0,0 +1,143 @@
gitlab-runner:
image:
registry: registry.durp.info
image: gitlab-org/gitlab-runner
imagePullPolicy: Always
gitlabUrl: https://gitlab.com/
unregisterRunner: false
terminationGracePeriodSeconds: 3600
concurrent: 10
checkInterval: 30
rbac:
create: true
rules: []
clusterWideAccess: false
podSecurityPolicy:
enabled: false
resourceNames:
- gitlab-runner
metrics:
enabled: true
serviceMonitor:
enabled: true
service:
enabled: true
annotations: {}
runners:
config: |
[[runners]]
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "ubuntu:22.04"
privileged = true
executor: kubernetes
name: "k3s"
runUntagged: true
privileged: true
secret: gitlab-secret
#builds:
#cpuLimit: 200m
#cpuLimitOverwriteMaxAllowed: 400m
#memoryLimit: 256Mi
#memoryLimitOverwriteMaxAllowed: 512Mi
#cpuRequests: 100m
#cpuRequestsOverwriteMaxAllowed: 200m
#memoryRequests: 128Mi
#memoryRequestsOverwriteMaxAllowed: 256Mi
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: false
runAsNonRoot: true
privileged: false
capabilities:
drop: ["ALL"]
podSecurityContext:
runAsUser: 100
fsGroup: 65533
resources:
limits:
memory: 2Gi
requests:
memory: 128Mi
cpu: 500m
personal:
image:
registry: registry.durp.info
image: gitlab-org/gitlab-runner
imagePullPolicy: Always
gitlabUrl: https://gitlab.com/
unregisterRunner: false
terminationGracePeriodSeconds: 3600
concurrent: 10
checkInterval: 30
rbac:
create: true
rules: []
clusterWideAccess: false
podSecurityPolicy:
enabled: false
resourceNames:
- gitlab-runner
metrics:
enabled: true
serviceMonitor:
enabled: true
service:
enabled: true
annotations: {}
runners:
config: |
[[runners]]
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "ubuntu:22.04"
privileged = true
executor: kubernetes
name: "k3s"
runUntagged: true
privileged: true
secret: gitlab-secret-personal
#builds:
#cpuLimit: 200m
#cpuLimitOverwriteMaxAllowed: 400m
#memoryLimit: 256Mi
#memoryLimitOverwriteMaxAllowed: 512Mi
#cpuRequests: 100m
#cpuRequestsOverwriteMaxAllowed: 200m
#memoryRequests: 128Mi
#memoryRequestsOverwriteMaxAllowed: 256Mi
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: false
runAsNonRoot: true
privileged: false
capabilities:
drop: ["ALL"]
podSecurityContext:
runAsUser: 100
fsGroup: 65533
resources:
limits:
memory: 2Gi
requests:
memory: 128Mi
cpu: 500m

View File

@@ -1,4 +1,4 @@
apiVersion: traefik.containo.us/v1alpha1
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: authentik-ingress
@@ -9,8 +9,8 @@ spec:
- match: Host(`authentik.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: authentik-server
port: 80
- name: infra-cluster
port: 443
tls:
secretName: authentik-tls
@@ -21,13 +21,13 @@ kind: Certificate
metadata:
name: authentik-tls
spec:
secretName: authentik-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
secretName: authentik-tls
commonName: "authentik.durp.info"
dnsNames:
- "authentik.durp.info"
- "authentik.durp.info"
---

View File

@@ -0,0 +1,42 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: bitwarden-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`bitwarden.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: master-cluster
port: 443
tls:
secretName: bitwarden-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: bitwarden-tls
spec:
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
secretName: bitwarden-tls
commonName: "bitwarden.durp.info"
dnsNames:
- "bitwarden.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: bitwarden-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: bitwarden.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,64 @@
apiVersion: v1
kind: Service
metadata:
name: duplicati
spec:
ports:
- name: app
port: 8200
protocol: TCP
targetPort: 8200
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: duplicati
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 8200
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: duplicati-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`duplicati.internal.durp.info`) && PathPrefix(`/`)
middlewares:
- name: whitelist
namespace: traefik
- name: authentik-proxy-provider
namespace: traefik
kind: Rule
services:
- name: duplicati
port: 8200
tls:
secretName: duplicati-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: duplicati-tls
spec:
secretName: duplicati-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "duplicati.internal.durp.info"
dnsNames:
- "duplicati.internal.durp.info"

View File

@@ -0,0 +1,45 @@
apiVersion: v1
kind: Endpoints
metadata:
name: master-cluster
subsets:
- addresses:
- ip: 192.168.20.130
ports:
- port: 443
---
apiVersion: v1
kind: Service
metadata:
name: master-cluster
spec:
ports:
- protocol: TCP
port: 443
targetPort: 443
---
apiVersion: v1
kind: Endpoints
metadata:
name: infra-cluster
subsets:
- addresses:
- ip: 192.168.12.130
ports:
- port: 443
---
apiVersion: v1
kind: Service
metadata:
name: infra-cluster
spec:
ports:
- protocol: TCP
port: 443
targetPort: 443

View File

@@ -0,0 +1,72 @@
apiVersion: v1
kind: Service
metadata:
name: gitea
spec:
ports:
- name: app
port: 3000
protocol: TCP
targetPort: 3000
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: gitea
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 3000
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: gitea-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`gitea.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: gitea
port: 3000
scheme: http
tls:
secretName: gitea-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: gitea-tls
spec:
secretName: gitea-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "gitea.durp.info"
dnsNames:
- "gitea.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: gitea-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: gitea.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,72 @@
apiVersion: v1
kind: Service
metadata:
name: kasm
spec:
ports:
- name: app
port: 443
protocol: TCP
targetPort: 443
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: kasm
subsets:
- addresses:
- ip: 192.168.20.104
ports:
- name: app
port: 443
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: kasm-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`kasm.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: kasm
port: 443
scheme: https
tls:
secretName: kasm-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: kasm-tls
spec:
secretName: kasm-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "kasm.durp.info"
dnsNames:
- "kasm.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: kasm-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: kasm.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,45 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: kuma-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`kuma.durp.info`) && PathPrefix(`/`)
kind: Rule
middlewares:
- name: authentik-proxy-provider
namespace: traefik
services:
- name: master-cluster
port: 443
tls:
secretName: kuma-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: kuma-tls
spec:
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
secretName: kuma-tls
commonName: "kuma.durp.info"
dnsNames:
- "kuma.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: kuma-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: kuma.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,71 @@
apiVersion: v1
kind: Service
metadata:
name: nexus
spec:
ports:
- name: app
port: 8081
protocol: TCP
targetPort: 8081
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: nexus
subsets:
- addresses:
- ip: 192.168.20.200
ports:
- name: app
port: 8081
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: nexus-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`nexus.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: nexus
port: 8081
tls:
secretName: nexus-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: nexus-tls
spec:
secretName: nexus-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "nexus.durp.info"
dnsNames:
- "nexus.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: nexus-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: nexus.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,102 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: ollama-secret
spec:
secretStoreRef:
name: vault
kind: ClusterSecretStore
target:
name: ollama-secret
data:
- secretKey: users
remoteRef:
key: kv/ollama
property: users
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: ollama-basic-auth
spec:
basicAuth:
headerField: x-api-key
secret: ollama-secret
---
apiVersion: v1
kind: Service
metadata:
name: ollama
spec:
ports:
- name: app
port: 11435
protocol: TCP
targetPort: 11435
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: ollama
subsets:
- addresses:
- ip: 192.168.20.104
ports:
- name: app
port: 11435
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: ollama-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`ollama.durp.info`) && PathPrefix(`/`)
middlewares:
- name: ollama-basic-auth
kind: Rule
services:
- name: ollama
port: 11435
tls:
secretName: ollama-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: ollama-tls
spec:
secretName: ollama-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "ollama.durp.info"
dnsNames:
- "ollama.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: ollama-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: ollama.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,42 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: open-webui-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`open-webui.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: master-cluster
port: 443
tls:
secretName: open-webui-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: open-webui-tls
spec:
secretName: open-webui-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "open-webui.durp.info"
dnsNames:
- "open-webui.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: open-webui-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: open-webui.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,72 @@
apiVersion: v1
kind: Service
metadata:
name: plex
spec:
ports:
- name: app
port: 32400
protocol: TCP
targetPort: 32400
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: plex
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 32400
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: plex-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`plex.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: plex
port: 32400
scheme: https
tls:
secretName: plex-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: plex-tls
spec:
secretName: plex-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "plex.durp.info"
dnsNames:
- "plex.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: plex-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: plex.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,62 @@
apiVersion: v1
kind: Service
metadata:
name: portainer
spec:
ports:
- name: app
port: 9443
protocol: TCP
targetPort: 9443
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: portainer
subsets:
- addresses:
- ip: 192.168.20.104
ports:
- name: app
port: 9443
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: portainer-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`portainer.internal.durp.info`) && PathPrefix(`/`)
middlewares:
- name: whitelist
namespace: traefik
kind: Rule
services:
- name: portainer
port: 9443
tls:
secretName: portainer-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: portainer-tls
spec:
secretName: portainer-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "portainer.internal.durp.info"
dnsNames:
- "portainer.internal.durp.info"

View File

@@ -0,0 +1,63 @@
apiVersion: v1
kind: Service
metadata:
name: proxmox
spec:
ports:
- name: app
port: 8006
protocol: TCP
targetPort: 8006
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: proxmox
subsets:
- addresses:
- ip: 192.168.21.254
ports:
- name: app
port: 8006
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: proxmox-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`proxmox.internal.durp.info`) && PathPrefix(`/`)
middlewares:
- name: whitelist
namespace: traefik
kind: Rule
services:
- name: proxmox
port: 8006
scheme: https
tls:
secretName: proxmox-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: proxmox-tls
spec:
secretName: proxmox-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "proxmox.internal.durp.info"
dnsNames:
- "proxmox.internal.durp.info"

View File

@@ -1,19 +1,7 @@
kind: Service
apiVersion: v1
metadata:
name: guac-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: guac.durp.info
spec:
type: ExternalName
externalName: durp.info
---
apiVersion: v1
kind: Service
metadata:
name: guac
name: redlib
spec:
ports:
- name: app
@@ -28,10 +16,10 @@ spec:
apiVersion: v1
kind: Endpoints
metadata:
name: guac
name: redlib
subsets:
- addresses:
- ip: 192.168.20.253
- ip: 192.168.21.200
ports:
- name: app
port: 8082
@@ -39,33 +27,48 @@ subsets:
---
apiVersion: traefik.containo.us/v1alpha1
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: guac-ingress
name: redlib-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`guac.durp.info`) && PathPrefix(`/`)
- match: Host(`redlib.durp.info`) && PathPrefix(`/`)
middlewares:
- name: authentik-proxy-provider
namespace: traefik
kind: Rule
services:
- name: guac
- name: redlib
port: 8082
tls:
secretName: guac-tls
secretName: redlib-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: guac-tls
name: redlib-tls
spec:
secretName: guac-tls
secretName: redlib-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "guac.durp.info"
commonName: "redlib.durp.info"
dnsNames:
- "guac.durp.info"
- "redlib.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: redlib-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: redlib.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,71 @@
apiVersion: v1
kind: Service
metadata:
name: registry
spec:
ports:
- name: app
port: 5000
protocol: TCP
targetPort: 5000
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: registry
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 5000
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: registry-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`registry.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: registry
port: 5000
tls:
secretName: registry-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: registry-tls
spec:
secretName: registry-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "registry.durp.info"
dnsNames:
- "registry.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: registry-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: registry.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,63 @@
apiVersion: v1
kind: Service
metadata:
name: root-vault
spec:
ports:
- name: app
port: 8201
protocol: TCP
targetPort: 8201
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: root-vault
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 8201
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: root-vault-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`root-vault.internal.durp.info`) && PathPrefix(`/`)
middlewares:
- name: whitelist
namespace: traefik
kind: Rule
services:
- name: root-vault
port: 8201
scheme: https
tls:
secretName: root-vault-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: root-vault-tls
spec:
secretName: root-vault-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "root-vault.internal.durp.info"
dnsNames:
- "root-vault.internal.durp.info"

View File

@@ -0,0 +1,4 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault

View File

@@ -0,0 +1,76 @@
apiVersion: v1
kind: Service
metadata:
name: smokeping
spec:
ports:
- name: app
port: 81
protocol: TCP
targetPort: 81
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: smokeping
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 81
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: smokeping-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`smokeping.durp.info`) && PathPrefix(`/`)
middlewares:
- name: whitelist
namespace: traefik
- name: authentik-proxy-provider
namespace: traefik
kind: Rule
services:
- name: smokeping
port: 81
tls:
secretName: smokeping-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: smokeping-tls
spec:
secretName: smokeping-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "smokeping.durp.info"
dnsNames:
- "smokeping.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: smokeping-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: smokeping.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,74 @@
apiVersion: v1
kind: Service
metadata:
name: speedtest
spec:
ports:
- name: app
port: 6580
protocol: TCP
targetPort: 6580
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: speedtest
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 6580
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: speedtest-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`speedtest.durp.info`) && PathPrefix(`/`)
kind: Rule
middlewares:
- name: authentik-proxy-provider
namespace: traefik
services:
- name: speedtest
port: 6580
tls:
secretName: speedtest-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: speedtest-tls
spec:
secretName: speedtest-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "speedtest.durp.info"
dnsNames:
- "speedtest.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: speedtest-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: speedtest.durp.info
spec:
type: ExternalName
externalName: durp.info

View File

@@ -0,0 +1,67 @@
apiVersion: v1
kind: Service
metadata:
name: tdarr
spec:
ports:
- name: app
port: 8267
protocol: TCP
targetPort: 8267
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: tdarr
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 8267
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: tdarr-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-production
spec:
entryPoints:
- websecure
routes:
- match: Host(`tdarr.internal.durp.info`)
middlewares:
- name: whitelist
namespace: traefik
- name: authentik-proxy-provider
namespace: traefik
kind: Rule
services:
- name: tdarr
port: 8267
scheme: http
tls:
secretName: tdarr-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: tdarr-tls
spec:
secretName: tdarr-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "tdarr.internal.durp.info"
dnsNames:
- "tdarr.internal.durp.info"

View File

@@ -0,0 +1,63 @@
apiVersion: v1
kind: Service
metadata:
name: unifi
spec:
ports:
- name: app
port: 443
protocol: TCP
targetPort: 443
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: unifi
subsets:
- addresses:
- ip: 192.168.98.1
ports:
- name: app
port: 443
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: unifi-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`unifi.internal.durp.info`) && PathPrefix(`/`)
middlewares:
- name: whitelist
namespace: traefik
kind: Rule
services:
- name: unifi
port: 443
scheme: https
tls:
secretName: unifi-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: unifi-tls
spec:
secretName: unifi-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "unifi.internal.durp.info"
dnsNames:
- "unifi.internal.durp.info"

View File

@@ -0,0 +1,17 @@
apiVersion: v2
name: istio-system
description: A Helm chart for Kubernetes
type: application
version: 0.0.1
appVersion: 0.0.1
dependencies:
- name: base
repository: https://istio-release.storage.googleapis.com/charts
version: 1.25.0
- name: istiod
repository: https://istio-release.storage.googleapis.com/charts
version: 1.25.0
- name: gateway
repository: https://istio-release.storage.googleapis.com/charts
version: 1.25.0

View File

@@ -0,0 +1,13 @@
apiVersion: v1
kind: Namespace
metadata:
annotations:
topology.istio.io/controlPlaneClusters: cluster1
labels:
kubernetes.io/metadata.name: istio-system
name: istio-system
spec:
finalizers:
- kubernetes
status:
phase: Active

View File

@@ -0,0 +1,725 @@
istiod:
profile: remote
autoscaleEnabled: true
autoscaleMin: 1
autoscaleMax: 5
autoscaleBehavior: {}
replicaCount: 1
rollingMaxSurge: 100%
rollingMaxUnavailable: 25%
hub: ""
tag: ""
variant: ""
# Can be a full hub/image:tag
image: pilot
traceSampling: 1.0
# Resources for a small pilot install
resources:
requests:
cpu: 500m
memory: 2048Mi
# Set to `type: RuntimeDefault` to use the default profile if available.
seccompProfile: {}
# Whether to use an existing CNI installation
cni:
enabled: false
provider: default
# Additional container arguments
extraContainerArgs: []
env: {}
# Settings related to the untaint controller
# This controller will remove `cni.istio.io/not-ready` from nodes when the istio-cni pod becomes ready
# It should be noted that cluster operator/owner is responsible for having the taint set by their infrastructure provider when new nodes are added to the cluster; the untaint controller does not taint nodes
taint:
# Controls whether or not the untaint controller is active
enabled: false
# What namespace the untaint controller should watch for istio-cni pods. This is only required when istio-cni is running in a different namespace than istiod
namespace: ""
affinity: {}
tolerations: []
cpu:
targetAverageUtilization: 80
memory: {}
# targetAverageUtilization: 80
# Additional volumeMounts to the istiod container
volumeMounts: []
# Additional volumes to the istiod pod
volumes: []
# Inject initContainers into the istiod pod
initContainers: []
nodeSelector: {}
podAnnotations: {}
serviceAnnotations: {}
serviceAccountAnnotations: {}
sidecarInjectorWebhookAnnotations: {}
topologySpreadConstraints: []
# You can use jwksResolverExtraRootCA to provide a root certificate
# in PEM format. This will then be trusted by pilot when resolving
# JWKS URIs.
jwksResolverExtraRootCA: ""
# The following is used to limit how long a sidecar can be connected
# to a pilot. It balances out load across pilot instances at the cost of
# increasing system churn.
keepaliveMaxServerConnectionAge: 30m
# Additional labels to apply to the deployment.
deploymentLabels: {}
## Mesh config settings
# Install the mesh config map, generated from values.yaml.
# If false, pilot wil use default values (by default) or user-supplied values.
configMap: true
# Additional labels to apply on the pod level for monitoring and logging configuration.
podLabels: {}
# Setup how istiod Service is configured. See https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services
ipFamilyPolicy: ""
ipFamilies: []
# Ambient mode only.
# Set this if you install ztunnel to a different namespace from `istiod`.
# If set, `istiod` will allow connections from trusted node proxy ztunnels
# in the provided namespace.
# If unset, `istiod` will assume the trusted node proxy ztunnel resides
# in the same namespace as itself.
trustedZtunnelNamespace: ""
sidecarInjectorWebhook:
# You can use the field called alwaysInjectSelector and neverInjectSelector which will always inject the sidecar or
# always skip the injection on pods that match that label selector, regardless of the global policy.
# See https://istio.io/docs/setup/kubernetes/additional-setup/sidecar-injection/#more-control-adding-exceptions
neverInjectSelector: []
alwaysInjectSelector: []
# injectedAnnotations are additional annotations that will be added to the pod spec after injection
# This is primarily to support PSP annotations. For example, if you defined a PSP with the annotations:
#
# annotations:
# apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
# apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
#
# The PSP controller would add corresponding annotations to the pod spec for each container. However, this happens before
# the inject adds additional containers, so we must specify them explicitly here. With the above example, we could specify:
# injectedAnnotations:
# container.apparmor.security.beta.kubernetes.io/istio-init: runtime/default
# container.apparmor.security.beta.kubernetes.io/istio-proxy: runtime/default
injectedAnnotations: {}
# This enables injection of sidecar in all namespaces,
# with the exception of namespaces with "istio-injection:disabled" annotation
# Only one environment should have this enabled.
enableNamespacesByDefault: false
# Mutations that occur after the sidecar injector are not handled by default, as the Istio sidecar injector is only run
# once. For example, an OPA sidecar injected after the Istio sidecar will not have it's liveness/readiness probes rewritten.
# Setting this to `IfNeeded` will result in the sidecar injector being run again if additional mutations occur.
reinvocationPolicy: Never
rewriteAppHTTPProbe: true
# Templates defines a set of custom injection templates that can be used. For example, defining:
#
# templates:
# hello: |
# metadata:
# labels:
# hello: world
#
# Then starting a pod with the `inject.istio.io/templates: hello` annotation, will result in the pod
# being injected with the hello=world labels.
# This is intended for advanced configuration only; most users should use the built in template
templates: {}
# Default templates specifies a set of default templates that are used in sidecar injection.
# By default, a template `sidecar` is always provided, which contains the template of default sidecar.
# To inject other additional templates, define it using the `templates` option, and add it to
# the default templates list.
# For example:
#
# templates:
# hello: |
# metadata:
# labels:
# hello: world
#
# defaultTemplates: ["sidecar", "hello"]
defaultTemplates: []
istiodRemote:
# If `true`, indicates that this cluster/install should consume a "remote istiod" installation,
# and istiod itself will NOT be installed in this cluster - only the support resources necessary
# to utilize a remote instance.
enabled: false
# Sidecar injector mutating webhook configuration clientConfig.url value.
# For example: https://$remotePilotAddress:15017/inject
# The host should not refer to a service running in the cluster; use a service reference by specifying
# the clientConfig.service field instead.
injectionURL: ""
# Sidecar injector mutating webhook configuration path value for the clientConfig.service field.
# Override to pass env variables, for example: /inject/cluster/remote/net/network2
injectionPath: "/inject/cluster/cluster2/net/network1"
injectionCABundle: ""
telemetry:
enabled: true
v2:
# For Null VM case now.
# This also enables metadata exchange.
enabled: true
# Indicate if prometheus stats filter is enabled or not
prometheus:
enabled: true
# stackdriver filter settings.
stackdriver:
enabled: false
# Revision is set as 'version' label and part of the resource names when installing multiple control planes.
revision: ""
# Revision tags are aliases to Istio control plane revisions
revisionTags: []
# For Helm compatibility.
ownerName: ""
# meshConfig defines runtime configuration of components, including Istiod and istio-agent behavior
# See https://istio.io/docs/reference/config/istio.mesh.v1alpha1/ for all available options
meshConfig:
enablePrometheusMerge: true
experimental:
stableValidationPolicy: false
global:
# Used to locate istiod.
istioNamespace: istio-system
# List of cert-signers to allow "approve" action in the istio cluster role
#
# certSigners:
# - clusterissuers.cert-manager.io/istio-ca
certSigners: []
# enable pod disruption budget for the control plane, which is used to
# ensure Istio control plane components are gradually upgraded or recovered.
defaultPodDisruptionBudget:
enabled: true
# The values aren't mutable due to a current PodDisruptionBudget limitation
# minAvailable: 1
# A minimal set of requested resources to applied to all deployments so that
# Horizontal Pod Autoscaler will be able to function (if set).
# Each component can overwrite these default values by adding its own resources
# block in the relevant section below and setting the desired resources values.
defaultResources:
requests:
cpu: 10m
# memory: 128Mi
# limits:
# cpu: 100m
# memory: 128Mi
# Default hub for Istio images.
# Releases are published to docker hub under 'istio' project.
# Dev builds from prow are on gcr.io
hub: docker.io/istio
# Default tag for Istio images.
tag: 1.25.0
# Variant of the image to use.
# Currently supported are: [debug, distroless]
variant: ""
# Specify image pull policy if default behavior isn't desired.
# Default behavior: latest images will be Always else IfNotPresent.
imagePullPolicy: ""
# ImagePullSecrets for all ServiceAccount, list of secrets in the same namespace
# to use for pulling any images in pods that reference this ServiceAccount.
# For components that don't use ServiceAccounts (i.e. grafana, servicegraph, tracing)
# ImagePullSecrets will be added to the corresponding Deployment(StatefulSet) objects.
# Must be set for any cluster configured with private docker registry.
imagePullSecrets: []
# - private-registry-key
# Enabled by default in master for maximising testing.
istiod:
enableAnalysis: false
# To output all istio components logs in json format by adding --log_as_json argument to each container argument
logAsJson: false
# Comma-separated minimum per-scope logging level of messages to output, in the form of <scope>:<level>,<scope>:<level>
# The control plane has different scopes depending on component, but can configure default log level across all components
# If empty, default scope and level will be used as configured in code
logging:
level: "default:info"
omitSidecarInjectorConfigMap: false
# Configure whether Operator manages webhook configurations. The current behavior
# of Istiod is to manage its own webhook configurations.
# When this option is set as true, Istio Operator, instead of webhooks, manages the
# webhook configurations. When this option is set as false, webhooks manage their
# own webhook configurations.
operatorManageWebhooks: false
# Custom DNS config for the pod to resolve names of services in other
# clusters. Use this to add additional search domains, and other settings.
# see
# https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#dns-config
# This does not apply to gateway pods as they typically need a different
# set of DNS settings than the normal application pods (e.g., in
# multicluster scenarios).
# NOTE: If using templates, follow the pattern in the commented example below.
#podDNSSearchNamespaces:
#- global
#- "{{ valueOrDefault .DeploymentMeta.Namespace \"default\" }}.global"
# Kubernetes >=v1.11.0 will create two PriorityClass, including system-cluster-critical and
# system-node-critical, it is better to configure this in order to make sure your Istio pods
# will not be killed because of low priority class.
# Refer to https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
# for more detail.
priorityClassName: ""
proxy:
image: proxyv2
# This controls the 'policy' in the sidecar injector.
autoInject: enabled
# CAUTION: It is important to ensure that all Istio helm charts specify the same clusterDomain value
# cluster domain. Default value is "cluster.local".
clusterDomain: "cluster.local"
# Per Component log level for proxy, applies to gateways and sidecars. If a component level is
# not set, then the global "logLevel" will be used.
componentLogLevel: "misc:error"
# istio ingress capture allowlist
# examples:
# Redirect only selected ports: --includeInboundPorts="80,8080"
excludeInboundPorts: ""
includeInboundPorts: "*"
# istio egress capture allowlist
# https://istio.io/docs/tasks/traffic-management/egress.html#calling-external-services-directly
# example: includeIPRanges: "172.30.0.0/16,172.20.0.0/16"
# would only capture egress traffic on those two IP Ranges, all other outbound traffic would
# be allowed by the sidecar
includeIPRanges: "*"
excludeIPRanges: ""
includeOutboundPorts: ""
excludeOutboundPorts: ""
# Log level for proxy, applies to gateways and sidecars.
# Expected values are: trace|debug|info|warning|error|critical|off
logLevel: warning
# Specify the path to the outlier event log.
# Example: /dev/stdout
outlierLogPath: ""
#If set to true, istio-proxy container will have privileged securityContext
privileged: false
# The number of successive failed probes before indicating readiness failure.
readinessFailureThreshold: 4
# The initial delay for readiness probes in seconds.
readinessInitialDelaySeconds: 0
# The period between readiness probes.
readinessPeriodSeconds: 15
# Enables or disables a startup probe.
# For optimal startup times, changing this should be tied to the readiness probe values.
#
# If the probe is enabled, it is recommended to have delay=0s,period=15s,failureThreshold=4.
# This ensures the pod is marked ready immediately after the startup probe passes (which has a 1s poll interval),
# and doesn't spam the readiness endpoint too much
#
# If the probe is disabled, it is recommended to have delay=1s,period=2s,failureThreshold=30.
# This ensures the startup is reasonable fast (polling every 2s). 1s delay is used since the startup is not often ready instantly.
startupProbe:
enabled: true
failureThreshold: 600 # 10 minutes
# Resources for the sidecar.
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 2000m
memory: 1024Mi
# Default port for Pilot agent health checks. A value of 0 will disable health checking.
statusPort: 15020
# Specify which tracer to use. One of: zipkin, lightstep, datadog, stackdriver, none.
# If using stackdriver tracer outside GCP, set env GOOGLE_APPLICATION_CREDENTIALS to the GCP credential file.
tracer: "none"
proxy_init:
# Base name for the proxy_init container, used to configure iptables.
image: proxyv2
# Bypasses iptables idempotency handling, and attempts to apply iptables rules regardless of table state, which may cause unrecoverable failures.
# Do not use unless you need to work around an issue of the idempotency handling. This flag will be removed in future releases.
forceApplyIptables: false
# configure remote pilot and istiod service and endpoint
remotePilotAddress: "192.168.12.131"
##############################################################################################
# The following values are found in other charts. To effectively modify these values, make #
# make sure they are consistent across your Istio helm charts #
##############################################################################################
# The customized CA address to retrieve certificates for the pods in the cluster.
# CSR clients such as the Istio Agent and ingress gateways can use this to specify the CA endpoint.
# If not set explicitly, default to the Istio discovery address.
caAddress: ""
# Enable control of remote clusters.
externalIstiod: false
# Configure a remote cluster as the config cluster for an external istiod.
configCluster: true
# configValidation enables the validation webhook for Istio configuration.
configValidation: true
# Mesh ID means Mesh Identifier. It should be unique within the scope where
# meshes will interact with each other, but it is not required to be
# globally/universally unique. For example, if any of the following are true,
# then two meshes must have different Mesh IDs:
# - Meshes will have their telemetry aggregated in one place
# - Meshes will be federated together
# - Policy will be written referencing one mesh from the other
#
# If an administrator expects that any of these conditions may become true in
# the future, they should ensure their meshes have different Mesh IDs
# assigned.
#
# Within a multicluster mesh, each cluster must be (manually or auto)
# configured to have the same Mesh ID value. If an existing cluster 'joins' a
# multicluster mesh, it will need to be migrated to the new mesh ID. Details
# of migration TBD, and it may be a disruptive operation to change the Mesh
# ID post-install.
#
# If the mesh admin does not specify a value, Istio will use the value of the
# mesh's Trust Domain. The best practice is to select a proper Trust Domain
# value.
meshID: ""
# Configure the mesh networks to be used by the Split Horizon EDS.
#
# The following example defines two networks with different endpoints association methods.
# For `network1` all endpoints that their IP belongs to the provided CIDR range will be
# mapped to network1. The gateway for this network example is specified by its public IP
# address and port.
# The second network, `network2`, in this example is defined differently with all endpoints
# retrieved through the specified Multi-Cluster registry being mapped to network2. The
# gateway is also defined differently with the name of the gateway service on the remote
# cluster. The public IP for the gateway will be determined from that remote service (only
# LoadBalancer gateway service type is currently supported, for a NodePort type gateway service,
# it still need to be configured manually).
#
# meshNetworks:
# network1:
# endpoints:
# - fromCidr: "192.168.0.1/24"
# gateways:
# - address: 1.1.1.1
# port: 80
# network2:
# endpoints:
# - fromRegistry: reg1
# gateways:
# - registryServiceName: istio-ingressgateway.istio-system.svc.cluster.local
# port: 443
#
meshNetworks: {}
# Use the user-specified, secret volume mounted key and certs for Pilot and workloads.
mountMtlsCerts: false
multiCluster:
# Set to true to connect two kubernetes clusters via their respective
# ingressgateway services when pods in each cluster cannot directly
# talk to one another. All clusters should be using Istio mTLS and must
# have a shared root CA for this model to work.
enabled: false
# Should be set to the name of the cluster this installation will run in. This is required for sidecar injection
# to properly label proxies
clusterName: "dmz"
# Network defines the network this cluster belong to. This name
# corresponds to the networks in the map of mesh networks.
network: ""
# Configure the certificate provider for control plane communication.
# Currently, two providers are supported: "kubernetes" and "istiod".
# As some platforms may not have kubernetes signing APIs,
# Istiod is the default
pilotCertProvider: istiod
sds:
# The JWT token for SDS and the aud field of such JWT. See RFC 7519, section 4.1.3.
# When a CSR is sent from Istio Agent to the CA (e.g. Istiod), this aud is to make sure the
# JWT is intended for the CA.
token:
aud: istio-ca
sts:
# The service port used by Security Token Service (STS) server to handle token exchange requests.
# Setting this port to a non-zero value enables STS server.
servicePort: 0
# The name of the CA for workload certificates.
# For example, when caName=GkeWorkloadCertificate, GKE workload certificates
# will be used as the certificates for workloads.
# The default value is "" and when caName="", the CA will be configured by other
# mechanisms (e.g., environmental variable CA_PROVIDER).
caName: ""
waypoint:
# Resources for the waypoint proxy.
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: "2"
memory: 1Gi
# If specified, affinity defines the scheduling constraints of waypoint pods.
affinity: {}
# Topology Spread Constraints for the waypoint proxy.
topologySpreadConstraints: []
# Node labels for the waypoint proxy.
nodeSelector: {}
# Tolerations for the waypoint proxy.
tolerations: []
base:
# For istioctl usage to disable istio config crds in base
enableIstioConfigCRDs: true
# Gateway Settings
gateways:
# Define the security context for the pod.
# If unset, this will be automatically set to the minimum privileges required to bind to port 80 and 443.
# On Kubernetes 1.22+, this only requires the `net.ipv4.ip_unprivileged_port_start` sysctl.
securityContext: {}
# Set to `type: RuntimeDefault` to use the default profile for templated gateways, if your container runtime supports it
seccompProfile: {}
base:
profile: remote
global:
imagePullSecrets: []
istioNamespace: istio-system
base:
excludedCRDs: []
enableCRDTemplates: true
validationURL: ""
validationCABundle: ""
enableIstioConfigCRDs: true
defaultRevision: "default"
experimental:
stableValidationPolicy: false
gateway:
# Name allows overriding the release name. Generally this should not be set
name: "istio-eastwestgateway"
# revision declares which revision this gateway is a part of
revision: ""
# Controls the spec.replicas setting for the Gateway deployment if set.
# Otherwise defaults to Kubernetes Deployment default (1).
replicaCount:
kind: Deployment
rbac:
# If enabled, roles will be created to enable accessing certificates from Gateways. This is not needed
# when using http://gateway-api.org/.
enabled: true
serviceAccount:
# If set, a service account will be created. Otherwise, the default is used
create: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set, the release name is used
name: ""
podAnnotations:
prometheus.io/port: "15020"
prometheus.io/scrape: "true"
prometheus.io/path: "/stats/prometheus"
inject.istio.io/templates: "gateway"
sidecar.istio.io/inject: "true"
# Define the security context for the pod.
# If unset, this will be automatically set to the minimum privileges required to bind to port 80 and 443.
# On Kubernetes 1.22+, this only requires the `net.ipv4.ip_unprivileged_port_start` sysctl.
securityContext: {}
containerSecurityContext: {}
service:
# Type of service. Set to "None" to disable the service entirely
type: LoadBalancer
ports:
- name: status-port
port: 15021
protocol: TCP
targetPort: 15021
- name: http2
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
annotations: {}
loadBalancerIP: ""
loadBalancerSourceRanges: []
externalTrafficPolicy: ""
externalIPs: []
ipFamilyPolicy: ""
ipFamilies: []
## Whether to automatically allocate NodePorts (only for LoadBalancers).
# allocateLoadBalancerNodePorts: false
## Set LoadBalancer class (only for LoadBalancers).
# loadBalancerClass: ""
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 2000m
memory: 1024Mi
autoscaling:
enabled: true
minReplicas: 1
maxReplicas: 5
targetCPUUtilizationPercentage: 80
targetMemoryUtilizationPercentage: {}
autoscaleBehavior: {}
# Pod environment variables
env: {}
# Deployment Update strategy
strategy: {}
# Sets the Deployment minReadySeconds value
minReadySeconds:
# Optionally configure a custom readinessProbe. By default the control plane
# automatically injects the readinessProbe. If you wish to override that
# behavior, you may define your own readinessProbe here.
readinessProbe: {}
# Labels to apply to all resources
labels:
# By default, don't enroll gateways into the ambient dataplane
"istio.io/dataplane-mode": none
# Annotations to apply to all resources
annotations: {}
nodeSelector: {}
tolerations: []
topologySpreadConstraints: []
affinity: {}
# If specified, the gateway will act as a network gateway for the given network.
networkGateway: "network1"
# Specify image pull policy if default behavior isn't desired.
# Default behavior: latest images will be Always else IfNotPresent
imagePullPolicy: ""
imagePullSecrets: []
# This value is used to configure a Kubernetes PodDisruptionBudget for the gateway.
#
# By default, the `podDisruptionBudget` is disabled (set to `{}`),
# which means that no PodDisruptionBudget resource will be created.
#
# To enable the PodDisruptionBudget, configure it by specifying the
# `minAvailable` or `maxUnavailable`. For example, to set the
# minimum number of available replicas to 1, you can update this value as follows:
#
# podDisruptionBudget:
# minAvailable: 1
#
# Or, to allow a maximum of 1 unavailable replica, you can set:
#
# podDisruptionBudget:
# maxUnavailable: 1
#
# You can also specify the `unhealthyPodEvictionPolicy` field, and the valid values are `IfHealthyBudget` and `AlwaysAllow`.
# For example, to set the `unhealthyPodEvictionPolicy` to `AlwaysAllow`, you can update this value as follows:
#
# podDisruptionBudget:
# minAvailable: 1
# unhealthyPodEvictionPolicy: AlwaysAllow
#
# To disable the PodDisruptionBudget, you can leave it as an empty object `{}`:
#
# podDisruptionBudget: {}
#
podDisruptionBudget: {}
# Sets the per-pod terminationGracePeriodSeconds setting.
terminationGracePeriodSeconds: 30
# A list of `Volumes` added into the Gateway Pods. See
# https://kubernetes.io/docs/concepts/storage/volumes/.
volumes: []
# A list of `VolumeMounts` added into the Gateway Pods. See
# https://kubernetes.io/docs/concepts/storage/volumes/.
volumeMounts: []
# Configure this to a higher priority class in order to make sure your Istio gateway pods
# will not be killed because of low priority class.
# Refer to https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
# for more detail.
priorityClassName: ""

View File

@@ -0,0 +1,12 @@
apiVersion: v2
name: metallb-system
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
dependencies:
- name: metallb
repository: https://metallb.github.io/metallb
version: 0.14.9

View File

@@ -0,0 +1,17 @@
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: cheap
spec:
addresses:
- 192.168.98.130-192.168.98.140
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: pool
namespace: metallb-system
spec:
ipAddressPools:
- cheap

115
dmz/terraform/k3s.tf Normal file
View File

@@ -0,0 +1,115 @@
resource "proxmox_vm_qemu" "k3smaster" {
count = local.k3smaster.count
ciuser = "administrator"
vmid = "${local.vlan}${local.k3smaster.ip[count.index]}"
name = local.k3smaster.name[count.index]
target_node = local.k3smaster.node[count.index]
clone = local.template
tags = local.k3smaster.tags
qemu_os = "l26"
full_clone = true
os_type = "cloud-init"
agent = 1
cores = local.k3smaster.cores
sockets = 1
cpu_type = "host"
memory = local.k3smaster.memory
scsihw = "virtio-scsi-pci"
#bootdisk = "scsi0"
boot = "order=virtio0"
onboot = true
sshkeys = local.sshkeys
vga {
type = "serial0"
}
serial {
id = 0
type = "socket"
}
disks {
ide {
ide2 {
cloudinit {
storage = local.storage
}
}
}
virtio {
virtio0 {
disk {
size = local.k3smaster.drive
format = local.format
storage = local.storage
}
}
}
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
tag = local.vlan
}
#Cloud Init Settings
ipconfig0 = "ip=192.168.${local.vlan}.${local.k3smaster.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
searchdomain = "durp.loc"
nameserver = local.dnsserver
}
resource "proxmox_vm_qemu" "k3sserver" {
count = local.k3sserver.count
ciuser = "administrator"
vmid = "${local.vlan}${local.k3sserver.ip[count.index]}"
name = local.k3sserver.name[count.index]
target_node = local.k3sserver.node[count.index]
clone = local.template
tags = local.k3sserver.tags
qemu_os = "l26"
full_clone = true
os_type = "cloud-init"
agent = 1
cores = local.k3sserver.cores
sockets = 1
cpu_type = "host"
memory = local.k3sserver.memory
scsihw = "virtio-scsi-pci"
#bootdisk = "scsi0"
boot = "order=virtio0"
onboot = true
sshkeys = local.sshkeys
vga {
type = "serial0"
}
serial {
id = 0
type = "socket"
}
disks {
ide {
ide2 {
cloudinit {
storage = local.storage
}
}
}
virtio {
virtio0 {
disk {
size = local.k3sserver.drive
format = local.format
storage = local.storage
}
}
}
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
tag = local.vlan
}
#Cloud Init Settings
ipconfig0 = "ip=192.168.${local.vlan}.${local.k3sserver.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
searchdomain = "durp.loc"
nameserver = local.dnsserver
}

48
dmz/terraform/main.tf Normal file
View File

@@ -0,0 +1,48 @@
terraform {
backend "http" {}
required_providers {
proxmox = {
source = "Telmate/proxmox"
version = "3.0.1-rc6"
}
}
}
provider "proxmox" {
pm_parallel = 1
pm_tls_insecure = true
pm_api_url = var.pm_api_url
pm_user = var.pm_user
pm_password = var.pm_password
pm_debug = false
}
locals {
sshkeys = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEphzWgwUZnvL6E5luKLt3WO0HK7Kh63arSMoNl5gmjzXyhG1DDW0OKfoIl0T+JZw/ZjQ7iii6tmSLFRk6nuYCldqe5GVcFxvTzX4/xGEioAyG0IiUGKy6s+9xzO8QXF0EtSNPH0nfHNKcCjgwWAzM+Lt6gW0Vqs+aU5ICuDiEchmvYPz+rBaVldJVTG7m3ogKJ2aIF7HU/pCPp5l0E9gMOw7s0ABijuc3KXLEWCYgL39jIST6pFH9ceRLmu8Xy5zXHAkkEEauY/e6ld0hlzLadiUD7zYJMdDcm0oRvenYcUlaUl9gS0569IpfsJsjCejuqOxCKzTHPJDOT0f9TbIqPXkGq3s9oEJGpQW+Z8g41BqRpjBCdBk+yv39bzKxlwlumDwqgx1WP8xxKavAWYNqNRG7sBhoWwtxYEOhKXoLNjBaeDRnO5OY5AQJvONWpuByyz0R/gTh4bOFVD+Y8WWlKbT4zfhnN70XvapRsbZiaGhJBPwByAMGg6XxSbC6xtbyligVGCEjCXbTLkeKq1w0DuItY+FBGO3J2k90OiciTVSeyiVz9J/Y03UB0gHdsMCoVNrj+9QWfrTLDhM7D5YrXUt5nj2LQTcbtf49zoQXWxUhozlg42E/FJU/Yla7y55qWizAEVyP2/Ks/PHrF679k59HNd2IJ/aicA9QnmWtLQ== ansible"
template = "Debian12-Template"
storage = "cache-domains"
emulatessd = true
format = "raw"
dnsserver = "192.168.98.1"
vlan = 98
k3smaster = {
tags = "k3s_dmz"
count = 3
name = ["master01-dmz", "master02-dmz", "master03-dmz"]
cores = 2
memory = "4096"
drive = 20
node = ["mothership", "overlord", "vanguard"]
ip = ["11", "12", "13"]
}
k3sserver = {
tags = "k3s_dmz"
count = 3
name = ["node01-dmz", "node02-dmz", "node03-dmz"]
cores = 4
memory = "8192"
drive = 240
node = ["mothership", "overlord", "vanguard"]
ip = ["21", "22", "23"]
}
}

View File

@@ -0,0 +1,14 @@
variable "pm_api_url" {
description = "API URL to Proxmox provider"
type = string
}
variable "pm_password" {
description = "Passowrd to Proxmox provider"
type = string
}
variable "pm_user" {
description = "UIsername to Proxmox provider"
type = string
}

View File

@@ -8,4 +8,4 @@ appVersion: 0.0.1
dependencies:
- name: traefik
repository: https://traefik.github.io/charts
version: 22.1.0
version: 34.0.0

View File

@@ -0,0 +1,16 @@
#apiVersion: v1
#kind: ConfigMap
#metadata:
# name: traefik-configmap
#data:
# config.yml: |
# http:
# routers:
# router0:
# service: service0
# rule: Host(`testing.durp.info`)
# services:
# service0:
# loadBalancer:
# servers:
# - url: https://192.168.20.130

View File

@@ -0,0 +1,35 @@
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: authentik-proxy-provider
namespace: traefik
spec:
forwardAuth:
address: http://ak-outpost-dmz-embedded-outpost.authentik.svc.cluster.local:9000/outpost.goauthentik.io/auth/traefik?rd=$scheme://$http_host$request_uri
trustForwardHeader: true
authResponseHeaders:
- X-authentik-username
- X-authentik-groups
- X-authentik-email
- X-authentik-name
- X-authentik-uid
- X-authentik-jwt
- X-authentik-meta-jwks
- X-authentik-meta-outpost
- X-authentik-meta-provider
- X-authentik-meta-app
- X-authentik-meta-version
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: whitelist
namespace: traefik
spec:
ipWhiteList:
sourceRange:
- 192.168.0.0/16
- 172.16.0.0/12
- 10.0.0.0/8

View File

@@ -0,0 +1,34 @@
#apiVersion: traefik.io/v1alpha1
#kind: IngressRoute
#metadata:
# name: traefik-ingress
#spec:
# entryPoints:
# - websecure
# routes:
# - match: Host(`traefik.durp.info`)
# kind: Rule
# services:
# - name: api@internal
# kind: TraefikService
# tls:
# secretName: traefik-tls
#
#---
#
#apiVersion: cert-manager.io/v1
#kind: Certificate
#metadata:
# name: traefik-tls
# namespace: traefik
#spec:
# secretName: traefik-tls
# issuerRef:
# name: letsencrypt-production
# kind: ClusterIssuer
# commonName: "traefik.durp.info"
# dnsNames:
# - "traefik.durp.info"
#
#---
#

59
dmz/traefik/values.yaml Normal file
View File

@@ -0,0 +1,59 @@
traefik:
image:
# registry: registry.durp.info
# repository: traefik
pullPolicy: Always
providers:
kubernetesCRD:
allowCrossNamespace: true
allowExternalNameServices: true
allowEmptyServices: false
deployment:
replicas: 3
revisionHistoryLimit: 1
# volumes:
# - name: traefik-configmap
# mountPath: "/config"
# type: configMap
ingressRoute:
dashboard:
enabled: true
additionalArguments:
# - "--providers.file.filename=/config/config.yml"
- "--serversTransport.insecureSkipVerify=true"
- "--log.level=DEBUG"
- --experimental.plugins.jwt.moduleName=github.com/traefik-plugins/traefik-jwt-plugin
- --experimental.plugins.jwt.version=v0.7.0
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 1
periodSeconds: 60
# -- [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for `traefik` container.
resources:
requests:
cpu: "100m"
memory: "512Mi"
limits:
memory: "512Mi"

View File

@@ -8,5 +8,5 @@ appVersion: 0.0.1
dependencies:
- name: vault
repository: https://helm.releases.hashicorp.com
version: 0.27.0
version: 0.29.1

View File

@@ -0,0 +1,23 @@
apiVersion: external-secrets.io/v1beta1
kind: ClusterSecretStore
metadata:
name: vault
spec:
provider:
vault:
server: "https://vault.infra.durp.info"
path: "kv"
version: "v2"
auth:
kubernetes:
mountPath: "dmz-cluster"
role: "external-secrets"
serviceAccountRef:
name: "vault"
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault

13
dmz/vault/values.yaml Normal file
View File

@@ -0,0 +1,13 @@
vault:
global:
enabled: true
tlsDisable: false
externalVaultAddr: "https://vault.infra.durp.info"
resources:
requests:
memory: 256Mi
cpu: 250m
limits:
memory: 256Mi
cpu: 250m

View File

@@ -1,277 +0,0 @@
gatekeeper:
replicas: 3
revisionHistoryLimit: 10
auditInterval: 60
metricsBackends: ["prometheus"]
auditMatchKindOnly: false
constraintViolationsLimit: 20
auditFromCache: false
disableMutation: false
disableValidatingWebhook: false
validatingWebhookName: gatekeeper-validating-webhook-configuration
validatingWebhookTimeoutSeconds: 3
validatingWebhookFailurePolicy: Ignore
validatingWebhookAnnotations: {}
validatingWebhookExemptNamespacesLabels: {}
validatingWebhookObjectSelector: {}
validatingWebhookCheckIgnoreFailurePolicy: Fail
validatingWebhookCustomRules: {}
validatingWebhookURL: null
enableDeleteOperations: false
enableExternalData: true
enableGeneratorResourceExpansion: true
enableTLSHealthcheck: false
maxServingThreads: -1
mutatingWebhookName: gatekeeper-mutating-webhook-configuration
mutatingWebhookFailurePolicy: Ignore
mutatingWebhookReinvocationPolicy: Never
mutatingWebhookAnnotations: {}
mutatingWebhookExemptNamespacesLabels: {}
mutatingWebhookObjectSelector: {}
mutatingWebhookTimeoutSeconds: 1
mutatingWebhookCustomRules: {}
mutatingWebhookURL: null
mutationAnnotations: false
auditChunkSize: 500
logLevel: INFO
logDenies: false
logMutations: false
emitAdmissionEvents: false
emitAuditEvents: false
admissionEventsInvolvedNamespace: false
auditEventsInvolvedNamespace: false
resourceQuota: true
externaldataProviderResponseCacheTTL: 3m
image:
repository: openpolicyagent/gatekeeper
crdRepository: openpolicyagent/gatekeeper-crds
release: v3.15.0-beta.0
pullPolicy: Always
pullSecrets: []
preInstall:
crdRepository:
image:
repository: null
tag: v3.15.0-beta.0
postUpgrade:
labelNamespace:
enabled: false
image:
repository: openpolicyagent/gatekeeper-crds
tag: v3.15.0-beta.0
pullPolicy: IfNotPresent
pullSecrets: []
extraNamespaces: []
podSecurity: ["pod-security.kubernetes.io/audit=restricted",
"pod-security.kubernetes.io/audit-version=latest",
"pod-security.kubernetes.io/warn=restricted",
"pod-security.kubernetes.io/warn-version=latest",
"pod-security.kubernetes.io/enforce=restricted",
"pod-security.kubernetes.io/enforce-version=v1.24"]
extraAnnotations: {}
priorityClassName: ""
affinity: {}
tolerations: []
nodeSelector: {kubernetes.io/os: linux}
resources: {}
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsGroup: 999
runAsNonRoot: true
runAsUser: 1000
postInstall:
labelNamespace:
enabled: true
extraRules: []
image:
repository: openpolicyagent/gatekeeper-crds
tag: v3.15.0-beta.0
pullPolicy: IfNotPresent
pullSecrets: []
extraNamespaces: []
podSecurity: ["pod-security.kubernetes.io/audit=restricted",
"pod-security.kubernetes.io/audit-version=latest",
"pod-security.kubernetes.io/warn=restricted",
"pod-security.kubernetes.io/warn-version=latest",
"pod-security.kubernetes.io/enforce=restricted",
"pod-security.kubernetes.io/enforce-version=v1.24"]
extraAnnotations: {}
priorityClassName: ""
probeWebhook:
enabled: true
image:
repository: curlimages/curl
tag: 7.83.1
pullPolicy: IfNotPresent
pullSecrets: []
waitTimeout: 60
httpTimeout: 2
insecureHTTPS: false
priorityClassName: ""
affinity: {}
tolerations: []
nodeSelector: {kubernetes.io/os: linux}
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsGroup: 999
runAsNonRoot: true
runAsUser: 1000
preUninstall:
deleteWebhookConfigurations:
extraRules: []
enabled: false
image:
repository: openpolicyagent/gatekeeper-crds
tag: v3.15.0-beta.0
pullPolicy: IfNotPresent
pullSecrets: []
priorityClassName: ""
affinity: {}
tolerations: []
nodeSelector: {kubernetes.io/os: linux}
resources: {}
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsGroup: 999
runAsNonRoot: true
runAsUser: 1000
podAnnotations: {}
auditPodAnnotations: {}
podLabels: {}
podCountLimit: "100"
secretAnnotations: {}
enableRuntimeDefaultSeccompProfile: true
controllerManager:
exemptNamespaces: []
exemptNamespacePrefixes: []
hostNetwork: false
dnsPolicy: ClusterFirst
port: 8443
metricsPort: 8888
healthPort: 9090
readinessTimeout: 1
livenessTimeout: 1
priorityClassName: system-cluster-critical
disableCertRotation: false
tlsMinVersion: 1.3
clientCertName: ""
strategyType: RollingUpdate
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: gatekeeper.sh/operation
operator: In
values:
- webhook
topologyKey: kubernetes.io/hostname
weight: 100
topologySpreadConstraints: []
tolerations: []
nodeSelector: {kubernetes.io/os: linux}
resources:
limits:
memory: 512Mi
requests:
cpu: 100m
memory: 512Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsGroup: 999
runAsNonRoot: true
runAsUser: 1000
podSecurityContext:
fsGroup: 999
supplementalGroups:
- 999
extraRules: []
networkPolicy:
enabled: false
ingress: { }
# - from:
# - ipBlock:
# cidr: 0.0.0.0/0
audit:
enablePubsub: false
connection: audit-connection
channel: audit-channel
hostNetwork: false
dnsPolicy: ClusterFirst
metricsPort: 8888
healthPort: 9090
readinessTimeout: 1
livenessTimeout: 1
priorityClassName: system-cluster-critical
disableCertRotation: false
affinity: {}
tolerations: []
nodeSelector: {kubernetes.io/os: linux}
resources:
limits:
memory: 512Mi
requests:
cpu: 100m
memory: 512Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsGroup: 999
runAsNonRoot: true
runAsUser: 1000
podSecurityContext:
fsGroup: 999
supplementalGroups:
- 999
writeToRAMDisk: false
extraRules: []
crds:
affinity: {}
tolerations: []
nodeSelector: {kubernetes.io/os: linux}
resources: {}
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsGroup: 65532
runAsNonRoot: true
runAsUser: 65532
pdb:
controllerManager:
minAvailable: 1
service: {}
disabledBuiltins: ["{http.send}"]
psp:
enabled: true
upgradeCRDs:
enabled: true
extraRules: []
priorityClassName: ""
rbac:
create: true
externalCertInjection:
enabled: false
secretName: gatekeeper-webhook-server-cert

View File

@@ -0,0 +1,95 @@
stages:
- plan
- apply
- destroy
variables:
WORKDIR: $CI_PROJECT_DIR/infra/terraform
GITLAB_TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/infra
image:
name: registry.internal.durp.info/opentofu/opentofu:latest
entrypoint: [""]
.tf-init:
before_script:
- cd $WORKDIR
- tofu init
-reconfigure
-backend-config="address=${GITLAB_TF_ADDRESS}"
-backend-config="lock_address=${GITLAB_TF_ADDRESS}/lock"
-backend-config="unlock_address=${GITLAB_TF_ADDRESS}/lock"
-backend-config="username=gitlab-ci-token"
-backend-config="password=${CI_JOB_TOKEN}"
-backend-config="lock_method=POST"
-backend-config="unlock_method=DELETE"
-backend-config="retry_wait_min=5"
format:
stage: .pre
allow_failure: false
script:
- cd $WORKDIR
- tofu fmt -diff -check -write=false
rules:
- changes:
- "infra/terraform/*.tf"
validate:
stage: .pre
allow_failure: false
extends: .tf-init
script:
- tofu validate
rules:
- changes:
- "infra/terraform/*.tf"
plan-infrastructure:
stage: plan
variables:
PLAN: plan.tfplan
JSON_PLAN_FILE: tfplan.json
ENVIRONMENT_NAME: infra
allow_failure: false
extends: .tf-init
script:
- apk add --update curl jq
- alias convert_report="jq -r '([.resource_changes[].change.actions?]|flatten)|{\"create\":(map(select(.==\"create\"))|length),\"update\":(map(select(.==\"update\"))|length),\"delete\":(map(select(.==\"delete\"))|length)}'"
- tofu plan -out=$PLAN $ARGUMENTS
- tofu show --json $PLAN | jq -r '([.resource_changes[].change.actions?]|flatten)|{"create":(map(select(.=="create"))|length),"update":(map(select(.=="update"))|length),"delete":(map(select(.=="delete"))|length)}' > $JSON_PLAN_FILE
artifacts:
reports:
terraform: $WORKDIR/$JSON_PLAN_FILE
needs: ["validate","format"]
rules:
- changes:
- "infra/terraform/*.tf"
apply-infrastructure:
stage: apply
variables:
ENVIRONMENT_NAME: infra
allow_failure: false
extends: .tf-init
script:
- tofu apply -auto-approve $ARGUMENTS
rules:
- changes:
- "infra/terraform/*.tf"
when: manual
needs: ["plan-infrastructure"]
destroy-infrastructure:
stage: destroy
variables:
ENVIRONMENT_NAME: infra
allow_failure: false
extends: .tf-init
script:
- tofu destroy -auto-approve $ARGUMENTS
rules:
- changes:
- "infra/terraform/*.tf"
when: manual
needs: ["plan-infrastructure"]

12
infra/argocd/Chart.yaml Normal file
View File

@@ -0,0 +1,12 @@
apiVersion: v2
name: argocd
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
dependencies:
- name: argo-cd
repository: https://argoproj.github.io/argo-helm
version: 6.11.1

View File

@@ -0,0 +1,79 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argocd
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: infra/argocd
destination:
namespace: argocd
name: in-cluster
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
---
#apiVersion: external-secrets.io/v1beta1
#kind: ExternalSecret
#metadata:
# name: vault-argocd
# labels:
# app.kubernetes.io/part-of: argocd
#spec:
# secretStoreRef:
# name: vault
# kind: ClusterSecretStore
# target:
# name: client-secret
# data:
# - secretKey: clientSecret
# remoteRef:
# key: secrets/argocd/authentik
# property: clientsecret
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: argocd-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-production
spec:
entryPoints:
- websecure
routes:
- match: Host(`argocd.infra.durp.info`)
#middlewares:
# - name: whitelist
# namespace: traefik
kind: Rule
services:
- name: argocd-server
port: 443
scheme: https
tls:
secretName: argocd-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: argocd-tls
spec:
secretName: argocd-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "argocd.infra.durp.info"
dnsNames:
- "argocd.infra.durp.info"

View File

@@ -0,0 +1,47 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: authentik
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: infra/authentik
destination:
namespace: authentik
name: in-cluster
syncPolicy:
managedNamespaceMetadata:
labels:
istio-injection: enabled
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: authentik-dmz
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: dmz/authentik
destination:
namespace: authentik
name: dmz
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -0,0 +1,44 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: cert-manager
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: infra/cert-manager
destination:
namespace: cert-manager
name: in-cluster
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: cert-manager-dmz
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: dmz/cert-manager
destination:
namespace: cert-manager
name: dmz
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -0,0 +1,21 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-dns-dmz
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: dmz/external-dns
destination:
namespace: external-dns
name: dmz
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -0,0 +1,44 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-secrets
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: infra/external-secrets
destination:
namespace: external-secrets
name: in-cluster
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-secrets-dmz
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: dmz/external-secrets
destination:
namespace: external-secrets
name: dmz
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -0,0 +1,21 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: gitlab-runner-dmz
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: dmz/gitlab-runner
destination:
namespace: gitlab-runner
name: dmz
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -1,20 +1,21 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: crossplane
name: internal-proxy
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: crossplane
path: dmz/internalproxy
destination:
namespace: crossplane
name: in-cluster
namespace: internalproxy
name: dmz
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -0,0 +1,53 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: istio-system
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: infra/istio-system
destination:
namespace: istio-system
name: in-cluster
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
ignoreDifferences:
- group: admissionregistration.k8s.io
kind: ValidatingWebhookConfiguration
jsonPointers:
- /webhooks/0/failurePolicy
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: istio-system-dmz
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: dmz/istio-system
destination:
namespace: istio-system
name: dmz
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
ignoreDifferences:
- group: admissionregistration.k8s.io
kind: ValidatingWebhookConfiguration
jsonPointers:
- /webhooks/0/failurePolicy

View File

@@ -1,16 +1,16 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argocd
name: litellm
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: argocd
path: infra/litellm
destination:
namespace: argocd
namespace: litellm
name: in-cluster
syncPolicy:
automated:

View File

@@ -8,7 +8,7 @@ spec:
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: longhorn
path: infra/longhorn
destination:
namespace: longhorn-system
name: in-cluster

View File

@@ -0,0 +1,44 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: metallb-system
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: infra/metallb-system
destination:
namespace: metallb-system
name: in-cluster
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: metallb-system-dmz
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: dmz/metallb-system
destination:
namespace: metallb-system
name: dmz
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -0,0 +1,50 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: traefik
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: infra/traefik
destination:
namespace: traefik
name: in-cluster
syncPolicy:
managedNamespaceMetadata:
labels:
istio-injection: enabled
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: traefik-dmz
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: dmz/traefik
destination:
namespace: traefik
name: dmz
syncPolicy:
# managedNamespaceMetadata:
# labels:
# istio-injection: enabled
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View File

@@ -0,0 +1,53 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: vault
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: infra/vault
destination:
namespace: vault
name: in-cluster
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
ignoreDifferences:
- group: admissionregistration.k8s.io
kind: MutatingWebhookConfiguration
jqPathExpressions:
- .webhooks[]?.clientConfig.caBundle
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: vault-dmz
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: dmz/vault
destination:
namespace: vault
name: dmz
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
ignoreDifferences:
- group: admissionregistration.k8s.io
kind: MutatingWebhookConfiguration
jqPathExpressions:
- .webhooks[]?.clientConfig.caBundle

62
infra/argocd/values.yaml Normal file
View File

@@ -0,0 +1,62 @@
argo-cd:
global:
revisionHistoryLimit: 1
image:
repository: registry.durp.info/argoproj/argocd
imagePullPolicy: Always
server:
#extraArgs:
# - --dex-server-plaintext
# - --dex-server=argocd-dex-server:5556
# oidc.config: |
# name: AzureAD
# issuer: https://login.microsoftonline.com/TENANT_ID/v2.0
# clientID: CLIENT_ID
# clientSecret: $oidc.azuread.clientSecret
# requestedIDTokenClaims:
# groups:
# essential: true
# requestedScopes:
# - openid
# - profile
# - email
dex:
enabled: true
image:
repository: registry.durp.info/dexidp/dex
imagePullPolicy: Always
configs:
cm:
create: true
annotations: {}
url: https://argocd.internal.durp.info
oidc.tls.insecure.skip.verify: "true"
dex.config: |
connectors:
- config:
issuer: https://authentik.durp.info/application/o/argocd/
clientID: dbb8ffc06104fb6e7fac3e4ae7fafb1d90437625
clientSecret: $client-secret:clientSecret
insecureEnableGroups: true
scopes:
- openid
- profile
- email
- groups
name: authentik
type: oidc
id: authentik
rbac:
create: true
policy.csv: |
g, ArgoCD Admins, role:admin
scopes: "[groups]"
server:
route:
enabled: false

View File

@@ -9,4 +9,4 @@ appVersion: "1.16.0"
dependencies:
- name: authentik
repository: https://charts.goauthentik.io
version: 2024.4.1
version: 2024.8.3

View File

@@ -0,0 +1,31 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: authentik-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`authentik.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: authentik-server
port: 80
tls:
secretName: authentik-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: authentik-tls
spec:
secretName: authentik-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "authentik.durp.info"
dnsNames:
- "authentik.durp.info"

View File

@@ -0,0 +1,35 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: authentik-secret
spec:
secretStoreRef:
name: vault
kind: ClusterSecretStore
target:
name: db-pass
data:
- secretKey: dbpass
remoteRef:
key: kv/authentik/database
property: dbpass
- secretKey: secretkey
remoteRef:
key: kv/authentik/database
property: secretkey
- secretKey: postgresql-postgres-password
remoteRef:
key: kv/authentik/database
property: dbpass
- secretKey: postgresql-password
remoteRef:
key: kv/authentik/database
property: dbpass
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault

View File

@@ -13,11 +13,11 @@ authentik:
key: secretkey
revisionHistoryLimit: 1
image:
repository: registry.internal.durp.info/goauthentik/server
repository: registry.durp.info/goauthentik/server
pullPolicy: Always
authentik:
outposts:
container_image_base: registry.internal.durp.info/goauthentik/%(type)s:%(version)s
container_image_base: registry.durp.info/goauthentik/%(type)s:%(version)s
postgresql:
host: '{{ .Release.Name }}-postgresql-hl'
name: "authentik"
@@ -26,10 +26,12 @@ authentik:
server:
name: server
replicas: 3
worker:
replicas: 3
postgresql:
enabled: true
image:
registry: registry.internal.durp.info
registry: registry.durp.info
repository: bitnami/postgresql
pullPolicy: Always
postgresqlUsername: "authentik"
@@ -38,12 +40,16 @@ authentik:
persistence:
enabled: true
storageClass: longhorn
size: 16Gi
accessModes:
- ReadWriteMany
redis:
enabled: true
master:
persistence:
enabled: false
image:
registry: registry.internal.durp.info
registry: registry.durp.info
repository: bitnami/redis
pullPolicy: Always
architecture: standalone

View File

@@ -0,0 +1,11 @@
apiVersion: v2
name: cert-manager
description: A Helm chart for Kubernetes
type: application
version: 0.0.1
appVersion: 0.0.1
dependencies:
- name: cert-manager
repository: https://charts.jetstack.io
version: v1.16.3

View File

@@ -0,0 +1,6 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: issuer
secrets:
- name: issuer-token-lmzpj

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,23 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: cloudflare-api-token-secret
spec:
secretStoreRef:
name: vault
kind: ClusterSecretStore
target:
name: cloudflare-api-token-secret
data:
- secretKey: cloudflare-api-token-secret
remoteRef:
key: kv/cert-manager
property: cloudflare-api-token-secret
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault

View File

@@ -0,0 +1,26 @@
cert-manager:
crds:
enabled: true
image:
registry: registry.internal.durp.info
repository: jetstack/cert-manager-controller
pullPolicy: Always
replicaCount: 3
#extraArgs:
# - --dns01-recursive-nameservers=1.1.1.1:53,1.0.0.1:53
# - --dns01-recursive-nameservers-only
#podDnsPolicy: None
#podDnsConfig:
# nameservers:
# - "1.1.1.1"
# - "1.0.0.1"
webhook:
image:
registry: registry.internal.durp.info
repository: jetstack/cert-manager-webhook
pullPolicy: Always
cainjector:
image:
registry: registry.internal.durp.info
repository: jetstack/cert-manager-cainjector
pullPolicy: Always

View File

@@ -0,0 +1,11 @@
apiVersion: v2
name: external-secrets
description: A Helm chart for Kubernetes
type: application
version: 0.0.1
appVersion: 0.0.1
dependencies:
- name: external-secrets
repository: https://charts.external-secrets.io
version: 0.13.0

View File

@@ -0,0 +1,81 @@
apiVersion: v1
data:
vault.pem: |
-----BEGIN CERTIFICATE-----
MIIEszCCA5ugAwIBAgIUZEzzxqEuYiKHkL1df+Cb22NRRJMwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAxMJZHVycC5pbmZvMB4XDTI1MDEyMzIyMzQ0MloXDTM1MDEy
MTExMTU1NVowIDEeMBwGA1UEAxMVdmF1bHQuaW5mcmEuZHVycC5pbmZvMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkZM0ue4bMcmmATs+kGYSpR2hLUzq
scGIwCtqmaKCMbd1xhmgjnIR3zvSRptLR2GVGvc1ti6qby0jXYvcqbxkHvay00zW
2zYN+M2m4lXpuWzg1t6NEoO6XGAsGj2v0vcVktPPU9uj0rGUVGWWfsvjoXqQFg5I
jdxsxK9SvMvw2XtE3FgKxpzCyw94InIHlcPwFTO+3ZdKStZlMbUDIkmszLBrWFcr
XOsPDfLxqMy0Ck//LKIt8djh3254FHB1GG5+kI+JSW1o+tUcL2NymvIINwm/2acS
1uTm+j9W7iEXav0pJNmm+/dzSskc3Y0ftM0h2HCXgitBIaEZnUVneNHOLwIDAQAB
o4IB7zCCAeswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
BBYEFCaQ2q7j7LyBGETEZ5qaJAdlISKCMB8GA1UdIwQYMBaAFO1jCyGkpFO+QiR2
dfBMWVYeWrQ2MIH0BggrBgEFBQcBAQSB5zCB5DAzBggrBgEFBQcwAYYnaHR0cHM6
Ly8xOTIuMTY4LjIwLjI1Mzo4MjAxL3YxL3BraS9vY3NwMD0GCCsGAQUFBzABhjFo
dHRwczovL3Jvb3QtdmF1bHQuaW50ZXJuYWwuZHVycC5pbmZvL3YxL3BraS9vY3Nw
MDEGCCsGAQUFBzAChiVodHRwczovLzE5Mi4xNjguMjAuMjUzOjgyMDEvdjEvcGtp
L2NhMDsGCCsGAQUFBzAChi9odHRwczovL3Jvb3QtdmF1bHQuaW50ZXJuYWwuZHVy
cC5pbmZvL3YxL3BraS9jYTAgBgNVHREEGTAXghV2YXVsdC5pbmZyYS5kdXJwLmlu
Zm8wbwYDVR0fBGgwZjAsoCqgKIYmaHR0cHM6Ly8xOTIuMTY4LjIwLjI1Mzo4MjAx
L3YxL3BraS9jcmwwNqA0oDKGMGh0dHBzOi8vcm9vdC12YXVsdC5pbnRlcm5hbC5k
dXJwLmluZm8vdjEvcGtpL2NybDANBgkqhkiG9w0BAQsFAAOCAQEAuJ+lplY/+A5L
5LzkljbKDTy3U6PLv1LtxqVCOFGiJXBnXMjtVW07bBEUadzFRNW8GHQ3w5QzOG6k
/vE/TrrJho7l05J/uc+BUrPSNjefLmQV6hn4jrP86PR0vzRfbSqKKBIID9M7+zi6
GFvHlVkSHsQyMQp7JOoax9KVzW2Y+OIgw7Lgw2tP122WCt2SIF0QenoZHsoW0guj
tzTJRmJDjn6XeJ7L3FPkf37H6ub0Jg3zBGr6eorEFfYZNN5CXezjqMFBpRdq4UIo
1M3A7o3uyZFcFsp/vGDcMBkwaCsBV9idu/HwkvGaTUNI285ilBORPD0bMZnACq/9
+Q/cdsO5lg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEmzCCA4OgAwIBAgIUQwCAs82sgSuiaVbjANHScO2DSfAwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAxMJZHVycC5pbmZvMB4XDTI1MDEyMzExMjEyNVoXDTM1MDEy
MTExMTU1NVowFDESMBAGA1UEAxMJZHVycC5pbmZvMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAn9fjGRqqFsqguz56X6cXZwEMtD9wElwSFCb4Fc8YTzlH
4fV13QwXKESLE/Q+7bw4y4FJQ8BiGNbxxbQOOgWhfGGlQyFa1lfhJtYLfqRN5C2/
S7nr0YxDB9duc4OAExVL6Pr4/Koc+vDZY03l7RzwnF2AOM9DjFTASw01TphCQjRk
U+upiN2TUhUPejV/gMR+zXM6pn98UBKG1dNubS0HzAMwAEXAPm141NDyWUCPT9+3
6P03Ka8mUTx3X49OCtvJEGEQbtlnTFQaOSkP1yLW+XRMHw3sQaV2PWXu5fInbEpZ
+SuzmgLOXtmQNmHLav9q1qeTVkpBGPWvfh2Vh1JJhQIDAQABo4IB4zCCAd8wDgYD
VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJaP17f1Zw0V
55Ks9Uf0USVWl0BPMB8GA1UdIwQYMBaAFO1jCyGkpFO+QiR2dfBMWVYeWrQ2MIH0
BggrBgEFBQcBAQSB5zCB5DAzBggrBgEFBQcwAYYnaHR0cHM6Ly8xOTIuMTY4LjIw
LjI1Mzo4MjAxL3YxL3BraS9vY3NwMD0GCCsGAQUFBzABhjFodHRwczovL3Jvb3Qt
dmF1bHQuaW50ZXJuYWwuZHVycC5pbmZvL3YxL3BraS9vY3NwMDEGCCsGAQUFBzAC
hiVodHRwczovLzE5Mi4xNjguMjAuMjUzOjgyMDEvdjEvcGtpL2NhMDsGCCsGAQUF
BzAChi9odHRwczovL3Jvb3QtdmF1bHQuaW50ZXJuYWwuZHVycC5pbmZvL3YxL3Br
aS9jYTAUBgNVHREEDTALgglkdXJwLmluZm8wbwYDVR0fBGgwZjAsoCqgKIYmaHR0
cHM6Ly8xOTIuMTY4LjIwLjI1Mzo4MjAxL3YxL3BraS9jcmwwNqA0oDKGMGh0dHBz
Oi8vcm9vdC12YXVsdC5pbnRlcm5hbC5kdXJwLmluZm8vdjEvcGtpL2NybDANBgkq
hkiG9w0BAQsFAAOCAQEAiqAZ4zNIEkCWcvpDRq0VyJuk59sVtJr5X4FscHQ179nE
QbbvMe+EBDFS6XQml1Elj8jiPa/D5O9Oc6Iisnm5+weZKwApz/lQ+XVkWLCoEplB
ZZ9fcWVCbMLt0xlt8qn5z/mYKfbCT7ZCqDO+prQZt+ADJcQbiknfroAAqEbNKxwN
Y9uUyOWNF3SxJEch4w2dtX+IEVmxeZnhMy8OuP0SQKl8aW40ugiG0ZD5yTBBfOD9
zsrGSU/iSatn0b7bevBhaL96hz1/rNR1cL+4/albX2hrr8Rv3/SB2DLtNQlQW0ls
AfhXAqP5zL+Ytgf1Of/pVdgnhxrYUY7RKCSGY5Hagw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDLzCCAhegAwIBAgIUNHdvOzam2HPVdwXpMHUy4wl8ZRYwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAxMJZHVycC5pbmZvMB4XDTI1MDEyMzExMTUyNVoXDTM1MDEy
MTExMTU1NVowFDESMBAGA1UEAxMJZHVycC5pbmZvMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEA8XDTVEtRI3+k4yuvqVqfIiLRQJcXbmhfVtAeYk+5j9Ox
p1w9YHdnPLqLFrD1PzadjqYeAp/fwlEFfs6lqwoTS8S9vhaFqcgB57nVMb77dTBb
/08XHXOU6FPRjdFKm5QMpS7tn1XacPMy/o0bKqRREQeiuFDGVRyuF5PUgvWc1dvJ
l27JvvgYktgjfpNS4DlCxg4lGXT5abvaKf2hnr65egaIo/yRWN9wnvAzRiY7oci7
GA1oKz87Yc1tfL2gcynrwccOOCF/eUKesJR1I6GXNkN/a1fcr+Ld9Z9NhHBtO+vE
N8DsZY+kG7DE3M4BCCTFUzllcYHjaW4HaF9vZW+PYwIDAQABo3kwdzAOBgNVHQ8B
Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7WMLIaSkU75CJHZ1
8ExZVh5atDYwHwYDVR0jBBgwFoAU7WMLIaSkU75CJHZ18ExZVh5atDYwFAYDVR0R
BA0wC4IJZHVycC5pbmZvMA0GCSqGSIb3DQEBCwUAA4IBAQAS/qUI/1Yv07xUTK5k
r93kC7GSPpmpkXIsfjChAl93sebN143fu70NUP74jjCc0Wkb8hRofGg10E+/24r1
AI0KsLhzKzfIASxUVQAn8RTptLruaaPLboSA4MUZ8IB5y8Vy8E3/KtD0gD80j64Y
rm9XGHA0HTJHbPUTb/Rux2g0E7WtiyWSWH8mqzbegU8IrkM3eVT4+ylBE7YkfWDD
dw44sB71tfmDKpzWg6XQ6YMh0YfnyG1fYCj9LhuecNY9Uuo6cjDaAvkzMewWwqDx
Q2Ekas98Di6itCP8vET+gBDjeCc+XR6Hx6vzWmxlZhwDuxEKL1a2/DabUxJyMNzv
55Fn
-----END CERTIFICATE-----
kind: ConfigMap
metadata:
name: ca-pemstore

View File

@@ -0,0 +1,70 @@
external-secrets:
replicaCount: 3
revisionHistoryLimit: 1
leaderElect: true
installCRDs: true
crds:
createClusterExternalSecret: true
createClusterSecretStore: true
createClusterGenerator: true
createPushSecret: true
conversion:
enabled: false
image:
repository: registry.internal.durp.info/external-secrets/external-secrets
pullPolicy: Always
extraVolumes:
- name: ca-pemstore
configMap:
name: ca-pemstore
extraVolumeMounts:
- name: ca-pemstore
mountPath: /etc/ssl/certs/vault.pem
subPath: vault.pem
readOnly: true
resources:
requests:
memory: 32Mi
cpu: 10m
limits:
memory: 32Mi
cpu: 10m
webhook:
log:
level: debug
image:
repository: registry.internal.durp.info/external-secrets/external-secrets
pullPolicy: Always
resources:
requests:
memory: 32Mi
cpu: 10m
limits:
memory: 32Mi
cpu: 10m
certController:
create: false
revisionHistoryLimit: 1
log:
level: debug
image:
repository: registry.internal.durp.info/external-secrets/external-secrets
pullPolicy: Always
tag: ""
resources:
requests:
memory: 32Mi
cpu: 10m
limits:
memory: 32Mi
cpu: 10m

View File

@@ -0,0 +1,17 @@
apiVersion: v2
name: istio-system
description: A Helm chart for Kubernetes
type: application
version: 0.0.1
appVersion: 0.0.1
dependencies:
- name: base
repository: https://istio-release.storage.googleapis.com/charts
version: 1.25.0
- name: istiod
repository: https://istio-release.storage.googleapis.com/charts
version: 1.25.0
- name: gateway
repository: https://istio-release.storage.googleapis.com/charts
version: 1.25.0

Some files were not shown because too many files have changed in this diff Show More