Compare commits
736 Commits
develop
...
app/dokuwi
| Author | SHA1 | Date | |
|---|---|---|---|
| c796aacfec | |||
| 17dcd78a31 | |||
| 16d9f1df34 | |||
| 91a305117c | |||
| 62b8ddb6c7 | |||
| a44781a4c7 | |||
| 3e80270ec9 | |||
| d1c71b22af | |||
| 26727e23cd | |||
| 4324087ecb | |||
| 1f86ec4702 | |||
| 8fc1165cc0 | |||
| 72be4562ec | |||
| cd4269e485 | |||
| 55856e8a15 | |||
| ea6032d2fa | |||
| f4eb314c46 | |||
| 46515bdc6d | |||
|
|
a3d1fcd6cd | ||
| 0f014ec66d | |||
| ecd37c7793 | |||
| 0581b3cb40 | |||
| 5edfc815e0 | |||
| d3e62ef96a | |||
| 58e4fbbf56 | |||
| 3b5db030ee | |||
| 672f5b0935 | |||
| 4ead42d438 | |||
| b86d63541a | |||
| 0b7da6761c | |||
| abc995cae1 | |||
| e4f1fc958d | |||
| a76b6cd0b9 | |||
| d5a79df839 | |||
| bc39b04bb4 | |||
| 8059824d42 | |||
| 3bb7305ac9 | |||
| d7ce4a3ccc | |||
| 63dcef953b | |||
| d9f220ac4e | |||
| 82a9957831 | |||
| 21371c5a88 | |||
| e89d22f03d | |||
| 77bf938120 | |||
| 516168d3e5 | |||
| 619fc74394 | |||
| 4628a78f54 | |||
| 57067590b7 | |||
| 86f43d20be | |||
| ccdfee21c2 | |||
| fa832ef64d | |||
| 9e3a5c7488 | |||
| 69bb362d57 | |||
| 4724380c3f | |||
| 525d06a715 | |||
| df768c9031 | |||
| 602cabf041 | |||
| 9f03ea3b30 | |||
| f261b6fac4 | |||
| bd5059863e | |||
| 1348ab51f8 | |||
| e98c99ef9c | |||
| 8f6aa7bd61 | |||
| 74f79898e2 | |||
| 1933ed7a81 | |||
| 5831e1956d | |||
| 70accb15fb | |||
| d6ea1c47e7 | |||
| 63ca2fa1b4 | |||
| caa385be8d | |||
| b05ab8766a | |||
| 2d32ad307a | |||
| 830f49ca6a | |||
| bb6ada6f15 | |||
| 08ffc1aaee | |||
| a84b754903 | |||
| 07e3ea1e8b | |||
| 95299a4d28 | |||
| ff7bec1733 | |||
| 187317ba2e | |||
| 13129c5b0e | |||
| 9f175dd49f | |||
| b2f3f18b4f | |||
| fd2a0e4748 | |||
| 48a280b4aa | |||
| ff57154064 | |||
| 82d7b64322 | |||
| 516f304dbe | |||
| 99ce41c430 | |||
| 949f11769c | |||
| 4bbb33391b | |||
| ef03aa7a25 | |||
| c71b356017 | |||
| 70b64d0213 | |||
| 8a63192c60 | |||
| 47cdb6893f | |||
| 636e1a3267 | |||
| c21960843a | |||
| 1f3700887a | |||
| 252457cc7d | |||
| 2697c0aea6 | |||
| a979145d9e | |||
| 39d344b52e | |||
| 6e0f980bab | |||
| 9a68d82f83 | |||
| 2f8a0d1841 | |||
| 6a75addfa8 | |||
| 23fa5fb6d0 | |||
| 23b62970dd | |||
| ec89adccfc | |||
| ec5a9b2cf6 | |||
| 64f268aed8 | |||
| ddb8ea9a05 | |||
| 9d41316730 | |||
| cf49bbb20c | |||
| 9cf9e1622c | |||
| 901da39e24 | |||
| 6f247e0903 | |||
| c43357c7c4 | |||
| c0731f893a | |||
| e6c2157036 | |||
| ce1ea789c1 | |||
| 23615dbdf1 | |||
| 739d1fa4d7 | |||
| 5b887c5ea3 | |||
| ae8680ce63 | |||
| 81e8425379 | |||
| c8e97f5619 | |||
| 1e5a359aab | |||
| 8bf021c6c3 | |||
| 3b50141790 | |||
| 5f46937a4e | |||
| 4c8a194452 | |||
| 044ea968c0 | |||
| 7be1fbc1f8 | |||
| 57b8332da2 | |||
| fc81537d18 | |||
| 6efb893187 | |||
| 6c6520f3bc | |||
| 9adb0154f1 | |||
| c23a5b2683 | |||
| 16a268c9e7 | |||
| 56e18266e4 | |||
| e3f2fc19d7 | |||
| 42abc7daca | |||
| 39879df061 | |||
| 2db32f6db7 | |||
| eb6e9924ab | |||
| ec1999fb7d | |||
| 1bcba7a4d8 | |||
| 84b7bda9d4 | |||
| 3cf2f4b087 | |||
| c2ca39fb76 | |||
| 6fc79b2526 | |||
| ca8e52a54d | |||
| 36a01ebbb7 | |||
| de8d5d5b58 | |||
| 4c8be01ecf | |||
| 892af5ca7d | |||
| 9cbb18c4f4 | |||
| a226e9b982 | |||
| 8fd546728d | |||
| 205bbbaac9 | |||
| ae9dddfdf5 | |||
| b44527ac20 | |||
| 4538d1ed64 | |||
| 3345136e4b | |||
| 4502e596d1 | |||
| 0e5520c36a | |||
| 5df774a1d1 | |||
| 0d11c779fa | |||
| 74ba1b4204 | |||
| 456384df7d | |||
| ea4f919568 | |||
| a42bf41dea | |||
| 2fed17a433 | |||
| 90e580b1b5 | |||
| e8892b14e9 | |||
| a62f61606a | |||
| c2da7d5d73 | |||
| 11e12e8556 | |||
| a3ecd961d3 | |||
| 335cbe38e0 | |||
| 34d1b3a594 | |||
| f0f8890dc9 | |||
| ffafa40208 | |||
| 2218588ecf | |||
| 1a9b0d2686 | |||
| 72241ab088 | |||
| 49d1ac23d4 | |||
| da678cf970 | |||
| 3da466beab | |||
| 669848c3d5 | |||
| 8dc7ccc43c | |||
| 7f4796431b | |||
| 197cccc536 | |||
| 133fe712e4 | |||
| 6371ac1d74 | |||
| 5a97e286f7 | |||
| cb477c00c1 | |||
| 344ab797ad | |||
| 4862b5f745 | |||
| f1b4e1afc2 | |||
| 2f5901d383 | |||
| 9b9cf55f5b | |||
| 7b1e5da19e | |||
| 80b6796a41 | |||
| 9576468fe6 | |||
| 474834ea2d | |||
| 89191478ac | |||
| a11198b94c | |||
| 1da7d9ca85 | |||
| 30777bdd84 | |||
| 1b26e7224a | |||
| 01d537630e | |||
| dd4559b416 | |||
| 2607278cd3 | |||
| f18a213af9 | |||
| 1e7212e113 | |||
| 663eabb929 | |||
| 97377ca90c | |||
| 47ba9252a1 | |||
| 3ba148bf40 | |||
| a1e598d182 | |||
| 87af7826d4 | |||
| 94c9e40240 | |||
| db7620ab8e | |||
| cb8513ae16 | |||
| 9758633c9e | |||
| 5710275453 | |||
| 956ff9fc47 | |||
| cbb451f4a5 | |||
| 33aa120d91 | |||
| 5db7b3d12e | |||
| 46c738d076 | |||
| 9ed309c6d1 | |||
| d6ffc4540d | |||
| 8de7bc9920 | |||
| fd3d1068b5 | |||
| 4a67b30183 | |||
| 7c7c965f23 | |||
| ebbc2539af | |||
| bbe5317113 | |||
| 4c976b8d3e | |||
| 211a0ac1c0 | |||
| 023a379f28 | |||
| 49ad373fd4 | |||
| 91b1167b49 | |||
| 898d101f64 | |||
| 8ba1c93269 | |||
| 57c5b383bb | |||
| 6e5725f008 | |||
| de9a2398d9 | |||
| ef22cfac0a | |||
| b7025e3743 | |||
| 24026defaa | |||
| 0e50cbebd9 | |||
| 95bf51060a | |||
| 0f9728a38f | |||
| 1da7dc74db | |||
| 4297338d49 | |||
| c7a267c49d | |||
| 6ac1b8b573 | |||
| 6a9f669198 | |||
| 1c6bbef39b | |||
| 25d07f8dd4 | |||
| 2df70e0078 | |||
| 7a18806609 | |||
| dbf60df2f1 | |||
| d099a3120a | |||
| dcfb1853f8 | |||
| 631f6ff1e5 | |||
| c171c50341 | |||
|
|
13ca226fc7 | ||
| c1088aa57e | |||
| bdc36d5699 | |||
| 0db823e727 | |||
| f2ac11b608 | |||
| c314dd6f3e | |||
| e509f0d1bd | |||
| 784acb51c1 | |||
| 338880efb6 | |||
| d13e5346f7 | |||
| 8736b79cc1 | |||
| 06cb419cab | |||
| bf400f8e27 | |||
| 179d26a67b | |||
| 69aee1e265 | |||
| bc867c8136 | |||
| d4996ab1ef | |||
| b4b29ec271 | |||
| d9f70a731d | |||
| 7a7a905b41 | |||
| 2e9258ed7c | |||
| 1e1242ca6e | |||
| 99cf6a9bd9 | |||
| 585d9c6b19 | |||
| 634fd9b80b | |||
| 25dec131c6 | |||
| ce01d8d5aa | |||
| 66f8c6a883 | |||
| e169fa6470 | |||
| e11fbd3285 | |||
| 8d4dcf9331 | |||
| 3b00e780d4 | |||
| 4a21fe98a7 | |||
| f71dac54b2 | |||
| 23a3ce7478 | |||
| fd27072cb6 | |||
| 22686543e8 | |||
| a78a2da146 | |||
| b705b595ef | |||
| 7adcd45c76 | |||
| bdbd0faca2 | |||
| 82d102f83f | |||
| fb61fed358 | |||
| 891d0ef73a | |||
| c7069687a9 | |||
| 9eafb328f7 | |||
| 73450413b8 | |||
| 6044624b10 | |||
| 582a9ea511 | |||
| f50e21d191 | |||
| 07369892e6 | |||
| b790323e74 | |||
| 735b875873 | |||
| e08e386f3c | |||
| 5c610e6b55 | |||
| 878c33988f | |||
| f9d5839ca6 | |||
| 307aab13c6 | |||
| 7c59a97416 | |||
| 6c0212d903 | |||
| f94ddfeb41 | |||
| b0dbb40418 | |||
| b330ca44ae | |||
| 6e540afae1 | |||
| fb907d0e95 | |||
| 958c37f7d1 | |||
| 05886d56be | |||
| b28947421d | |||
| f9b46555a5 | |||
| 27c97aecd8 | |||
| c3018a21ba | |||
| 5b76953cbd | |||
| b60ebde576 | |||
| f8dea2e387 | |||
| 9d2c5e6162 | |||
| 79884138cd | |||
| 3a32f97dcc | |||
| ab004e4542 | |||
| b5095de6ee | |||
| be073a2367 | |||
| 782b938b7c | |||
| 1f1ef5aa7f | |||
| 290e8bf569 | |||
| 0a153c19a4 | |||
| 9ec67f1f33 | |||
| d57ebf4a24 | |||
| dcc77d3597 | |||
| d06be6330f | |||
| eec0b59fc1 | |||
| 0a75da6a3d | |||
| b05ac5b2ff | |||
| 11a46ec0b6 | |||
| 8b1ded50cd | |||
| 5ef01cbb10 | |||
| 84ca54d4c8 | |||
| 2a14437029 | |||
| 9e35c2f9c9 | |||
| 7831b5b9c4 | |||
| 136e267cae | |||
| 13c7c6831c | |||
| 7334dd9523 | |||
| 55139be7da | |||
| e0c7fc4646 | |||
| 04c577f23a | |||
| 8c82d598fa | |||
| 7a015f3475 | |||
| d390e3ed08 | |||
| 66839f5f63 | |||
| de3e54c800 | |||
| e3a774d8db | |||
| c544742717 | |||
| 9dc9d58bd8 | |||
| f9edf168ea | |||
| 77e20e2c63 | |||
| 6b00448a42 | |||
| faeefa1fc2 | |||
| 173df38044 | |||
| 60f93ef509 | |||
| 618d0fb4cf | |||
| 0bfcd903bf | |||
| fb042fea27 | |||
| dbaa2444fe | |||
| 53e9bfbc2f | |||
| cc3327f644 | |||
| 90a210eda3 | |||
| 36b2781ddc | |||
| bba1e71189 | |||
| c56ac54e3f | |||
| 498d0759f4 | |||
| 6870d4aeff | |||
| a252c74fb6 | |||
| 955697c005 | |||
| 381b833f9b | |||
| 15916f2944 | |||
| 2221fdcfb0 | |||
| be138e8bd3 | |||
| 5b5f77efc2 | |||
| 6f2b6b05d0 | |||
| e534a7fdb9 | |||
| 0fddd7c010 | |||
| 0b8c896b14 | |||
| 00af14577c | |||
| 912147501b | |||
| 24c028281c | |||
| 61c33afbc2 | |||
| fa85be9647 | |||
| 4efc04e67e | |||
| 73a5d3a551 | |||
| fb041354f3 | |||
| fed21c4421 | |||
| 4c2d60830c | |||
| 33bbc4eed9 | |||
| e058624244 | |||
| 73a6f622a2 | |||
| 74bb38e31c | |||
| 80fefda951 | |||
| 76a0a0da7f | |||
| 97c3ec0de0 | |||
| 771f4df8dd | |||
| d904fc2fa2 | |||
| faecbd6d18 | |||
| a746f358ff | |||
| fe0c1c0223 | |||
| 905e3acdfd | |||
| ba1574540c | |||
| 90c996c100 | |||
| ac8f7f3bb0 | |||
| 187d95ec17 | |||
| 979dce07f6 | |||
| 76e9e2acb1 | |||
| 353f0443df | |||
| b27314be7b | |||
| 97f7f17e51 | |||
| 5b5268a05e | |||
| 30b20f4c85 | |||
| 351cbce298 | |||
| 8a515fe62d | |||
| b6e1f927a4 | |||
| 5e005bdcfc | |||
| e6ac0f7f91 | |||
| 7550d57d3c | |||
| 82c39b78ab | |||
| d2f48cd358 | |||
| 6cdcbba421 | |||
| 4389e6a61d | |||
| 454cb7bc32 | |||
| 2c156bb578 | |||
| b49a83ece4 | |||
| 444c26f19a | |||
| f0e4f20329 | |||
| e4f778d7d4 | |||
| 5fd0bfe46d | |||
| 0d2c6dfc5f | |||
| 60da07a784 | |||
| 87423de682 | |||
| dfa5a36fbe | |||
| ec75c9f68b | |||
| 45938924bb | |||
| 53d42f167e | |||
| 4c24ebf348 | |||
| 0281aa0aca | |||
| 8a7a702076 | |||
| 9c3f95c3d6 | |||
| c7f7ac9894 | |||
| b5a8be2ead | |||
| dea11cb02d | |||
| d754ac925e | |||
| 3dff6b9e31 | |||
| 4873577fa7 | |||
| 460e66be8a | |||
| 20573e859f | |||
| 6dcc4a1e06 | |||
| 165281f8d8 | |||
| fac52fd2f8 | |||
| 1793a2345d | |||
| 8371e046f2 | |||
| 02649e8074 | |||
| d457579dc9 | |||
| 88de31ffa9 | |||
| 904463acaa | |||
| e25df99875 | |||
| ab0353b532 | |||
| 66519dc6aa | |||
| fc8a412cfa | |||
| 755d401631 | |||
| 2f0178e608 | |||
| 7b2086a373 | |||
| 3203491364 | |||
| 2b117f431f | |||
| 80bd37b368 | |||
| c59a7fe138 | |||
| f7a1945dc3 | |||
| 80720805f4 | |||
| 97566a398e | |||
| b3e1169242 | |||
| 4513aee182 | |||
| 0da1cff7db | |||
| 317a6d0005 | |||
| 200f877356 | |||
| 8456123be1 | |||
| c8742a8ebe | |||
| fe843bd0e2 | |||
| 523f46242a | |||
| fda0c9b45b | |||
| 45005be6d9 | |||
| c912c7fce1 | |||
| dcc06b3332 | |||
| ef0929dfbc | |||
| b0a5eb290c | |||
| 0f5966ef0f | |||
| 4d4c6eef2e | |||
| e50ad5eb52 | |||
| a35daf890d | |||
| 2037bca882 | |||
| 5956602199 | |||
| 30bda8187c | |||
| 21cf4f114f | |||
| 4a3ee9db61 | |||
| 1e6a73af9f | |||
| d7b308287b | |||
| 7be309b108 | |||
| 075271818d | |||
| 4008224d78 | |||
| b4ab882060 | |||
| 07ab689805 | |||
| 243f69551e | |||
| aee7f79976 | |||
| 9f5a87093a | |||
| 6c108e570e | |||
| 66606a1ac1 | |||
| 170f538d80 | |||
| 4ab5793552 | |||
| 1607f1338b | |||
| 52694b5801 | |||
| dfcfa2bc48 | |||
| 51143ef047 | |||
| 566ec46eda | |||
| bba8be47a5 | |||
| 1892c9c28a | |||
| 3f602c535c | |||
| 751f734b7d | |||
| 7e6d4c5dd5 | |||
| de912deca6 | |||
| bc36259db0 | |||
| 77bfa23cda | |||
| 04d16278f0 | |||
| 74f33f0ae9 | |||
| c187f18f61 | |||
| dc6ae95ae3 | |||
| 25c54b6218 | |||
| ca5673fd3f | |||
| 318ab5e964 | |||
| 6007c4bd96 | |||
| de37a7307d | |||
| 469069b8f2 | |||
| 8316736e5e | |||
| cc50222102 | |||
| 4836e7dcd8 | |||
| 10ef7cadda | |||
| 7cac503904 | |||
| d8811c06ca | |||
| 36d217a78e | |||
| d7fcbdd0a6 | |||
| cf4b822e29 | |||
| d4d4e3a981 | |||
| 481fd311ba | |||
| 5a834110dc | |||
| 62ff96dd7e | |||
| 8dcbc165d9 | |||
| e37f71126a | |||
| f6c1dcaa5d | |||
| 495e9bb006 | |||
| 9f933cbdac | |||
| cabfa4bd9b | |||
| fe1f42fb1a | |||
| 096eeb7389 | |||
| 2b11a2eec7 | |||
| 47c1068cdb | |||
| 5940896dd3 | |||
| 83fc15ae40 | |||
| 179c947bf1 | |||
| 72c86ab07b | |||
| 9e6c57084d | |||
| c2e466f43f | |||
| 7bef9d1419 | |||
| 42c9a692b9 | |||
| 37dc0e3db4 | |||
| c836f7d8f3 | |||
| b8ba9575e9 | |||
| f4ad47a9d3 | |||
| 7b5c6fcf66 | |||
| 80f2963235 | |||
| ccfece8cb7 | |||
| 30c93fce7c | |||
| c3b8292d1a | |||
| 0155262061 | |||
| 086440e384 | |||
| 14e4ef5b13 | |||
| 59a12ecd62 | |||
| ca7a36d765 | |||
| 6e548df813 | |||
| ef73a8510f | |||
| 0dbbd3911a | |||
| 6ddf786ed2 | |||
| aacfbd1ba1 | |||
| a391105d25 | |||
| 9a45485b32 | |||
| a108dba2c0 | |||
| fe803757cf | |||
| 09e0e94146 | |||
| 24d84a017a | |||
| be7aef6b01 | |||
| a014536685 | |||
| eb3126d28a | |||
| e01388e86d | |||
| 4062ce3a23 | |||
| bc151ae5c6 | |||
| f5f4e37b74 | |||
| 235142bb34 | |||
| eb41940952 | |||
| e497fddb2e | |||
| 07e2602bd1 | |||
| f9eaca7d0c | |||
| 7d0bfdfbd9 | |||
| 0bc90563d0 | |||
| 1d574efd4c | |||
| 281a7820db | |||
| 5b49418d2b | |||
| 3626bb750b | |||
| 527e943ea8 | |||
| 289b451709 | |||
| 7d613bc1ff | |||
| df3b8360fa | |||
| 2bf6f66496 | |||
| 44c041931e | |||
| 3b11504094 | |||
| 65d9329cce | |||
| e8d065766d | |||
| 3ae635dcb0 | |||
| b3601d4c3a | |||
| 07975ae949 | |||
| c3715159a5 | |||
| 96d42f357c | |||
| d9f3b2d4b8 | |||
| f632015efc | |||
| d1d59fd6e2 | |||
| b33cf64b2c | |||
| 518b326ce3 | |||
| 6d1a3c677b | |||
| ae9be01baf | |||
| 9e550e98f4 | |||
| b0e0876e7a | |||
| 73b5816834 | |||
| 814fcbc690 | |||
| cc3a0b21b5 | |||
| 1f800a4699 | |||
| 63673caf4f | |||
| b5ce446bbc | |||
| c83370c86a | |||
| 37b7ef59f3 | |||
| d119e5fe2a | |||
| b4c4708a69 | |||
| 7f686bbfae | |||
| ab4db4f19e | |||
| 8ecdab88d7 | |||
| 9a99820ae9 | |||
| bc72ceeec9 | |||
| 4b5787bdac | |||
| 8363163900 | |||
| 21889a7c88 | |||
| 859e0289c9 | |||
| 31008f249a | |||
| ca28b126eb | |||
| 5eee866bb2 | |||
| 0107b7cba0 | |||
| a74f5dcd09 | |||
| aa3417415a | |||
| c617ca00c9 | |||
| 244a4fafb0 | |||
| c17db489d9 | |||
| ddd5049025 | |||
| 0b9e624a1a | |||
| 3be661f5c3 | |||
| d48ffb4f64 | |||
| 2ab6f4316a | |||
| 72f77570e3 | |||
| d72a69dcb2 | |||
| fa0e831d13 | |||
| 1aca219a95 | |||
| bdcf3284e5 | |||
| dfaa13ef03 | |||
| 7c0466f480 | |||
| fc64182531 | |||
| 28b1c6a998 | |||
| 77acef7679 | |||
| f380a29bfe | |||
| 86783f34d7 | |||
| f3e452ab15 | |||
|
|
e94c276611 | ||
| 665de9090a | |||
| 50e1ccce65 | |||
| 8482a12f62 | |||
|
|
ac8a558262 | ||
| 6be3bb7433 | |||
| 0beb875f43 | |||
| 9dac35a959 | |||
| d706066066 | |||
| 24ab1ea325 | |||
| 7ff44414d5 | |||
| 0e62306bf4 | |||
| 9344048f88 | |||
| 36cd366894 | |||
| fe73f544c3 | |||
| 3d4b6b3018 | |||
|
|
8096eaf91f | ||
| d84699349a | |||
| 702e3ed954 | |||
| 5cffb6ce22 | |||
| 3ece38bc18 | |||
| bf648b8862 | |||
|
|
6ed51f2aa1 | ||
|
|
9578d029f6 | ||
| dc19e9e1c9 |
63
.sops.pub.asc
Normal file
63
.sops.pub.asc
Normal file
@@ -0,0 +1,63 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBGZlM+cBEADb3FqX+ZswYKVKx7kUGSvvBT0+Pe/6BZIQYDt8DE+gXTAwNDlq
|
||||
4Yy1XyPN5ispHo1/huUkUOaFUpkolfjzuciEIWaw2qHhTn9a7rPTx7DGCni9epic
|
||||
SuQYykC7MgQtAOkxUlx5R9XTL30JksICqlVLz8SMDHAzraLZU+4Pde+Cqgzx4x0K
|
||||
EfBzoAfjQtRe1RtikQ0ShklbbrbfETG9oGYh28RCI/ic22pgVV3EN1K1RDJDx9O+
|
||||
+CWW/dahKBCrKl8BUAd7dblOkIT1iwBtteyAfvYgcaGL2O0pHKIx2XmM2OWvjbPR
|
||||
TJvYtDQXpLHEYValuDWSF3TxxlYw05MFK3TRK0bSp8f7RN8Y12bZ/yGI3HpTfF2u
|
||||
B/ZGP++v5SwzuOEJw/7VrCqihLPuq/yeCi7xUGYpuhW0vjE5GVH3R7BBpP3B1Svg
|
||||
gCrdZOP0KoMVNM0SHzVvUzf4okWo1ctHU1zhmBPmW+LAyugYvq8di7q7rRDelELW
|
||||
IBnIqEfxXCKdqD2YylUJYXRuHhSvfGw8ABt873xBYfLTQSJmadaQevB58nTCooCe
|
||||
kt9AaOpdjCjfaArajbhUQx+56GdSLh5OUabu/zG75SF3kGJJ69G3BFZH5vZSwkt9
|
||||
22O75IBBN0A+d7xt/NsPNAfckwmPHFNiKxSPMXzrdGbfHTZTiYykarqVwwARAQAB
|
||||
tClycGk1LWNsdXN0ZXIuZWR3YXJkLnN5ZG5leSAoZmx1eCBzZWNyZXRzKYkCTgQT
|
||||
AQoAOBYhBGzqkd2xlkhpyU3Ox69uO7G0T2abBQJmZTPnAhsvBQsJCAcCBhUKCQgL
|
||||
AgQWAgMBAh4BAheAAAoJEK9uO7G0T2ab2gIQAI/MhtpzyIqAto0O9erPG74HNqsB
|
||||
B4Fi/DssU+WHYOiLR8COXNYV1Hzb7VWaucyKku0OB58AN8fMfTEE5b/K2kvhAyAW
|
||||
oK+FWgLWQXrLIwZuz+rlwIZEEWJrUYOle3tosmOyE8vlvPwv9hzS1q6ueEanvT1K
|
||||
2UrtRWCdfDRVJciUTI78v88XNYD7CpOfJqlS62tk2su6NGjBg4T5N9j0u0ddZ1pU
|
||||
eH28L4jvaCiAQkKZbKSBr5LFKJio4LIkCOsYyraQrv6PxuPd5c2E2GbMOMLF2iLO
|
||||
25hlr2o34UnjDMV0bHFHUw2ujULYCzp83A5oNce6vjY/ZL0LrrjVqVn+gcnpR9MF
|
||||
K3ArlkUkp0oNuVnZ1o/zObfcv6XEG/LoQGc7nuYLMooQEEeNEP2RwvlRTAhpKPZW
|
||||
ZPthGwe7RzWwPWjmkPvBVQy4njk7rDu0Ob0NkJKOBOc28Su5iOIwzKRyzvDV6g1o
|
||||
2yYWuKmZSkjBvP909LSccoFW8I55bUg3tUH5n7BCkdeOAmsq4cGPMviJeVRByOxt
|
||||
oK4wS63g/R8h916eLwygMxutDeIEnrAcGrpCXDRzH7kOq533LbuMk1p2giY4VAIK
|
||||
S26C0zzhjF0vJwls7BoP55XZfJf/WGQdRtfH6QvKfJwk1n/2OTeeY3McSEg7JoCf
|
||||
cmPZtQG/mGAhpomjuQINBGZlM+cBEADh4OFFjCOjbPn/5B0FwZ4wqjND/ARSD6iu
|
||||
CUNAEEex+WNkEt8h2lZdUq0CAmNPqQIJQ2QE68TdueVl9X+is5uqDGgEyGo2ZccE
|
||||
RkpM89l883Pvfd/fiJSHCo/lBGSMhJQLzE/AWu4FKxkCmqFFQ9aK6XJhV/knsJ4Z
|
||||
Nis0n4weCF0YETE0vq2bPPMl2xvpMy4VKvG4t7Dhl0wJRakgtZYApOlBVpupzHh4
|
||||
bx27jkh7K2lEmJIoWc7xBtMYonvys66tQyHy86kPfQXw+gzzkUpf2XYCHRzvjPZ9
|
||||
YiZqV370LCkjLMg0zfLaINXUsw6xrHXfbnutTb3qW9YIp7xyQS64wFbKM9d+y7XL
|
||||
ZUXsAQbn9cNoEBP5pXoJSvrrkGRAZDwFW0ax2XveuAlfBRv5tiXpHyD7M7Arrjb0
|
||||
yc6ijU/ZBv0vaQZMtSt28M10Z5Tn1A93nHff2xdM0njZc3KImM/QpGXlY8pct18Q
|
||||
zUqoYu69po7j7mH78a8h2tI5X7AmU1T1JOcQQ4bp46ik3uBKCVxLSyesAeGE1Au8
|
||||
QksLqELZ/jVlV/+WQ54NDLt3bc24V8MIj57xPDumejsJnY8cJLOW7Rrsn3WJCBkw
|
||||
AKM4BlrR/HigX7sjZ57N9ZsRTuaxpvCJwlRdK4YPsEBhO2UvQNGVWLEj8dogq2+v
|
||||
a31vc/kyrwARAQABiQRsBBgBCgAgFiEEbOqR3bGWSGnJTc7Hr247sbRPZpsFAmZl
|
||||
M+cCGy4CQAkQr247sbRPZpvBdCAEGQEKAB0WIQTvmsGobbjnhWp6fYQ2D2kqSUqH
|
||||
CgUCZmUz5wAKCRA2D2kqSUqHClj8D/4pHqnYlIcJpDOhGxYlQtrk6GRSfq1g3suh
|
||||
5Lhc+eHFpVQtQM85qJTSIhS3w/XAf3GwekYuiKjGAdhrWJcglphxCPX5IMg9ofMX
|
||||
ICbOxyjdEeOwgfEMvuyPgLUet6reK8rSTefhR5L2FRuU+qibs08LKMAtRoooZ3I1
|
||||
W7q38hWBcrrQXnBxtb7YLQ6Kzwd7mEq0KXnJxV8UBUj9x90j7R5+YEs3ZIAUh6sV
|
||||
jR23RpRuBQmgGXsjv3LsYyeDCglUNmWZKWfVhhmLcIbJ5/Dej4Eg79qY6DrmyXLM
|
||||
0Sw1ZhGAj/xRGw3GMrLXoj1gjEI1etUbiCKLUud2llUk4d15NP5CfhQ6s4Gh9p60
|
||||
x1eL8+hNuoSDRuQWzn/8MWglWKeUnalXF7krjLuOVtpMR+Uh9YwufUXDiQRmx6Iy
|
||||
/k7yOKg9V6IBm+6+xxKXKPZeBuVucKPegyI00gbM9F2ql9z30/WGVRtt6vIowuPi
|
||||
5p5e3mmeL83FUv7tpVnNR50ulfVEflTBHbfgop1THJIYgNT6OODCUQFw/GPzzMNi
|
||||
8jz3a1GB+OTYNF+x7OzrgBx1AvtryNQz+8lvkWVSfhJx0kgeUwwghIPw5zV4fypf
|
||||
8XQiP67BcarnB4RiWSgUjs7uQ25ZBxRbZ+D3StvP9+5QEBIh9q7yaj2gxo6fcaNk
|
||||
ZxKPd2thGiIZD/9H27JXAz7r/U+wtycteXKXogcAdu4i5Zlpqd5c3p2K3XO+sc6Y
|
||||
cA+uFNWBrz2RsKwIAX2djfYDi8Vp6uACRkE8Vzyo5WoIk0LF6upCCD44DIZGWlzH
|
||||
t59dGr8HQFvk/6RTuWoMnbtbK1k6qV5CK6q3jVZo2Do4v4uY2D/eXjzaIew+3kDG
|
||||
v+HDAOVZuTiW2V8XQSrXUr3duCK4Lch+EE8Cw8RyPy1Um6jSUbUGXFryqiLuaqub
|
||||
72JON1QDH6sLci7xGEccKGyk9xsTLthxFTWkPEjPXNPTAlvbPwdL/eOFmmOOLUqH
|
||||
HomXDoKITUOJ5ytUQ6WgIpfdOSkRmamMtzfvs6kkogzL53vwNXJMRm05HYgjm1bD
|
||||
moLpcoFhxEDj8Cd3sY+e+J6rKOgWq8f3+cKNi4qIzpv7JyAUW2gM2sfPPJ6PViPB
|
||||
MV1CnKli8ZRLEoHXcakjq5ScJi0UyG+rT3vodUdKbVQKxeohry1gX6QO27lDSn2d
|
||||
6KQy5mueEy9eZh3WsCWXTp/oILRlrgOrxQWySv2M6b15lxFjRvHc1j2/4szaqNWr
|
||||
fPUQZsDUwl84VrjzoQpXmt+Nn8xgAGEEWpXAc5P6tkm4Nk8lkUErRkbdSWEAjOOF
|
||||
8cVKCymSVdmFE2RPvZdK9vYCCckjFNBArbT6xQwDjAo4srdaMtxJWb+3kA==
|
||||
=8DLE
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
5
.sops.yaml
Normal file
5
.sops.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
creation_rules:
|
||||
- path_regex: \.ya?ml$
|
||||
encrypted_regex: ^(data|stringData)$
|
||||
pgp: 6CEA91DDB1964869C94DCEC7AF6E3BB1B44F669B
|
||||
age: age1d47q8mlty404pxx378q49hr93aqexca4mkeqtdm00w4gjd09xd0qhxcdcz
|
||||
16
kubernetes/apps/adguard-home/adguard-home.yaml
Normal file
16
kubernetes/apps/adguard-home/adguard-home.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: adguard-home
|
||||
namespace: adguard-home
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: flux-system
|
||||
path: ./kubernetes/apps/adguard-home/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
86
kubernetes/apps/adguard-home/app/deployment.yaml
Normal file
86
kubernetes/apps/adguard-home/app/deployment.yaml
Normal file
@@ -0,0 +1,86 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: adguard-home
|
||||
namespace: adguard-home
|
||||
labels:
|
||||
app.kubernetes.io/name: adguard-home
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: adguard-home
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: adguard-home
|
||||
rpi5.cluster.policy/egress-kubeapi: "true"
|
||||
rpi5.cluster.policy/egress-namespace: "true"
|
||||
rpi5.cluster.policy/egress-world: "true"
|
||||
rpi5.cluster.policy/ingress-namespace: "true"
|
||||
rpi5.cluster.policy/ingress-nginx: "true"
|
||||
rpi5.cluster.policy/ingress-nodes: "true"
|
||||
rpi5.cluster.policy/ingress-world: "true"
|
||||
spec:
|
||||
containers:
|
||||
- name: adguard-home
|
||||
image: adguard/adguardhome:v0.107.51
|
||||
ports:
|
||||
- protocol: TCP
|
||||
containerPort: 53
|
||||
name: dns-tcp
|
||||
- protocol: UDP
|
||||
containerPort: 53
|
||||
name: dns-udp
|
||||
- protocol: UDP
|
||||
containerPort: 67
|
||||
name: dhcps-udp
|
||||
- protocol: UDP
|
||||
containerPort: 68
|
||||
name: dhcpc-udp
|
||||
- protocol: TCP
|
||||
containerPort: 80
|
||||
name: http-tcp
|
||||
- protocol: TCP
|
||||
containerPort: 443
|
||||
name: https-tcp
|
||||
- protocol: UDP
|
||||
containerPort: 443
|
||||
name: https-udp
|
||||
- protocol: TCP
|
||||
containerPort: 853
|
||||
name: dns-tls-tcp
|
||||
- protocol: UDP
|
||||
containerPort: 853
|
||||
name: dns-tls-udp
|
||||
- protocol: TCP
|
||||
containerPort: 3000
|
||||
name: http-alt-tcp
|
||||
- protocol: UDP
|
||||
containerPort: 3000
|
||||
name: http-alt-udp
|
||||
- protocol: TCP
|
||||
containerPort: 5443
|
||||
name: dnscrypt-tcp
|
||||
- protocol: UDP
|
||||
containerPort: 5443
|
||||
name: dnscrypt-udp
|
||||
- protocol: TCP
|
||||
containerPort: 6060
|
||||
name: http-pprof
|
||||
env:
|
||||
- name: TZ
|
||||
value: Australia/Sydney
|
||||
volumeMounts:
|
||||
- name: adguard-home-data
|
||||
mountPath: /opt/adguardhome/work
|
||||
- name: adguard-home-config
|
||||
mountPath: /opt/adguardhome/conf
|
||||
volumes:
|
||||
- name: adguard-home-data
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/adguardhome/work
|
||||
type: Directory
|
||||
- name: adguard-home-config
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/adguardhome/conf
|
||||
type: Directory
|
||||
61
kubernetes/apps/adguard-home/app/ingress.yaml
Normal file
61
kubernetes/apps/adguard-home/app/ingress.yaml
Normal file
@@ -0,0 +1,61 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: adguard-home-ingress
|
||||
namespace: adguard-home
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "adguard-home.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: adguard-home
|
||||
port:
|
||||
number: 10080
|
||||
- host: "adguard-home.cluster.local"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: adguard-home
|
||||
port:
|
||||
number: 10080
|
||||
- host: "setup.adguard-home.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: adguard-home
|
||||
port:
|
||||
number: 13000
|
||||
- host: "setup.adguard-home.cluster.local"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: adguard-home
|
||||
port:
|
||||
number: 13000
|
||||
- host: "doh.adguard-home.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: adguard-home
|
||||
port:
|
||||
number: 443
|
||||
69
kubernetes/apps/adguard-home/app/service.yaml
Normal file
69
kubernetes/apps/adguard-home/app/service.yaml
Normal file
@@ -0,0 +1,69 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: adguard-home
|
||||
namespace: adguard-home
|
||||
labels:
|
||||
app.kubernetes.io/name: adguard-home
|
||||
spec:
|
||||
selector:
|
||||
app.kubernetes.io/name: adguard-home
|
||||
type: ClusterIP
|
||||
internalTrafficPolicy: Cluster
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 53
|
||||
targetPort: 53
|
||||
name: dns-tcp
|
||||
- protocol: UDP
|
||||
port: 53
|
||||
targetPort: 53
|
||||
name: dns-udp
|
||||
- protocol: UDP
|
||||
port: 67
|
||||
targetPort: 67
|
||||
name: dhcps-udp
|
||||
- protocol: UDP
|
||||
port: 68
|
||||
targetPort: 68
|
||||
name: dhcpc-udp
|
||||
- protocol: TCP
|
||||
port: 10080
|
||||
targetPort: 80
|
||||
name: http-tcp
|
||||
- protocol: TCP
|
||||
port: 443
|
||||
targetPort: 443
|
||||
name: https-tcp
|
||||
- protocol: UDP
|
||||
port: 443
|
||||
targetPort: 443
|
||||
name: https-udp
|
||||
- protocol: TCP
|
||||
port: 853
|
||||
targetPort: 853
|
||||
name: dns-tls-tcp
|
||||
- protocol: UDP
|
||||
port: 853
|
||||
targetPort: 853
|
||||
name: dns-tls-udp
|
||||
- protocol: TCP
|
||||
port: 13000
|
||||
targetPort: 3000
|
||||
name: https-alt-tcp
|
||||
- protocol: UDP
|
||||
port: 13000
|
||||
targetPort: 3000
|
||||
name: https-alt-udp
|
||||
- protocol: TCP
|
||||
port: 5443
|
||||
targetPort: 5443
|
||||
name: dnscrypt-tcp
|
||||
- protocol: UDP
|
||||
port: 5443
|
||||
targetPort: 5443
|
||||
name: dnscrypt-udp
|
||||
- protocol: TCP
|
||||
port: 6060
|
||||
targetPort: 6060
|
||||
name: https-pprof
|
||||
@@ -0,0 +1,38 @@
|
||||
spec:
|
||||
ports:
|
||||
- name: dns-tcp
|
||||
port: 53
|
||||
targetPort: 53
|
||||
protocol: TCP
|
||||
- name: dns-udp
|
||||
port: 53
|
||||
targetPort: 53
|
||||
protocol: UDP
|
||||
- name: dhcps-udp
|
||||
port: 67
|
||||
targetPort: 67
|
||||
protocol: UDP
|
||||
- name: dhcpc-udp
|
||||
port: 68
|
||||
targetPort: 68
|
||||
protocol: UDP
|
||||
- name: dns-tls-tcp
|
||||
port: 853
|
||||
targetPort: 853
|
||||
protocol: TCP
|
||||
- name: dns-tls-udp
|
||||
port: 853
|
||||
targetPort: 853
|
||||
protocol: UDP
|
||||
- name: dnscrypt-tcp
|
||||
port: 5443
|
||||
targetPort: 5443
|
||||
protocol: TCP
|
||||
- name: dnscrypt-udp
|
||||
port: 5443
|
||||
targetPort: 5443
|
||||
protocol: UDP
|
||||
- name: https-pprof
|
||||
port: 6060
|
||||
targetPort: 6060
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
kubectl patch service ingress-nginx-controller -n ingress-nginx --patch "$(cat ingress-nginx-svc-controller-patch.yaml)"
|
||||
21
kubernetes/apps/capacitor/app/ingress.yaml
Normal file
21
kubernetes/apps/capacitor/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: capacitor-ingress
|
||||
namespace: capacitor
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "capacitor.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: capacitor
|
||||
port:
|
||||
number: 9000
|
||||
84
kubernetes/apps/capacitor/app/manifest.yaml
Normal file
84
kubernetes/apps/capacitor/app/manifest.yaml
Normal file
@@ -0,0 +1,84 @@
|
||||
---
|
||||
# Source: onechart/templates/service.yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: capacitor
|
||||
namespace: capacitor
|
||||
labels:
|
||||
helm.sh/chart: onechart-0.63.0
|
||||
app.kubernetes.io/name: onechart
|
||||
app.kubernetes.io/instance: capacitor
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 9000
|
||||
targetPort: 9000
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
app.kubernetes.io/name: onechart
|
||||
app.kubernetes.io/instance: capacitor
|
||||
---
|
||||
# Source: onechart/templates/deployment.yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: capacitor
|
||||
namespace: capacitor
|
||||
labels:
|
||||
helm.sh/chart: onechart-0.63.0
|
||||
app.kubernetes.io/name: onechart
|
||||
app.kubernetes.io/instance: capacitor
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
annotations:
|
||||
kubectl.kubernetes.io/default-container: capacitor
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: onechart
|
||||
app.kubernetes.io/instance: capacitor
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
checksum/config: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
|
||||
labels:
|
||||
app.kubernetes.io/name: onechart
|
||||
app.kubernetes.io/instance: capacitor
|
||||
rpi5.cluster.policy/egress-kubeapi: "true"
|
||||
rpi5.cluster.policy/egress-namespace: "true"
|
||||
rpi5.cluster.policy/egress-world: "true"
|
||||
rpi5.cluster.policy/ingress-namespace: "true"
|
||||
rpi5.cluster.policy/ingress-nginx: "true"
|
||||
rpi5.cluster.policy/ingress-nodes: "true"
|
||||
rpi5.cluster.policy/ingress-world: "true"
|
||||
spec:
|
||||
containers:
|
||||
- image: ghcr.io/gimlet-io/capacitor:v0.4.2
|
||||
imagePullPolicy: IfNotPresent
|
||||
name: capacitor
|
||||
ports:
|
||||
- containerPort: 9000
|
||||
name: http
|
||||
protocol: TCP
|
||||
readinessProbe:
|
||||
failureThreshold: 3
|
||||
httpGet:
|
||||
path: /
|
||||
port: 9000
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 0
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
timeoutSeconds: 3
|
||||
resources:
|
||||
requests:
|
||||
cpu: 200m
|
||||
memory: 200Mi
|
||||
securityContext: {}
|
||||
initContainers: null
|
||||
securityContext:
|
||||
fsGroup: 999
|
||||
serviceAccountName: capacitor
|
||||
58
kubernetes/apps/capacitor/app/rbac.yaml
Normal file
58
kubernetes/apps/capacitor/app/rbac.yaml
Normal file
@@ -0,0 +1,58 @@
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: capacitor
|
||||
namespace: capacitor
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: capacitor
|
||||
rules:
|
||||
- apiGroups:
|
||||
- networking.k8s.io
|
||||
- apps
|
||||
- ""
|
||||
resources:
|
||||
- pods
|
||||
- pods/log
|
||||
- ingresses
|
||||
- deployments
|
||||
- services
|
||||
- secrets
|
||||
- events
|
||||
- configmaps
|
||||
verbs:
|
||||
- get
|
||||
- watch
|
||||
- list
|
||||
- apiGroups:
|
||||
- source.toolkit.fluxcd.io
|
||||
- kustomize.toolkit.fluxcd.io
|
||||
- helm.toolkit.fluxcd.io
|
||||
resources:
|
||||
- gitrepositories
|
||||
- ocirepositories
|
||||
- buckets
|
||||
- helmrepositories
|
||||
- helmcharts
|
||||
- kustomizations
|
||||
- helmreleases
|
||||
verbs:
|
||||
- get
|
||||
- watch
|
||||
- list
|
||||
- patch # to allow force reconciling by adding an annotation
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: capacitor
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: capacitor
|
||||
namespace: flux-system
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: capacitor
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
30
kubernetes/apps/capacitor/capacitor.yaml
Normal file
30
kubernetes/apps/capacitor/capacitor.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: capacitor
|
||||
namespace: capacitor
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: flux-system
|
||||
path: ./kubernetes/apps/capacitor/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
patches:
|
||||
- target:
|
||||
kind: (Service|Deployment)
|
||||
name: capacitor
|
||||
namespace: flux-system
|
||||
patch: |
|
||||
- op: replace
|
||||
path: "/metadata/labels/app.kubernetes.io~1managed-by"
|
||||
value: Flux
|
||||
- op: remove
|
||||
path: "/metadata/labels/helm.sh~1chart"
|
||||
- op: add
|
||||
path: "/metadata/labels/patched"
|
||||
value: "true"
|
||||
44
kubernetes/apps/cert-manager/app/release.yaml
Normal file
44
kubernetes/apps/cert-manager/app/release.yaml
Normal file
@@ -0,0 +1,44 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: cert-manager
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 1h
|
||||
driftDetection:
|
||||
mode: enabled
|
||||
chart:
|
||||
spec:
|
||||
chart: cert-manager
|
||||
version: v1.15.0
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
namespace: cert-manager
|
||||
name: cert-manager
|
||||
interval: 1h
|
||||
install:
|
||||
crds: Create
|
||||
upgrade:
|
||||
crds: CreateReplace
|
||||
values:
|
||||
installCRDs: true
|
||||
|
||||
podLabels:
|
||||
rpi5.cluster.policy/egress-kubeapi: "true"
|
||||
rpi5.cluster.policy/egress-namespace: "true"
|
||||
rpi5.cluster.policy/egress-world: "true"
|
||||
rpi5.cluster.policy/ingress-namespace: "true"
|
||||
webhook:
|
||||
podLabels:
|
||||
rpi5.cluster.policy/egress-kubeapi: "true"
|
||||
cainjector:
|
||||
podLabels:
|
||||
rpi5.cluster.policy/egress-kubeapi: "true"
|
||||
|
||||
global:
|
||||
priorityClassName: system-cluster-critical
|
||||
|
||||
podDnsConfig:
|
||||
nameservers:
|
||||
- 1.1.1.1
|
||||
- 1.0.0.1
|
||||
8
kubernetes/apps/cert-manager/app/repository.yaml
Normal file
8
kubernetes/apps/cert-manager/app/repository.yaml
Normal file
@@ -0,0 +1,8 @@
|
||||
apiVersion: source.toolkit.fluxcd.io/v1
|
||||
kind: HelmRepository
|
||||
metadata:
|
||||
name: cert-manager
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 1h
|
||||
url: https://charts.jetstack.io
|
||||
118
kubernetes/apps/cert-manager/cert-manager.yaml
Normal file
118
kubernetes/apps/cert-manager/cert-manager.yaml
Normal file
@@ -0,0 +1,118 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cert-manager
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: cert-manager
|
||||
path: ./kubernetes/apps/cert-manager/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: clusterissuer-secrets
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: cert-manager
|
||||
path: ./clusterissuer
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: home-cluster-ops-secrets
|
||||
dependsOn:
|
||||
- name: repositories
|
||||
namespace: flux-system
|
||||
decryption:
|
||||
provider: sops
|
||||
secretRef:
|
||||
name: cert-manager-sops-age
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: clusterissuer
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: cert-manager
|
||||
path: ./kubernetes/apps/cert-manager/clusterissuer
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: clusterissuer-secrets
|
||||
namespace: cert-manager
|
||||
- name: cert-manager
|
||||
namespace: cert-manager
|
||||
postBuild:
|
||||
substituteFrom:
|
||||
- kind: Secret
|
||||
name: clusterissuer-secrets
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: certificate-secrets
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: cert-manager
|
||||
path: ./certificates
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: home-cluster-ops-secrets
|
||||
dependsOn:
|
||||
- name: repositories
|
||||
namespace: flux-system
|
||||
decryption:
|
||||
provider: sops
|
||||
secretRef:
|
||||
name: cert-manager-sops-age
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: certificates
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: cert-manager
|
||||
path: ./kubernetes/apps/cert-manager/certificates
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: certificate-secrets
|
||||
namespace: cert-manager
|
||||
- name: cert-manager
|
||||
namespace: cert-manager
|
||||
- name: clusterissuer
|
||||
namespace: cert-manager
|
||||
postBuild:
|
||||
substituteFrom:
|
||||
- kind: Secret
|
||||
name: certificate-secrets
|
||||
64
kubernetes/apps/cert-manager/certificates/adguard-home.yaml
Normal file
64
kubernetes/apps/cert-manager/certificates/adguard-home.yaml
Normal file
@@ -0,0 +1,64 @@
|
||||
#apiVersion: cert-manager.io/v1
|
||||
#kind: Certificate
|
||||
#metadata:
|
||||
# name: adguard-home-cert
|
||||
# namespace: cert-manager
|
||||
#spec:
|
||||
# # Secret names are always required.
|
||||
# secretName: adguard-home.cluster.edward.sydney-tls
|
||||
#
|
||||
# privateKey:
|
||||
# algorithm: RSA
|
||||
# encoding: PKCS1
|
||||
# size: 2048
|
||||
#
|
||||
# # keystores allows adding additional output formats. This is an example for reference only.
|
||||
# keystores:
|
||||
# pkcs12:
|
||||
# create: true
|
||||
# passwordSecretRef:
|
||||
# name: adguard-home-tls-keystore
|
||||
# key: ${adguard_home_certificate_tls_keystore_password}
|
||||
# profile: Modern2023
|
||||
#
|
||||
# duration: 2160h # 90d
|
||||
# renewBefore: 360h # 15d
|
||||
#
|
||||
# isCA: false
|
||||
# usages:
|
||||
# - server auth
|
||||
# - client auth
|
||||
#
|
||||
# subject:
|
||||
# organizations:
|
||||
# - edward.sydney
|
||||
#
|
||||
# # The literalSubject field is exclusive with subject and commonName. It allows
|
||||
# # specifying the subject directly as a string. This is useful for when the order
|
||||
# # of the subject fields is important or when the subject contains special types
|
||||
# # which can be specified by their OID.
|
||||
# #
|
||||
# # literalSubject: "O=jetstack, CN=example.com, 2.5.4.42=John, 2.5.4.4=Doe"
|
||||
#
|
||||
# # At least one of commonName (possibly through literalSubject), dnsNames, uris, emailAddresses, ipAddresses or otherNames is required.
|
||||
# dnsNames:
|
||||
# - "${adguard_home_certificate_dns_name}"
|
||||
# - "*.${adguard_home_certificate_dns_name}"
|
||||
# emailAddresses:
|
||||
# - ${adguard_home_certificate_email}
|
||||
#
|
||||
# # Issuer references are always required.
|
||||
# issuerRef:
|
||||
# name: clusterissuer
|
||||
# # We can reference ClusterIssuers by changing the kind here.
|
||||
# # The default value is Issuer (i.e. a locally namespaced Issuer)
|
||||
# kind: ClusterIssuer
|
||||
# # This is optional since cert-manager will default to this value however
|
||||
# # if you are using an external issuer, change this to that issuer group.
|
||||
# group: cert-manager.io
|
||||
|
||||
#The certificate request has failed to complete and will be retried:
|
||||
# Failed to wait for order resource "adguard-home-cert-1-1931876784" to become
|
||||
# ready: order is in "errored" state: Failed to create Order: 429 urn:ietf:params:acme:error:rateLimited:
|
||||
# Error creating new order :: too many certificates already issued for "edward.sydney".
|
||||
# Retry after 2024-06-25T21:00:00Z: see https://letsencrypt.org/docs/rate-limits/
|
||||
@@ -0,0 +1,22 @@
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: ClusterIssuer
|
||||
metadata:
|
||||
name: clusterissuer
|
||||
namespace: cert-manager
|
||||
spec:
|
||||
acme:
|
||||
email: ${email}
|
||||
server: https://acme-v02.api.letsencrypt.org/directory
|
||||
privateKeySecretRef:
|
||||
name: cluster-issuer-account-key
|
||||
solvers:
|
||||
- dns01:
|
||||
cloudflare:
|
||||
email: ${email}
|
||||
apiTokenSecretRef:
|
||||
name: clusterissuer-secrets
|
||||
key: cloudflare_api_token
|
||||
selector:
|
||||
dnsNames:
|
||||
- "${cluster_cert_domain}"
|
||||
- "*.${cluster_cert_domain}"
|
||||
21
kubernetes/apps/code-server/app/ingress.yaml
Normal file
21
kubernetes/apps/code-server/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: code-server-ingress
|
||||
namespace: code-server
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "code-server.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: code-server
|
||||
port:
|
||||
number: 8443
|
||||
46
kubernetes/apps/code-server/app/pvc.yaml
Normal file
46
kubernetes/apps/code-server/app/pvc.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: code-server-pv
|
||||
namespace: code-server
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 8Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/code-server"
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: code-server-pvc
|
||||
namespace: code-server
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: code-server-pvc
|
||||
namespace: code-server
|
||||
labels:
|
||||
name: code-server-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 8Gi
|
||||
31
kubernetes/apps/code-server/app/release.yaml
Normal file
31
kubernetes/apps/code-server/app/release.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: code-server
|
||||
namespace: code-server
|
||||
spec:
|
||||
releaseName: code-server
|
||||
targetNamespace: code-server
|
||||
chart:
|
||||
spec:
|
||||
chart: code-server
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: nicholaswilde
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
secret:
|
||||
PASSWORD: ${password}
|
||||
SUDO_PASSWORD: ${sudo_password}
|
||||
|
||||
env:
|
||||
TZ: "Australia/Sydney"
|
||||
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
existingClaim: code-server-pvc
|
||||
47
kubernetes/apps/code-server/code-server.yaml
Normal file
47
kubernetes/apps/code-server/code-server.yaml
Normal file
@@ -0,0 +1,47 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: code-server-secrets
|
||||
namespace: code-server
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: code-server
|
||||
path: ./code-server
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: home-cluster-ops-secrets
|
||||
dependsOn:
|
||||
- name: repositories
|
||||
namespace: flux-system
|
||||
decryption:
|
||||
provider: sops
|
||||
secretRef:
|
||||
name: code-server-sops-age
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: code-server
|
||||
namespace: code-server
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: code-server
|
||||
path: ./kubernetes/apps/code-server/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: code-server-secrets
|
||||
namespace: code-server
|
||||
postBuild:
|
||||
substituteFrom:
|
||||
- kind: Secret
|
||||
name: code-server-secrets
|
||||
31
kubernetes/apps/dokuwiki/app/ingress.yaml
Normal file
31
kubernetes/apps/dokuwiki/app/ingress.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: dokuwiki-ingress
|
||||
namespace: dokuwiki
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "dokuwiki.cluster.local"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: dokuwiki-dokuwiki
|
||||
port:
|
||||
number: 18000
|
||||
- host: "dokuwiki.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: dokuwiki-dokuwiki
|
||||
port:
|
||||
number: 18000
|
||||
34
kubernetes/apps/dokuwiki/app/release.yaml
Normal file
34
kubernetes/apps/dokuwiki/app/release.yaml
Normal file
@@ -0,0 +1,34 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: dokuwiki
|
||||
namespace: dokuwiki
|
||||
spec:
|
||||
targetNamespace: dokuwiki
|
||||
chart:
|
||||
spec:
|
||||
chart: dokuwiki
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bitnami
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
dokuwikiUsername: ${username}
|
||||
dokuwikiPassword: ${password}
|
||||
dokuwikiEmail: ${email}
|
||||
dokuwikiFullName: "Edward Cheng"
|
||||
dokuwikiWikiName: My Doku Wiki
|
||||
containerPorts:
|
||||
http: 18000
|
||||
https: 18443
|
||||
persistence:
|
||||
existingClaim: "dokuwiki-pvc"
|
||||
service:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
http: 18000
|
||||
https: 18443
|
||||
46
kubernetes/apps/dokuwiki/app/volume.yaml
Normal file
46
kubernetes/apps/dokuwiki/app/volume.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: dokuwiki-pv
|
||||
namespace: dokuwiki
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 12Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/dokuwiki"
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: dokuwiki-pvc
|
||||
namespace: dokuwiki
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: dokuwiki-pvc
|
||||
namespace: dokuwiki
|
||||
labels:
|
||||
name: dokuwiki-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 12Gi
|
||||
46
kubernetes/apps/dokuwiki/dokuwiki.yaml
Normal file
46
kubernetes/apps/dokuwiki/dokuwiki.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: dokuwiki-secrets
|
||||
namespace: dokuwiki
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: dokuwiki
|
||||
path: ./dokuwiki
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: home-cluster-ops-secrets
|
||||
dependsOn:
|
||||
- name: repositories
|
||||
namespace: flux-system
|
||||
decryption:
|
||||
provider: sops
|
||||
secretRef:
|
||||
name: dokuwiki-sops-age
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: dokuwiki
|
||||
namespace: dokuwiki
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/dokuwiki/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: dokuwiki-secrets
|
||||
namespace: dokuwiki
|
||||
postBuild:
|
||||
substituteFrom:
|
||||
- kind: Secret
|
||||
name: dokuwiki-secrets
|
||||
32
kubernetes/apps/gitea/app/ingress.yaml
Normal file
32
kubernetes/apps/gitea/app/ingress.yaml
Normal file
@@ -0,0 +1,32 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: gitea-ingress
|
||||
namespace: gitea
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "gitea.cluster.local"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: gitea-gitea
|
||||
port:
|
||||
number: 10080
|
||||
- host: "gitea.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: gitea-gitea
|
||||
port:
|
||||
number: 10080
|
||||
56
kubernetes/apps/gitea/app/release.yaml
Normal file
56
kubernetes/apps/gitea/app/release.yaml
Normal file
@@ -0,0 +1,56 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: gitea
|
||||
namespace: gitea
|
||||
spec:
|
||||
targetNamespace: gitea
|
||||
chart:
|
||||
spec:
|
||||
chart: gitea
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bitnami
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
image:
|
||||
debug: true
|
||||
updateStrategy:
|
||||
type: Recreate
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
initialDelaySeconds: 600
|
||||
periodSeconds: 60
|
||||
timeoutSeconds: 30
|
||||
failureThreshold: 5
|
||||
successThreshold: 1
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
path: /
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 60
|
||||
timeoutSeconds: 30
|
||||
failureThreshold: 5
|
||||
successThreshold: 1
|
||||
adminUsername: ${admin_username}
|
||||
adminPassword: ${admin_password}
|
||||
adminEmail: ${admin_email}
|
||||
appName: app_name
|
||||
persistence:
|
||||
existingClaim: gitea-pvc
|
||||
service:
|
||||
ports:
|
||||
http: 10080
|
||||
ssh: 10022
|
||||
postgresql:
|
||||
enabled: false
|
||||
externalDatabase:
|
||||
host: ${db_host}
|
||||
port: ${db_port}
|
||||
user: ${db_user}
|
||||
database: ${db_name}
|
||||
password: ${db_password}
|
||||
46
kubernetes/apps/gitea/app/volume.yaml
Normal file
46
kubernetes/apps/gitea/app/volume.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: gitea-pv
|
||||
namespace: gitea
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 32Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/gitea"
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: gitea-pvc
|
||||
namespace: gitea
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: gitea-pvc
|
||||
namespace: gitea
|
||||
labels:
|
||||
name: gitea-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 32Gi
|
||||
47
kubernetes/apps/gitea/gitea.yaml
Normal file
47
kubernetes/apps/gitea/gitea.yaml
Normal file
@@ -0,0 +1,47 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: gitea-secrets
|
||||
namespace: gitea
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: gitea
|
||||
path: ./gitea
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: home-cluster-ops-secrets
|
||||
dependsOn:
|
||||
- name: repositories
|
||||
namespace: flux-system
|
||||
decryption:
|
||||
provider: sops
|
||||
secretRef:
|
||||
name: gitea-sops-age
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: gitea
|
||||
namespace: gitea
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/gitea/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: gitea-secrets
|
||||
namespace: gitea
|
||||
postBuild:
|
||||
substituteFrom:
|
||||
- kind: Secret
|
||||
name: gitea-secrets
|
||||
|
||||
43
kubernetes/apps/homer/app/development.yaml
Normal file
43
kubernetes/apps/homer/app/development.yaml
Normal file
@@ -0,0 +1,43 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: homer
|
||||
namespace: homer
|
||||
labels:
|
||||
app.kubernetes.io/name: homer
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: homer
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: homer
|
||||
rpi5.cluster.policy/egress-world: "true"
|
||||
rpi5.cluster.policy/ingress-world: "true"
|
||||
spec:
|
||||
securityContext:
|
||||
runAsUser: 1000
|
||||
runAsGroup: 1000
|
||||
containers:
|
||||
- name: homer
|
||||
image: b4bz/homer:v24.05.1
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
env:
|
||||
- name: PORT
|
||||
value: "8088"
|
||||
- name: INIT_ASSETS
|
||||
value: "0"
|
||||
ports:
|
||||
- protocol: TCP
|
||||
containerPort: 8088
|
||||
name: http
|
||||
volumeMounts:
|
||||
- name: assets
|
||||
mountPath: /www/assets
|
||||
volumes:
|
||||
- name: assets
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/homer/www/assets
|
||||
type: Directory
|
||||
21
kubernetes/apps/homer/app/ingress.yaml
Normal file
21
kubernetes/apps/homer/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: homer-ingress
|
||||
namespace: homer
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "home.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: homer
|
||||
port:
|
||||
number: 8088
|
||||
17
kubernetes/apps/homer/app/service.yaml
Normal file
17
kubernetes/apps/homer/app/service.yaml
Normal file
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: homer
|
||||
namespace: homer
|
||||
labels:
|
||||
app.kubernetes.io/name: homer
|
||||
spec:
|
||||
selector:
|
||||
app.kubernetes.io/name: homer
|
||||
type: ClusterIP
|
||||
internalTrafficPolicy: Cluster
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 8088
|
||||
targetPort: 8088
|
||||
name: http
|
||||
16
kubernetes/apps/homer/homer.yaml
Normal file
16
kubernetes/apps/homer/homer.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: homer
|
||||
namespace: homer
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: flux-system
|
||||
path: ./kubernetes/apps/homer/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
31
kubernetes/apps/jellyfin/app/ingress.yaml
Normal file
31
kubernetes/apps/jellyfin/app/ingress.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: jellyfin-ingress
|
||||
namespace: jellyfin
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "jellyfin.cluster.local"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: jellyfin
|
||||
port:
|
||||
number: 8096
|
||||
- host: "jellyfin.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: jellyfin
|
||||
port:
|
||||
number: 8096
|
||||
51
kubernetes/apps/jellyfin/app/pvc.yaml
Normal file
51
kubernetes/apps/jellyfin/app/pvc.yaml
Normal file
@@ -0,0 +1,51 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: jellyfin-config
|
||||
namespace: jellyfin
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 250Mi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/jellyfin/config"
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: jellyfin-data
|
||||
namespace: jellyfin
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 2Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/jellyfin/data"
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
167
kubernetes/apps/jellyfin/app/release.yaml
Normal file
167
kubernetes/apps/jellyfin/app/release.yaml
Normal file
@@ -0,0 +1,167 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: jellyfin
|
||||
namespace: jellyfin
|
||||
spec:
|
||||
releaseName: jellyfin
|
||||
targetNamespace: jellyfin
|
||||
chart:
|
||||
spec:
|
||||
chart: jellyfin
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: beluga-cloud
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
volumeClaimSpec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
volumeName: jellyfin-config
|
||||
data:
|
||||
enabled: true
|
||||
volumeClaimSpec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
volumeName: jellyfin-data
|
||||
jellyfin:
|
||||
mediaVolumes:
|
||||
- name: movies
|
||||
readOnly: false
|
||||
volumeSpec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 8Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: jellyfin-mediavol-movies
|
||||
namespace: jellyfin
|
||||
hostPath:
|
||||
path: "/mnt/nfs/AppData/jellyfin/media/movies"
|
||||
type: "Directory"
|
||||
- name: series
|
||||
readOnly: false
|
||||
volumeSpec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 8Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: jellyfin-mediavol-series
|
||||
namespace: jellyfin
|
||||
hostPath:
|
||||
path: "/mnt/nfs/AppData/jellyfin/media/series"
|
||||
type: "Directory"
|
||||
- name: music-videos
|
||||
readOnly: false
|
||||
volumeSpec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 8Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: jellyfin-mediavol-music-videos
|
||||
namespace: jellyfin
|
||||
hostPath:
|
||||
path: "/mnt/nfs/AppData/jellyfin/media/music-videos"
|
||||
type: "Directory"
|
||||
- name: short-videos
|
||||
readOnly: false
|
||||
volumeSpec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 8Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: jellyfin-mediavol-short-videos
|
||||
namespace: jellyfin
|
||||
hostPath:
|
||||
path: "/mnt/nfs/AppData/jellyfin/media/short-videos"
|
||||
type: "Directory"
|
||||
- name: gv
|
||||
readOnly: false
|
||||
volumeSpec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 8Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: jellyfin-mediavol-gv
|
||||
namespace: jellyfin
|
||||
hostPath:
|
||||
path: "/mnt/nfs/AppData/jellyfin/media/gv"
|
||||
type: "Directory"
|
||||
persistentTranscodes: true
|
||||
|
||||
16
kubernetes/apps/jellyfin/jellyfin.yaml
Normal file
16
kubernetes/apps/jellyfin/jellyfin.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: jellyfin
|
||||
namespace: jellyfin
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/jellyfin/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
|
||||
58
kubernetes/apps/kavita/app/development.yaml
Normal file
58
kubernetes/apps/kavita/app/development.yaml
Normal file
@@ -0,0 +1,58 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: kavita
|
||||
namespace: kavita
|
||||
labels:
|
||||
app.kubernetes.io/name: kavita
|
||||
app.kubernetes.io/instance: kavita
|
||||
annotations:
|
||||
kubectl.kubernetes.io/default-container: kavita
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: kavita
|
||||
app.kubernetes.io/instance: kavita
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: kavita
|
||||
app.kubernetes.io/instance: kavita
|
||||
spec:
|
||||
containers:
|
||||
- image: jvmilazz0/kavita:latest
|
||||
imagePullPolicy: IfNotPresent
|
||||
name: kavita
|
||||
ports:
|
||||
- containerPort: 5000
|
||||
name: http
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: TZ
|
||||
value: Australia/Sydney
|
||||
volumeMounts:
|
||||
- name: kavita-config
|
||||
mountPath: /kavita/config
|
||||
- name: kavita-manga
|
||||
mountPath: /manga
|
||||
- name: kavita-book
|
||||
mountPath: /book
|
||||
- name: kavita-doc
|
||||
mountPath: /doc
|
||||
volumes:
|
||||
- name: kavita-config
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/kavita/config
|
||||
type: Directory
|
||||
- name: kavita-manga
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/kavita/manga
|
||||
type: Directory
|
||||
- name: kavita-book
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/kavita/book
|
||||
type: Directory
|
||||
- name: kavita-doc
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/kavita/doc
|
||||
type: Directory
|
||||
21
kubernetes/apps/kavita/app/ingress.yaml
Normal file
21
kubernetes/apps/kavita/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: kavita-ingress
|
||||
namespace: kavita
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "kavita.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: kavita
|
||||
port:
|
||||
number: 5000
|
||||
18
kubernetes/apps/kavita/app/service.yaml
Normal file
18
kubernetes/apps/kavita/app/service.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: kavita
|
||||
namespace: kavita
|
||||
labels:
|
||||
app.kubernetes.io/name: kavita
|
||||
app.kubernetes.io/instance: kavita
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 5000
|
||||
targetPort: 5000
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
app.kubernetes.io/name: kavita
|
||||
app.kubernetes.io/instance: kavita
|
||||
16
kubernetes/apps/kavita/kavita.yaml
Normal file
16
kubernetes/apps/kavita/kavita.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: kavita
|
||||
namespace: kavita
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/kavita/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
|
||||
21
kubernetes/apps/kustomization.yaml
Normal file
21
kubernetes/apps/kustomization.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ./adguard-home/adguard-home.yaml
|
||||
- ./capacitor/capacitor.yaml
|
||||
- ./cert-manager/cert-manager.yaml
|
||||
- ./code-server/code-server.yaml
|
||||
- ./dokuwiki/dokuwiki.yaml
|
||||
- ./gitea/gitea.yaml
|
||||
- ./homer/homer.yaml
|
||||
- ./jellyfin/jellyfin.yaml
|
||||
- ./kavita/kavita.yaml
|
||||
- ./nexus/nexus.yaml
|
||||
- ./podinfo/podinfo.yaml
|
||||
- ./postgresql/postgresql.yaml
|
||||
- ./qbittorrent/qbittorrent.yaml
|
||||
- ./redis/redis.yaml
|
||||
- ./snippet-box/snippet-box.yaml
|
||||
- ./sonarqube/sonarqube.yaml
|
||||
- ./uptime-kuma/uptime-kuma.yaml
|
||||
- ./weave-gitops/weave-gitops.yaml
|
||||
38
kubernetes/apps/nexus/app/deployment.yaml
Normal file
38
kubernetes/apps/nexus/app/deployment.yaml
Normal file
@@ -0,0 +1,38 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: nexus
|
||||
namespace: nexus
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: nexus
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: nexus
|
||||
spec:
|
||||
securityContext:
|
||||
runAsUser: 0
|
||||
runAsGroup: 0
|
||||
containers:
|
||||
- name: nexus
|
||||
image: klo2k/nexus3:3.68.1-02
|
||||
resources:
|
||||
limits:
|
||||
memory: "3Gi"
|
||||
cpu: "500m"
|
||||
requests:
|
||||
memory: "2Gi"
|
||||
cpu: "500m"
|
||||
ports:
|
||||
- containerPort: 8081
|
||||
volumeMounts:
|
||||
- name: nexus-data
|
||||
mountPath: /nexus-data
|
||||
volumes:
|
||||
- name: nexus-data
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/nexus
|
||||
type: Directory
|
||||
17
kubernetes/apps/nexus/app/service.yaml
Normal file
17
kubernetes/apps/nexus/app/service.yaml
Normal file
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: nexus
|
||||
namespace: nexus
|
||||
annotations:
|
||||
prometheus.io/scrape: 'true'
|
||||
prometheus.io/path: /
|
||||
prometheus.io/port: '8081'
|
||||
spec:
|
||||
selector:
|
||||
app: nexus
|
||||
type: NodePort
|
||||
ports:
|
||||
- port: 8081
|
||||
targetPort: 8081
|
||||
nodePort: 32000
|
||||
15
kubernetes/apps/nexus/nexus.yaml
Normal file
15
kubernetes/apps/nexus/nexus.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: nexus
|
||||
namespace: nexus
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/nexus/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
27
kubernetes/apps/podinfo/app/release.yaml
Normal file
27
kubernetes/apps/podinfo/app/release.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: podinfo
|
||||
namespace: podinfo
|
||||
spec:
|
||||
releaseName: podinfo
|
||||
chart:
|
||||
spec:
|
||||
chart: podinfo
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: podinfo
|
||||
interval: 50m
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
# Default values
|
||||
# https://github.com/stefanprodan/podinfo/blob/master/charts/podinfo/values.yaml
|
||||
values:
|
||||
redis:
|
||||
enabled: true
|
||||
repository: public.ecr.aws/docker/library/redis
|
||||
tag: 7.0.6
|
||||
ingress:
|
||||
enabled: true
|
||||
className: nginx
|
||||
8
kubernetes/apps/podinfo/app/repository.yaml
Normal file
8
kubernetes/apps/podinfo/app/repository.yaml
Normal file
@@ -0,0 +1,8 @@
|
||||
apiVersion: source.toolkit.fluxcd.io/v1
|
||||
kind: HelmRepository
|
||||
metadata:
|
||||
name: podinfo
|
||||
namespace: podinfo
|
||||
spec:
|
||||
interval: 5m
|
||||
url: https://stefanprodan.github.io/podinfo
|
||||
16
kubernetes/apps/podinfo/podinfo.yaml
Normal file
16
kubernetes/apps/podinfo/podinfo.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: podinfo
|
||||
namespace: podinfo
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/podinfo/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
|
||||
31
kubernetes/apps/postgresql/app/ingress.yaml
Normal file
31
kubernetes/apps/postgresql/app/ingress.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: postgresql-ingress
|
||||
namespace: postgresql
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "postgres.cluster.local"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: postgresql-primary
|
||||
port:
|
||||
number: 5432
|
||||
- host: "replica.postgres.cluster.local"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: postgresql-replica
|
||||
port:
|
||||
number: 5432
|
||||
93
kubernetes/apps/postgresql/app/pvc.yaml
Normal file
93
kubernetes/apps/postgresql/app/pvc.yaml
Normal file
@@ -0,0 +1,93 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: postgresql-primary-pv
|
||||
namespace: postgresql
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 8Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/postgresql/primary"
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: postgresql-primary-pvc
|
||||
namespace: postgresql
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: postgresql-primary-pvc
|
||||
namespace: postgresql
|
||||
labels:
|
||||
name: postgresql-primary-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 8Gi
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: postgresql-replica-pv
|
||||
namespace: flux-system
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 8Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/postgresql/replica"
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: postgresql-replica-pvc
|
||||
namespace: postgresql
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: postgresql-replica-pvc
|
||||
namespace: postgresql
|
||||
labels:
|
||||
name: postgresql-replica-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 8Gi
|
||||
57
kubernetes/apps/postgresql/app/release.yaml
Normal file
57
kubernetes/apps/postgresql/app/release.yaml
Normal file
@@ -0,0 +1,57 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: postgresql
|
||||
namespace: postgresql
|
||||
spec:
|
||||
releaseName: postgresql
|
||||
chart:
|
||||
spec:
|
||||
chart: postgresql
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bitnami
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
auth:
|
||||
postgresPassword: ${postgres_password}
|
||||
username: ${username}
|
||||
password: ${password}
|
||||
database: ${database}
|
||||
replicationPassword: ${replication_password}
|
||||
architecture: "replication"
|
||||
replication:
|
||||
synchronousCommit: "on"
|
||||
numSynchronousReplicas: 1
|
||||
applicationName: "postgres_repl"
|
||||
primary:
|
||||
podSecurityContext:
|
||||
fsGroup: 1000
|
||||
containerSecurityContext:
|
||||
runAsUser: 1000
|
||||
runAsGroup: 1000
|
||||
podLabels:
|
||||
name: "postgresql-primary"
|
||||
persistence:
|
||||
existingClaim: postgresql-primary-pvc
|
||||
selector:
|
||||
matchLabels:
|
||||
name: postgresql-primary-pvc
|
||||
readReplicas:
|
||||
name: "replica"
|
||||
podSecurityContext:
|
||||
fsGroup: 1000
|
||||
containerSecurityContext:
|
||||
runAsUser: 1000
|
||||
runAsGroup: 1000
|
||||
podLabels:
|
||||
name: "postgresql-replica"
|
||||
persistence:
|
||||
existingClaim: postgresql-replica-pvc
|
||||
selector:
|
||||
matchLabels:
|
||||
name: postgresql-replica-pvc
|
||||
47
kubernetes/apps/postgresql/postgresql.yaml
Normal file
47
kubernetes/apps/postgresql/postgresql.yaml
Normal file
@@ -0,0 +1,47 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: postgresql-secrets
|
||||
namespace: postgresql
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: postgresql
|
||||
path: ./postgresql
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: home-cluster-ops-secrets
|
||||
dependsOn:
|
||||
- name: repositories
|
||||
namespace: flux-system
|
||||
decryption:
|
||||
provider: sops
|
||||
secretRef:
|
||||
name: postgresql-sops-age
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: postgresql
|
||||
namespace: postgresql
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/postgresql/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: postgresql-secrets
|
||||
namespace: postgresql
|
||||
postBuild:
|
||||
substituteFrom:
|
||||
- kind: Secret
|
||||
name: postgresql-secrets
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
spec:
|
||||
ports:
|
||||
- name: postgresql-tcp
|
||||
port: 5432
|
||||
targetPort: 5432
|
||||
protocol: TCP
|
||||
- name: postgresql-repl--tcp
|
||||
port: 5433
|
||||
targetPort: 5433
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
kubectl patch service ingress-nginx-controller -n ingress-nginx --patch "$(cat ingress-nginx-svc-controller-patch.yaml)"
|
||||
47
kubernetes/apps/prometheus-operator/app/release.yaml
Normal file
47
kubernetes/apps/prometheus-operator/app/release.yaml
Normal file
@@ -0,0 +1,47 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: prometheus-operator
|
||||
namespace: prometheus-operator
|
||||
spec:
|
||||
releaseName: prometheus-operator
|
||||
chart:
|
||||
spec:
|
||||
chart: prometheus-operator
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: truecharts
|
||||
namespace: flux-system
|
||||
interval: 5m
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
service:
|
||||
main:
|
||||
enabled: true
|
||||
ports:
|
||||
main:
|
||||
enabled: true
|
||||
|
||||
workload:
|
||||
main:
|
||||
enabled: true
|
||||
|
||||
portal:
|
||||
open:
|
||||
enabled: true
|
||||
|
||||
operator:
|
||||
register: true
|
||||
|
||||
kps:
|
||||
## Install Prometheus Operator CRDs
|
||||
##
|
||||
crds:
|
||||
enabled: true
|
||||
|
||||
## Manages Prometheus and Alertmanager components
|
||||
##
|
||||
prometheusOperator:
|
||||
enabled: true
|
||||
15
kubernetes/apps/prometheus-operator/prometheus-operator.yaml
Normal file
15
kubernetes/apps/prometheus-operator/prometheus-operator.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: prometheus-operator
|
||||
namespace: prometheus-operator
|
||||
spec:
|
||||
suspend: true
|
||||
interval: 1h
|
||||
targetNamespace: flux-system
|
||||
path: ./kubernetes/apps/prometheus-operator/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
21
kubernetes/apps/qbittorrent/app/ingress.yaml
Normal file
21
kubernetes/apps/qbittorrent/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: qbittorrent-ingress
|
||||
namespace: qbittorrent
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "qbittorrent.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: qbittorrent
|
||||
port:
|
||||
number: 8888
|
||||
30
kubernetes/apps/qbittorrent/app/release.yaml
Normal file
30
kubernetes/apps/qbittorrent/app/release.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: qbittorrent
|
||||
namespace: qbittorrent
|
||||
spec:
|
||||
targetNamespace: qbittorrent
|
||||
chart:
|
||||
spec:
|
||||
chart: qbittorrent
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: adminafk
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
service:
|
||||
web:
|
||||
port: 8888
|
||||
torrent:
|
||||
port: 8388
|
||||
config:
|
||||
persistence:
|
||||
name: "qbittorrent-config-pvc"
|
||||
volumeMounts:
|
||||
- name: qbittorrent-download-pvc
|
||||
mountPath: /download
|
||||
93
kubernetes/apps/qbittorrent/app/volume.yaml
Normal file
93
kubernetes/apps/qbittorrent/app/volume.yaml
Normal file
@@ -0,0 +1,93 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: qbittorrent-config
|
||||
namespace: qbittorrent
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/qbittorrent/config"
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: qbittorrent-config-pvc
|
||||
namespace: qbittorrent
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
---
|
||||
#apiVersion: v1
|
||||
#kind: PersistentVolumeClaim
|
||||
#metadata:
|
||||
# name: qbittorrent-config-pvc
|
||||
# namespace: qbittorrent
|
||||
# labels:
|
||||
# name: qbittorrent-config-pvc
|
||||
#spec:
|
||||
# storageClassName: local-path
|
||||
# volumeMode: Filesystem
|
||||
# accessModes:
|
||||
# - ReadWriteOnce
|
||||
# resources:
|
||||
# requests:
|
||||
# storage: 5Gi
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: qbittorrent-download
|
||||
namespace: qbittorrent
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 5Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/qbittorrent/download"
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: qbittorrent-download-pvc
|
||||
namespace: qbittorrent
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: qbittorrent-download-pvc
|
||||
namespace: qbittorrent
|
||||
labels:
|
||||
name: qbittorrent-download-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 64Gi
|
||||
16
kubernetes/apps/qbittorrent/qbittorrent.yaml
Normal file
16
kubernetes/apps/qbittorrent/qbittorrent.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: qbittorrent
|
||||
namespace: qbittorrent
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/qbittorrent/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
spec:
|
||||
ports:
|
||||
- name: torrent-tcp
|
||||
port: 8388
|
||||
targetPort: 8388
|
||||
protocol: TCP
|
||||
- name: torrent-udp
|
||||
port: 8388
|
||||
targetPort: 8388
|
||||
protocol: UDP
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
kubectl patch service ingress-nginx-controller -n ingress-nginx --patch "$(cat kubernetes/apps/qbittorrent/scripts/ingress-nginx-svc-controller-patch.yaml)"
|
||||
38
kubernetes/apps/redis/app/release.yaml
Normal file
38
kubernetes/apps/redis/app/release.yaml
Normal file
@@ -0,0 +1,38 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: redis
|
||||
spec:
|
||||
releaseName: redis
|
||||
chart:
|
||||
spec:
|
||||
chart: redis
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bitnami
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
auth:
|
||||
password: ${password}
|
||||
master:
|
||||
persistence:
|
||||
existingClaim: redis-master-pvc
|
||||
selector:
|
||||
matchLabels:
|
||||
name: redis-master-pvc
|
||||
persistentVolumeClaimRetentionPolicy:
|
||||
enabled: true
|
||||
replica:
|
||||
replicaCount: 1
|
||||
persistence:
|
||||
existingClaim: redis-replica-pvc
|
||||
selector:
|
||||
matchLabels:
|
||||
name: redis-replica-pvc
|
||||
persistentVolumeClaimRetentionPolicy:
|
||||
enabled: true
|
||||
31
kubernetes/apps/redis/app/volume.yaml
Normal file
31
kubernetes/apps/redis/app/volume.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: redis-master-pvc
|
||||
namespace: redis
|
||||
labels:
|
||||
name: redis-master-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 8Gi
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: redis-replica-pvc
|
||||
namespace: redis
|
||||
labels:
|
||||
name: redis-replica-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 8Gi
|
||||
46
kubernetes/apps/redis/redis.yaml
Normal file
46
kubernetes/apps/redis/redis.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: redis-secrets
|
||||
namespace: redis
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: redis
|
||||
path: ./redis
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: home-cluster-ops-secrets
|
||||
dependsOn:
|
||||
- name: repositories
|
||||
namespace: flux-system
|
||||
decryption:
|
||||
provider: sops
|
||||
secretRef:
|
||||
name: redis-sops-age
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: redis
|
||||
namespace: redis
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/redis/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: redis-secrets
|
||||
namespace: redis
|
||||
postBuild:
|
||||
substituteFrom:
|
||||
- kind: Secret
|
||||
name: redis-secrets
|
||||
34
kubernetes/apps/snippet-box/app/development.yaml
Normal file
34
kubernetes/apps/snippet-box/app/development.yaml
Normal file
@@ -0,0 +1,34 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: snippet-box
|
||||
namespace: snippet-box
|
||||
labels:
|
||||
app.kubernetes.io/name: snippet-box
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: snippet-box
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: snippet-box
|
||||
spec:
|
||||
containers:
|
||||
- name: snippet-box
|
||||
image: pawelmalak/snippet-box:arm
|
||||
ports:
|
||||
- protocol: TCP
|
||||
containerPort: 5000
|
||||
name: snippet-box
|
||||
env:
|
||||
- name: TZ
|
||||
value: Australia/Sydney
|
||||
volumeMounts:
|
||||
- name: snippet-box-data
|
||||
mountPath: /app/data
|
||||
volumes:
|
||||
- name: snippet-box-data
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/snippet-box
|
||||
type: Directory
|
||||
21
kubernetes/apps/snippet-box/app/ingress.yaml
Normal file
21
kubernetes/apps/snippet-box/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: snippet-box-ingress
|
||||
namespace: snippet-box
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "snippet-box.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: snippet-box
|
||||
port:
|
||||
number: 5000
|
||||
17
kubernetes/apps/snippet-box/app/service.yaml
Normal file
17
kubernetes/apps/snippet-box/app/service.yaml
Normal file
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: snippet-box
|
||||
namespace: snippet-box
|
||||
labels:
|
||||
app.kubernetes.io/name: snippet-box
|
||||
spec:
|
||||
selector:
|
||||
app.kubernetes.io/name: snippet-box
|
||||
type: ClusterIP
|
||||
internalTrafficPolicy: Cluster
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 5000
|
||||
targetPort: 5000
|
||||
name: snippet-box
|
||||
16
kubernetes/apps/snippet-box/snippet-box.yaml
Normal file
16
kubernetes/apps/snippet-box/snippet-box.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: snippet-box
|
||||
namespace: snippet-box
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: flux-system
|
||||
path: ./kubernetes/apps/snippet-box/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
47
kubernetes/apps/sonarqube/app/release.yaml
Normal file
47
kubernetes/apps/sonarqube/app/release.yaml
Normal file
@@ -0,0 +1,47 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: sonarqube
|
||||
namespace: sonarqube
|
||||
spec:
|
||||
releaseName: sonarqube
|
||||
chart:
|
||||
spec:
|
||||
chart: sonarqube
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: bitnami
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
sonarqubeUsername: ${sonarqube_username}
|
||||
sonarqubePassword: ${sonarqube_password}
|
||||
sonarqubeEmail: ${sonarqube_email}
|
||||
smtpHost: ${smtp_host}
|
||||
smtpPort: ${smtp_port}
|
||||
smtpUser: ${smtp_user}
|
||||
smtpPassword: ${smtp_password}
|
||||
smtpProtocol: ${smtp_protocol}
|
||||
service:
|
||||
ports:
|
||||
http: 8090
|
||||
elastic: 9091
|
||||
nodePorts:
|
||||
http: 30080
|
||||
elastic: 30091
|
||||
persistence:
|
||||
enabled: true
|
||||
storageClass: "local-path"
|
||||
size: "32Gi"
|
||||
existingClaim: "sonarqube-pvc"
|
||||
postgresql:
|
||||
enabled: false
|
||||
externalDatabase:
|
||||
host: ${db_host}
|
||||
user: ${db_user}
|
||||
password: ${db_password}
|
||||
database: ${db_name}
|
||||
port: ${db_port}
|
||||
46
kubernetes/apps/sonarqube/app/volume.yaml
Normal file
46
kubernetes/apps/sonarqube/app/volume.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: sonarqube-pv
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 32Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/sonarqube"
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: sonarqube-pvc
|
||||
namespace: sonarqube
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-3
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: sonarqube-pvc
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
name: sonarqube-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 32Gi
|
||||
46
kubernetes/apps/sonarqube/sonarqube.yaml
Normal file
46
kubernetes/apps/sonarqube/sonarqube.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: sonarqube-secrets
|
||||
namespace: sonarqube
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: sonarqube
|
||||
path: ./sonarqube
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: home-cluster-ops-secrets
|
||||
dependsOn:
|
||||
- name: repositories
|
||||
namespace: flux-system
|
||||
decryption:
|
||||
provider: sops
|
||||
secretRef:
|
||||
name: sonarqube-sops-age
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: sonarqube
|
||||
namespace: sonarqube
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/sonarqube/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: sonarqube-secrets
|
||||
namespace: sonarqube
|
||||
postBuild:
|
||||
substituteFrom:
|
||||
- kind: Secret
|
||||
name: sonarqube-secrets
|
||||
21
kubernetes/apps/uptime-kuma/app/ingress.yaml
Normal file
21
kubernetes/apps/uptime-kuma/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: uptime-kuma-ingress
|
||||
namespace: uptime-kuma
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "uptime-kuma.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: uptime-kuma
|
||||
port:
|
||||
number: 3001
|
||||
46
kubernetes/apps/uptime-kuma/app/pvc.yaml
Normal file
46
kubernetes/apps/uptime-kuma/app/pvc.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: uptime-kuma-pv
|
||||
namespace: uptime-kuma
|
||||
labels:
|
||||
type: local
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
capacity:
|
||||
storage: 4Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
persistentVolumeReclaimPolicy: Retain
|
||||
local:
|
||||
path: "/mnt/nfs/AppData/uptime-kuma"
|
||||
claimRef:
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
name: uptime-kuma-pvc
|
||||
namespace: uptime-kuma
|
||||
nodeAffinity:
|
||||
required:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/hostname
|
||||
operator: In
|
||||
values:
|
||||
- rpi5-cluster-node-1
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: uptime-kuma-pvc
|
||||
namespace: uptime-kuma
|
||||
labels:
|
||||
name: uptime-kuma-pvc
|
||||
spec:
|
||||
storageClassName: local-path
|
||||
volumeMode: Filesystem
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 4Gi
|
||||
25
kubernetes/apps/uptime-kuma/app/release.yaml
Normal file
25
kubernetes/apps/uptime-kuma/app/release.yaml
Normal file
@@ -0,0 +1,25 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: uptime-kuma
|
||||
namespace: uptime-kuma
|
||||
spec:
|
||||
releaseName: uptime-kuma
|
||||
targetNamespace: uptime-kuma
|
||||
chart:
|
||||
spec:
|
||||
chart: uptime-kuma
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: irsigler
|
||||
namespace: flux-system
|
||||
interval: 1h
|
||||
install:
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
volume:
|
||||
enabled: true
|
||||
accessMode: ReadWriteOnce
|
||||
size: 4Gi
|
||||
existingClaim: "uptime-kuma-pvc"
|
||||
15
kubernetes/apps/uptime-kuma/uptime-kuma.yaml
Normal file
15
kubernetes/apps/uptime-kuma/uptime-kuma.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: uptime-kuma
|
||||
namespace: uptime-kuma
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/apps/uptime-kuma/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
31
kubernetes/apps/weave-gitops/app/ingress.yaml
Normal file
31
kubernetes/apps/weave-gitops/app/ingress.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: weave-gitops-ingress
|
||||
namespace: flux-system
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: "weave-gitops.cluster.edward.sydney"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: ww-gitops-weave-gitops
|
||||
port:
|
||||
number: 9001
|
||||
- host: "weave-gitops.cluster.local"
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: ww-gitops-weave-gitops
|
||||
port:
|
||||
number: 9001
|
||||
41
kubernetes/apps/weave-gitops/app/release.yaml
Normal file
41
kubernetes/apps/weave-gitops/app/release.yaml
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
apiVersion: source.toolkit.fluxcd.io/v1beta2
|
||||
kind: HelmRepository
|
||||
metadata:
|
||||
annotations:
|
||||
metadata.weave.works/description: This is the source location for the Weave GitOps
|
||||
Dashboard's helm chart.
|
||||
labels:
|
||||
app.kubernetes.io/component: ui
|
||||
app.kubernetes.io/created-by: weave-gitops-cli
|
||||
app.kubernetes.io/name: weave-gitops-dashboard
|
||||
app.kubernetes.io/part-of: weave-gitops
|
||||
name: ww-gitops
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 1h0m0s
|
||||
type: oci
|
||||
url: oci://ghcr.io/weaveworks/charts
|
||||
---
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
annotations:
|
||||
metadata.weave.works/description: This is the Weave GitOps Dashboard. It provides
|
||||
a simple way to get insights into your GitOps workloads.
|
||||
name: ww-gitops
|
||||
namespace: flux-system
|
||||
spec:
|
||||
chart:
|
||||
spec:
|
||||
chart: weave-gitops
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: ww-gitops
|
||||
interval: 1h0m0s
|
||||
values:
|
||||
adminUser:
|
||||
create: true
|
||||
passwordHash: $2a$10$gnPEHsFzIJXg/eron5LiQ.teGZkKETxuA2WAyKSbxHvxpkzWJvbDe
|
||||
username: admin
|
||||
|
||||
16
kubernetes/apps/weave-gitops/weave-gitops.yaml
Normal file
16
kubernetes/apps/weave-gitops/weave-gitops.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: weave-gitops
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: flux-system
|
||||
path: ./kubernetes/apps/weave-gitops/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
43
kubernetes/infrastructure/cilium/app/release.yaml
Normal file
43
kubernetes/infrastructure/cilium/app/release.yaml
Normal file
@@ -0,0 +1,43 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: cilium
|
||||
namespace: kube-system
|
||||
spec:
|
||||
chart:
|
||||
spec:
|
||||
chart: cilium
|
||||
version: 1.15.5
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
namespace: kube-system
|
||||
name: cilium
|
||||
install:
|
||||
crds: Create
|
||||
upgrade:
|
||||
crds: CreateReplace
|
||||
interval: 1h
|
||||
driftDetection:
|
||||
mode: enabled
|
||||
values:
|
||||
global:
|
||||
encryption:
|
||||
enabled: true
|
||||
nodeEncryption: true
|
||||
|
||||
policyEnforcementMode: default
|
||||
|
||||
operator:
|
||||
replicas: 1
|
||||
|
||||
ipam:
|
||||
mode: cluster-pool
|
||||
operator:
|
||||
clusterPoolIPv4PodCIDRList: [10.42.0.0/16]
|
||||
clusterPoolIPv4MaskSize: 24
|
||||
|
||||
dnsProxy:
|
||||
dnsRejectResponseCode: nameError
|
||||
|
||||
cni:
|
||||
exclusive: false
|
||||
35
kubernetes/infrastructure/cilium/cilium.yaml
Normal file
35
kubernetes/infrastructure/cilium/cilium.yaml
Normal file
@@ -0,0 +1,35 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cilium
|
||||
namespace: kube-system
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/infrastructure/cilium/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: cilium-networkpolicies
|
||||
namespace: kube-system
|
||||
spec:
|
||||
suspend: false
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/infrastructure/cilium/networkpolicies
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: ingress-nginx
|
||||
namespace: ingress-nginx
|
||||
4
kubernetes/infrastructure/cilium/kustomization.yaml
Normal file
4
kubernetes/infrastructure/cilium/kustomization.yaml
Normal file
@@ -0,0 +1,4 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- cilium.yaml
|
||||
@@ -0,0 +1,21 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumNetworkPolicy
|
||||
metadata:
|
||||
name: coredns
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
k8s-app: kube-dns
|
||||
egress:
|
||||
- toEntities:
|
||||
- world
|
||||
toPorts:
|
||||
- ports:
|
||||
- port: "53"
|
||||
- toEntities:
|
||||
- host
|
||||
- remote-node
|
||||
toPorts:
|
||||
- ports:
|
||||
- port: "6443"
|
||||
@@ -0,0 +1,20 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: egress-kube-dns
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchExpressions:
|
||||
- key: rpi5.cluster.policy/egress-kube-dns
|
||||
operator: NotIn
|
||||
values:
|
||||
- "false"
|
||||
egress:
|
||||
- toEndpoints:
|
||||
- matchLabels:
|
||||
io.kubernetes.pod.namespace: kube-system
|
||||
k8s-app: kube-dns
|
||||
toPorts:
|
||||
- ports:
|
||||
- port: "53"
|
||||
@@ -0,0 +1,22 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: egress-kubeapi
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
rpi5.cluster.policy/egress-kubeapi: "true"
|
||||
egress:
|
||||
- toEntities:
|
||||
- host
|
||||
- remote-node
|
||||
toPorts:
|
||||
- ports:
|
||||
- port: "6443"
|
||||
- toEntities:
|
||||
- kube-apiserver
|
||||
toPorts:
|
||||
- ports:
|
||||
- port: "443"
|
||||
- port: "6443"
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: egress-namespace
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
rpi5.cluster.policy/egress-namespace: "true"
|
||||
egress:
|
||||
- toEndpoints:
|
||||
- {}
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: egress-nodes
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
rpi5.cluster.policy/egress-nodes: "true"
|
||||
egress:
|
||||
- toEntities:
|
||||
- host
|
||||
- remote-node
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: egress-world
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
rpi5.cluster.policy/egress-world: "true"
|
||||
egress:
|
||||
- toCIDRSet:
|
||||
- cidr: 0.0.0.0/0
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: ingress-namespace
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
rpi5.cluster.policy/ingress-namespace: "true"
|
||||
ingress:
|
||||
- fromEndpoints:
|
||||
- {}
|
||||
@@ -0,0 +1,67 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: ingress-ingress
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
rpi5.cluster.policy/ingress-ingress: "true"
|
||||
ingress:
|
||||
- fromEndpoints:
|
||||
- matchLabels:
|
||||
io.kubernetes.pod.namespace: ingress-nginx
|
||||
app.kubernetes.io/name: ingress-nginx
|
||||
app.kubernetes.io/component: controller
|
||||
---
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumNetworkPolicy
|
||||
metadata:
|
||||
name: ingress-nginx
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: ingress-nginx
|
||||
app.kubernetes.io/component: controller
|
||||
egress:
|
||||
- toEndpoints:
|
||||
- matchLabels:
|
||||
rpi5.cluster.policy/ingress-ingress: "true"
|
||||
matchExpressions:
|
||||
- key: io.kubernetes.pod.namespace
|
||||
operator: Exists
|
||||
---
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: egress-ingress
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
rpi5.cluster.policy/egress-ingress: "true"
|
||||
egress:
|
||||
- toEndpoints:
|
||||
- matchLabels:
|
||||
io.kubernetes.pod.namespace: ingress-nginx
|
||||
app.kubernetes.io/name: ingress-nginx
|
||||
app.kubernetes.io/component: controller
|
||||
---
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumNetworkPolicy
|
||||
metadata:
|
||||
name: egress-nginx
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: ingress-nginx
|
||||
app.kubernetes.io/component: controller
|
||||
ingress:
|
||||
- fromEndpoints:
|
||||
- matchLabels:
|
||||
rpi5.cluster.policy/egress-ingress: "true"
|
||||
matchExpressions:
|
||||
- key: io.kubernetes.pod.namespace
|
||||
operator: Exists
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: ingress-nodes
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
rpi5.cluster.policy/ingress-nodes: "true"
|
||||
ingress:
|
||||
- fromEntities:
|
||||
- host
|
||||
- remote-node
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumClusterwideNetworkPolicy
|
||||
metadata:
|
||||
name: ingress-world
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
rpi5.cluster.policy/ingress-world: "true"
|
||||
ingress:
|
||||
- fromEntities:
|
||||
- world
|
||||
@@ -0,0 +1,16 @@
|
||||
apiVersion: cilium.io/v2
|
||||
kind: CiliumNetworkPolicy
|
||||
metadata:
|
||||
name: local-path-provisioner
|
||||
namespace: kube-system
|
||||
spec:
|
||||
endpointSelector:
|
||||
matchLabels:
|
||||
app: local-path-provisioner
|
||||
egress:
|
||||
- toEntities:
|
||||
- host
|
||||
- remote-node
|
||||
toPorts:
|
||||
- ports:
|
||||
- port: "6443"
|
||||
113
kubernetes/infrastructure/ingress-nginx/app/release.yaml
Normal file
113
kubernetes/infrastructure/ingress-nginx/app/release.yaml
Normal file
@@ -0,0 +1,113 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: ingress-nginx
|
||||
namespace: ingress-nginx
|
||||
spec:
|
||||
interval: 1h
|
||||
driftDetection:
|
||||
mode: enabled
|
||||
chart:
|
||||
spec:
|
||||
chart: ingress-nginx
|
||||
version: 4.10.1
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
namespace: ingress-nginx
|
||||
name: ingress-nginx
|
||||
interval: 1h
|
||||
values:
|
||||
rbac:
|
||||
create: true
|
||||
|
||||
controller:
|
||||
priorityClassName: system-cluster-critical
|
||||
|
||||
extraArgs:
|
||||
update-status-on-shutdown: "false"
|
||||
tcp-services-configmap: "ingress-nginx/tcp-services"
|
||||
udp-services-configmap: "ingress-nginx/udp-services"
|
||||
|
||||
podLabels:
|
||||
rpi5.cluster.policy/egress-kubeapi: "true"
|
||||
rpi5.cluster.policy/egress-namespace: "true"
|
||||
rpi5.cluster.policy/egress-world-with-lan: "true"
|
||||
rpi5.cluster.policy/ingress-nodes: "true"
|
||||
rpi5.cluster.policy/ingress-prometheus: "true"
|
||||
rpi5.cluster.policy/ingress-world: "true"
|
||||
|
||||
allowSnippetAnnotations: true
|
||||
|
||||
# maxmindLicenseKey: ${geoip_license_key}
|
||||
|
||||
config:
|
||||
proxy-buffer-size: 16k
|
||||
use-gzip: ${use_gzip:=true}
|
||||
enable-brotli: ${enable_brotli:=true}
|
||||
hsts-max-age: ${hsts_max_age:=31536000}
|
||||
hsts-preload: ${hsts_preload:=true}
|
||||
disable-ipv6: ${disable_ipv6:=false}
|
||||
disable-ipv6-dns: ${disable_ipv6_dns:=false}
|
||||
keep-alive-requests: ${keep_alive_requests:=1000}
|
||||
use-geoip2: ${use_geoip2:=true}
|
||||
custom-http-errors: 401,403,404,500,501,502,503,504
|
||||
|
||||
extraEnvs:
|
||||
- name: TZ
|
||||
value: Australia/Sydney
|
||||
|
||||
addHeaders:
|
||||
Referrer-Policy: same-origin, strict-origin-when-cross-origin
|
||||
X-Content-Type-Options: nosniff
|
||||
X-Frame-Options: SAMEORIGIN
|
||||
X-XSS-Protection: 1; mode=block
|
||||
|
||||
ingressClassResource:
|
||||
default: true
|
||||
|
||||
service:
|
||||
externalTrafficPolicy: Cluster
|
||||
ipFamilyPolicy: SingleStack
|
||||
|
||||
metrics:
|
||||
enabled: ${metrics_enabled:=false}
|
||||
# serviceMonitor:
|
||||
# enabled: ${metrics_enabled:=false}
|
||||
# scrapeInterval: 1m
|
||||
|
||||
admissionWebhooks:
|
||||
labels:
|
||||
rpi5.cluster.policy/egress-kubeapi: "true"
|
||||
patch:
|
||||
labels:
|
||||
rpi5.cluster.policy/egress-kubeapi: "true"
|
||||
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
volumeMounts:
|
||||
- mountPath: /etc/nginx/template
|
||||
name: nginx-template-volume
|
||||
readOnly: true
|
||||
volumes:
|
||||
- name: nginx-template-volume
|
||||
hostPath:
|
||||
path: /mnt/nfs/AppData/ingress-nginx/etc/nginx/template
|
||||
type: Directory
|
||||
|
||||
defaultBackend:
|
||||
enabled: true
|
||||
image:
|
||||
repository: ghcr.io/tarampampam/error-pages
|
||||
tag: 2.27.0@sha256:40e2631173b1a407c18fe7d1ba8104d995cf9e4780d123eeadfa1d57c68eaf4f
|
||||
pullPolicy: IfNotPresent
|
||||
extraEnvs:
|
||||
- name: TEMPLATE_NAME
|
||||
value: connection
|
||||
- name: SHOW_DETAILS
|
||||
value: "true"
|
||||
- name: READ_BUFFER_SIZE
|
||||
value: "8192"
|
||||
podLabels:
|
||||
rpi5.cluster.policy/ingress-namespace: "true"
|
||||
@@ -0,0 +1,8 @@
|
||||
apiVersion: source.toolkit.fluxcd.io/v1
|
||||
kind: HelmRepository
|
||||
metadata:
|
||||
name: ingress-nginx
|
||||
namespace: ingress-nginx
|
||||
spec:
|
||||
interval: 1h
|
||||
url: https://kubernetes.github.io/ingress-nginx
|
||||
@@ -0,0 +1,26 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: tcp-services
|
||||
namespace: ingress-nginx
|
||||
data:
|
||||
"53": "flux-system/adguard-home:53"
|
||||
"853": "flux-system/adguard-home:853"
|
||||
"5432": "postgresql/postgresql-primary:5432"
|
||||
"5433": "postgresql/postgresql-replica:5432"
|
||||
"5443": "flux-system/adguard-home:5443"
|
||||
"6060": "flux-system/adguard-home:6060"
|
||||
"8388": "qbittorrent/qbittorrent-torrent:8388"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: udp-services
|
||||
namespace: ingress-nginx
|
||||
data:
|
||||
"53": "flux-system/adguard-home:53"
|
||||
"67": "flux-system/adguard-home:67"
|
||||
"68": "flux-system/adguard-home:68"
|
||||
"853": "flux-system/adguard-home:853"
|
||||
"5443": "flux-system/adguard-home:5443"
|
||||
"8388": "qbittorrent/qbittorrent-torrent:8388"
|
||||
@@ -0,0 +1,9 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: ingress-nginx-values
|
||||
namespace: ingress-nginx
|
||||
data:
|
||||
use_geoip2: "false"
|
||||
disable_ipv6: "true"
|
||||
disable_ipv6_dns: "true"
|
||||
@@ -0,0 +1,15 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: ingress-nginx-config
|
||||
namespace: ingress-nginx
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
path: ./kubernetes/infrastructure/ingress-nginx/config
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
91
kubernetes/infrastructure/ingress-nginx/ingress-nginx.yaml
Normal file
91
kubernetes/infrastructure/ingress-nginx/ingress-nginx.yaml
Normal file
@@ -0,0 +1,91 @@
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: ingress-nginx
|
||||
namespace: ingress-nginx
|
||||
spec:
|
||||
interval: 10m
|
||||
timeout: 1m30s
|
||||
retryInterval: 30s
|
||||
targetNamespace: ingress-nginx
|
||||
path: ./kubernetes/infrastructure/ingress-nginx/app
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
namespace: flux-system
|
||||
name: flux-system
|
||||
dependsOn:
|
||||
- name: ingress-nginx-config
|
||||
postBuild:
|
||||
substituteFrom:
|
||||
- kind: ConfigMap
|
||||
name: ingress-nginx-values
|
||||
patches:
|
||||
- target:
|
||||
kind: Service
|
||||
name: ingress-nginx-controller
|
||||
namespace: ingress-nginx
|
||||
patch: |
|
||||
- op: add
|
||||
path: /spec/ports/-
|
||||
value:
|
||||
name: dns-tcp
|
||||
port: 53
|
||||
targetPort: 53
|
||||
protocol: TCP
|
||||
- op: add
|
||||
path: /spec/ports/-
|
||||
value:
|
||||
name: dns-udp
|
||||
port: 53
|
||||
targetPort: 53
|
||||
protocol: UDP
|
||||
- op: add
|
||||
path: /spec/ports/-
|
||||
value:
|
||||
name: dhcps-udp
|
||||
port: 67
|
||||
targetPort: 67
|
||||
protocol: UDP
|
||||
- op: add
|
||||
path: /spec/ports/-
|
||||
value:
|
||||
name: dhcpc-udp
|
||||
port: 68
|
||||
targetPort: 68
|
||||
protocol: UDP
|
||||
- op: add
|
||||
path: /spec/ports/-
|
||||
value:
|
||||
name: dns-tls-tcp
|
||||
port: 853
|
||||
targetPort: 853
|
||||
protocol: TCP
|
||||
- op: add
|
||||
path: /spec/ports/-
|
||||
value:
|
||||
name: dns-tls-udp
|
||||
port: 853
|
||||
targetPort: 853
|
||||
protocol: UDP
|
||||
- op: add
|
||||
path: /spec/ports/-
|
||||
value:
|
||||
name: dnscrypt-tcp
|
||||
port: 5443
|
||||
targetPort: 5443
|
||||
protocol: TCP
|
||||
- op: add
|
||||
path: /spec/ports/-
|
||||
value:
|
||||
name: dnscrypt-udp
|
||||
port: 5443
|
||||
targetPort: 5443
|
||||
protocol: UDP
|
||||
- op: add
|
||||
path: /spec/ports/-
|
||||
value:
|
||||
name: https-pprof
|
||||
port: 6060
|
||||
targetPort: 6060
|
||||
protocol: TCP
|
||||
@@ -0,0 +1,5 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ingress-nginx.yaml
|
||||
- ingress-nginx-config.yaml
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user