Rediacci reeglid
Iga Rediacci repositoorium töötab isoleeritud keskkonnas oma Dockeri deemoni, krüpteeritud LUKS-mahu ja pühendatud IP-vahemikuga. Need reeglid tagavad, et teie rakendus töötab selles arhitektuuris õigesti.
Rediaccfile
- Igal repositooriumil peab olema Rediaccfile, bash-skript elutsükli funktsioonidega.
- Elutsükli funktsioonid:
up(),down(). Valikuline:info(). up()käivitab teie teenused.down()peatab need.info()pakub olekuteavet (konteineri olek, hiljutised logid, tervis).- Rediaccfile’i laeb renet, sellel on juurdepääs shelli muutujatele, mitte ainult keskkonna muutujatele.
Saadaolevad keskkonna muutujad Rediaccfile’is
| Muutuja | Näide | Kirjeldus |
|---|---|---|
REDIACC_WORKING_DIR | /mnt/rediacc/mounts/abc123/ | Ühendatud repositooriumi juuretee |
REDIACC_NETWORK_ID | 6336 | Võrgupõhise isoleerimise identifikaator |
REDIACC_REPOSITORY | abc123-... | Repositooriumi GUID |
{SVCNAME}_IP | HEARTBEAT_IP=127.0.24.195 | Teenusepõhine loopback-IP (teenuse nimi suurtähtedega) |
Minimaalne Rediaccfile
#!/bin/bash
_compose() {
renet compose -- "$@"
}
up() {
_compose up -d
}
down() {
_compose down
}
Compose
- Kasutage
renet compose, mittedocker compose, renet süstib võrgu isoleerimise, hosti võrgunduse, loopback-IP-d ja teenuse sildid. - Ärge määrake
network_mode-i oma compose-failis, renet sunnibnetwork_mode: host-i kõigile teenustele. Kõik teie määratud väärtused kirjutatakse üle. - Ärge määrake
rediacc.*-silte, renet süstib automaatseltrediacc.network_id,rediacc.service_ipjarediacc.service_name. ports:-kaardistused eiratakse hosti võrguühenduse režiimis. Lisagerediacc.service_port-silt HTTP-marsruutimiseks (teenused ilma selle sildita ei saa HTTP-marsruute). Kasutagerediacc.tcp_ports/rediacc.udp_ports-silte TCP/UDP-edasisuunamiseks.- Taaskäivituspoliitikad (
restart: always,on-failurejne) on ohutu kasutada, renet eemaldab need automaatselt CRIU ühilduvuse jaoks. Marsruuteri valvekoer taastab peatatud konteinerid automaatselt.rediacc.json-sse salvestatud algse poliitika alusel. - Ohtlikud seadistused on vaikimisi blokeeritud,
privileged: true,pid: host,ipc: hostja süsteemiteede hosti sidumiskohad lükatakse tagasi. Kasutagerenet compose --unsafe, et tühistada omal vastutusel.
Keskkonna muutujad konteinerite sees
Renet süstib need automaatselt igasse konteinerisse:
| Muutuja | Kirjeldus |
|---|---|
SERVICE_IP | Selle konteineri pühendatud loopback-IP |
REDIACC_NETWORK_ID | Võrgupõhise isoleerimise ID |
Teenuse nimetamine ja marsruutimine
- Compose’i teenuse nimi saab automaatse marsruudi URL-eesliiteks.
- Grand repositooriumid:
https://{service}.{repo}.{machine}.{baseDomain}(nthttps://myapp.marketing.server-1.example.com). - Fork-repositooriumid:
https://{service}-fork-{tag}.{repo}.{machine}.{baseDomain}(nthttps://myapp-fork-staging.marketing.server-1.example.com).-fork--eraldaja hoiab ära URL-kokkupõrked grand-repositooriumi teenuste nimedega. Forki URL kasutab alati vanema repositooriumi olemasolevat metamärgi sertifikaati, seega pole uut serti vaja. - Kohandatud domeenide jaoks kasutage Traefiku silte (kuid märkige: kohandatud domeenid EI sobi forkidega, domeen kuulub grand-repositooriumile).
Võrgundus
- Igal repositooriumil on oma Dockeri deemon aadressil
/var/run/rediacc/docker-<networkId>.sock. - Igal teenusel on unikaalne loopback-IP /26-alamvõrgus (nt
127.0.24.192/26). - Sidumine on automaatne: Teenused saavad siduda
0.0.0.0võilocalhostkülge - kernel kirjutab aadressi läbipaistvalt teenuse määratud loopback-IP-ga üle. Selgesõnaline${SERVICE_IP}sidumine töötab endiselt, kuid pole enam nõutav. - Tervisekontrollid võivad kasutada
localhost-i või${SERVICE_IP}-d. Näide:healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] - Repositooriumivahelised ühendused on kerneli poolt blokeeritud: Kernel blokeerib automaatselt ühendused loopback-IP-dega väljaspool repositooriumi
/26-alamvõrku. Teenus ühes repositooriumis ei saa jõuda teenusteni teises repositooriumis. - Teenustevaheline side: Kasutage teenuste nimesid (nt
db,redis) - renet süstib automaatselt iga teenuse nime hostinimena, mis lahendatakse õige IP-sse. Dockeri DNS-nimed EI tööta hosti režiimis, kuid teenuste nimed/etc/hostskaudu töötavad. Vältige${DB_IP}või sarnase süsteemi manustamist püsivatesse konfiguratsioonifailidesse (nt andmebaasi salvestatud ühendusstringid) - forkimisel kandub toores IP üle ja osutab valele repositooriumile. Teenuste nimed lahendatakse alati õigesti repositooriumi kaupa. - Pordikonfliktid on võimatud repositooriumide vahel, igal on oma Dockeri deemon ja IP-vahemik.
- TCP/UDP pordi edasisuunamine: Lisage sildid mitte-HTTP-portide paljastamiseks:
labels: - "rediacc.tcp_ports=5432,3306" - "rediacc.udp_ports=53"
Salvestus
- Kõik Dockeri andmed salvestatakse krüpteeritud repositooriumi sisse, Dockeri
data-rootasub LUKS-mahus aadressil{mount}/.rediacc/docker/data. Nimetatud mahud, pildid ja konteineri kihid on kõik krüpteeritud, varundatud ja automaatselt forkitud. - Sidumiskohad
${REDIACC_WORKING_DIR}/...-sse on soovitatavad selguse huvides, kuid nimetatud mahud töötavad samuti turvaliselt.volumes: - ${REDIACC_WORKING_DIR}/data:/data # sidumine (soovitatav) - pgdata:/var/lib/postgresql/data # nimetatud maht (ka turvaline) - LUKS-maht on ühendatud aadressil
/mnt/rediacc/mounts/<guid>/. - BTRFS-hetktõmmised jäädvustavad kogu LUKS-taustafaili, sealhulgas kõik sidumiskoha andmed.
- Andmesalv on fikseeritud suurusega BTRFS-mahufail süsteemi kettal. Kasutage
rdc machine query --name <name> --system, et näha tegelikku vaba ruumi. Laiendage käsugardc datastore resize.
CRIU (reaalajas migratsioon)
- Kaasamine sildi kaudu: Lisage
rediacc.checkpoint=truekonteineritele, mida soovite kontrollpunkti seada. Konteinerid ilma selleta (andmebaasid, vahemälud) käivituvad värsked ja taastuvad oma mehhanismide kaudu (WAL, LDF, AOF). repo down --checkpointsalvestab protsessi oleku enne peatamist, järgminerepo uptaastab automaatselt. See on peamine sama-masina voog, mis on kinnitatud töötavana.backup push --checkpointjäädvustab töötava protsessi mälu + kettaoleku märgistatud konteinerite jaoks, seejärel edastab mahu teisele masinale. Taastage sihtmasinal käsugarepo up.repo fork --checkpointjäädvustab protsessi oleku enne forkimist ja CoW-kloonib kontrollpunkti forkiga. ⚠️ Samal masinal ebaõnnestub järgnevrepo upforkil praegu veateategacriu failed: type RESTORE errno 0, kui vanem on veel töötamas. Ülalvoolsed CRIU vead checkpoint-restore/criu#478 / #514. Kasutagerepo down --checkpointkohapealseks salvestamiseks/taastamiseks võibackup push --checkpointmasina ülese migratsiooni jaoks.repo uptuvastab kontrollpunkti andmed automaatselt ja taastab, kui need leitakse. Kasutage--skip-checkpoint, et sundida värsket käivitamist.- Sõltuvusteadlik taastamine: Kasutab compose’i
depends_on, et käivitada andmebaasid esmalt (oodata tervena), seejärel CRIU-taastada rakenduse konteinerid. - TCP-ühendused muutuvad taastamisel aegunuks, rakendused peavad käsitlema
ECONNRESET-i ja uuesti ühenduma. CRIU ei säilita aktiivse TCP-ühenduse olekut taastamise üleselt üheski toetatud voos. - Dockeri eksperimentaalne režiim on lubatud automaatselt repositooriumipõhistel deemonitel.
- CRIU installitakse
rdc config machine setupkäigus. /etc/criu/runc.confon konfigureeritud vaikimisi koostcp-established-ga.- Konteineri turvapoliitikad süstitakse automaatselt märgistatud konteineritele,
renet composelisab järgmisedrediacc.checkpoint=true-ga konteineritele:cap_add:CHECKPOINT_RESTORE,SYS_PTRACE,NET_ADMIN(minimaalne komplekt CRIU jaoks kernelis 5.9+)security_opt:apparmor=unconfined(CRIU AppArmori tugi pole ülalvoolul veel stabiilne)userns_mode: host(CRIU nõuab init-nimeruum juurdepääsu/proc/pid/map_files-le)
- Konteinerid ilma sildita töötavad puhtama turvapoosiga (ilma lisavõimalusteta).
- Dockeri vaikimisi seccomp-profiil säilitatakse, CRIU kasutab
PTRACE_O_SUSPEND_SECCOMP(kernel 4.3+), et filtreid kontrollpunkti/taastamise ajal ajutiselt peatada. - Ärge määrake CRIU võimalusi käsitsi oma compose-failis, renet käsitseb seda sildi alusel.
- Vaadake heartbeat-malli CRIU-ühilduva viiterakenduse jaoks.
CRIU-ühilduvad rakenduse mustrid
- Käsitsege
ECONNRESET-i kõigil püsiühendustel (andmebaasibasseinid, veebipesad, sõnumijärjekorrad). - Kasutage ühendusbasseini teeke, mis toetavad automaatset taasühendamist.
- Lisage
process.on("uncaughtException")ohutusnet aegunud pesavigade jaoks sisemistest teegiobjektidest. - Taaskäivituspoliitikaid haldab renet automaatselt (eemaldatakse CRIU jaoks, valvekoer käsitseb taastamist).
- Vältige Dockeri DNS-ile toetumist, kasutage loopback-IP-sid teenuste vaheliseks suhtluseks.
Hosti turvapoliitikad OS-i kaupa
Kõigil viiel ametlikult toetatud serveri OS-il (vaadake Nõuded) kasutavad repositooriumipõhine dockeri deemon ja selle käitatavad konteinerid vaikimisi konteinersilte. rdc config machine setup ei installi kohandatud SELinuxi poliitikat ega AppArmori profiili.
- Ubuntu 24.04 / openSUSE Leap 16.0: AppArmor on vaikimisi lubatud. Konteinerid töötavad vaikimisi docker-container profiili all. Ainus erand on CRIU (
apparmor=unconfinedrediacc.checkpoint=true-konteinerite jaoks, vastavalt ülaltoodud märkusele). - Fedora 43 / Oracle Linux 10: SELinux töötab vaikimisi jõustataval režiimil. Konteinerid saavad standardse
container_tkonteksti. Lisapoliitika installimine pole vajalik. Kui seadistamise samm ebaõnnestub AVC-keeldumistega, vaadake Tõrkeotsing → SELinuxi keeldumised. - Debian 13: AppArmor on saadaval, kuid ei jõustata vaikimisi kõigil domeenidel. Konteinerid kasutavad endiselt docker-container profiili.
OS-põhist turvaasendi lippu pole vaja; rdc ja renet tuvastavad, mis töötab, ja toodavad sama repositooriumipõhise isoleerimise kõigil viiel distributsioonil.
Turvalisus
- LUKS-krüpteerimine on standardsete repositooriumide jaoks kohustuslik. Igal repositooriumil on oma krüpteerimisvõti.
- Mandaadid on salvestatud CLI konfiguratsioonis (
~/.config/rediacc/rediacc.json). Konfiguratsiooni kaotamine tähendab juurdepääsu kaotamist krüpteeritud mahtudele. - Ärge kunagi siduge mandaate versioonihaldusesse. Kasutage
env_file-i ja genereerige saladusedup()-is. - Repositooriumi isoleerimine: Iga repositooriumi Dockeri deemon, võrgustik ja salvestus on täielikult isoleeritud teistest repositooriumitest samal masinal.
- Agendi isoleerimine: AI-agendid töötavad vaikimisi ainult fork-režiimis. Igal repositooriumil on oma SSH-võti koos serveripoolse liivakastijõustamisega (
sandbox-gatewayForceCommand). Kõik ühendused on liivakastis Landlock LSM, OverlayFS kodu-ülekatte ja repositooriumipõhise TMPDIR-iga. Repositooriumiülene failisüsteemi juurdepääs on kerneli poolt blokeeritud. sudoon repositooriumi liivakastis disaini järgi keelatud. Landlock’i failisüsteemi isoleerimine nõuabNoNewPrivs, mis takistab igasugust privileegide tõstmist, seegasudoebaõnnestub teategano new privileges flag is set. Repositooriumi omaniku kasutajal on juba kõik vajalikud õigused kõige jaoks repositooriumi ühenduspunkti ja Dockeri pesa sees. Tõeliselt privilegeeritud toimingute jaoks (hosti pakettide installimine, kerneli häälestamine) käivitage need väljaspool liivakasti või Rediaccfile’iup()funktsioonist, mida täidab infrastruktuuritee.- Dockeri silla võrgundus on keelatud igal repositooriumipõhisel deemonil. Iga repositooriumi
daemon.jsonsisaldab"bridge": "none"ja"iptables": false, seega tavalinedocker run <image>loob konteineri ainult loopback-liidesega ja ilma väljuva ühenduvuseta. See pole viga, see on see, kuidas repositooriumiülene isoleerimine jõustatakse: kerneli taseme eBPF-konksud, mis blokeerivad ühe repositooriumi jõudmise teise repositooriumi loopback-IP-deni, kehtivad ainult konteineritele, mis elavad hosti võrgu nimeruumis. Tootmisteenuste jaoks kasutagerenet compose, mis süstib automaatseltnetwork_mode: host. Ad-hoc ühekordsete konteinerite jaoks shellis edastage--network hostselgesõnaliselt.
Juurutamine
rdc repo upühendab LUKS-mahu automaatselt, kui see on lahti ühendatud, seejärel käivitab kõigi Rediaccfile’ideup()-i.rdc repo downkäivitabdown()ja peatab Dockeri deemoni.rdc repo down --unmountsulgeb ka LUKS-mahu (lukustab krüpteeritud salvestuse).- Forkid (
rdc repo fork) loovad CoW (kopeerimise-kirjutamisel) klooni uue GUID ja networkId-ga, konstantses ajas sõltumata repositooriumi suurusest. BTRFS-reflink dubleerib pildimetaandmed, mitte andmed, seega forkitakse 100 GB repositoorium sama mõne sekundiga kui 1 GB repositoorium. Fork jagab vanema krüpteerimisvõtit. - Ülevõtmine (
rdc repo takeover --name <fork> -m <machine>) asendab grand-repositooriumi andmed forki andmetega. Grand säilitab oma identiteedi (GUID, networkId, domeenid, autostart, varundusakel). Vanad tootmisandmed säilitatakse varukoopia forkina. Kasutage selleks: testige uuendust forkil, kontrollige, seejärel võtke tootmine üle. Pöörduge tagasi käsugardc repo takeover --name <backup-fork> -m <machine>. - Puhverserveri marsruudid muutuvad aktiivseks umbes 3 sekundit pärast juurutamist. Teade “Proxy is not running”
repo upajal on informatiivne ops/dev-keskkondades. rdc repo upjardc repo fork --uptrükivad URL-mustrirediacc.service_port-ga märgistatud teenuste jaoks juurutamise lõpus. Asendage{service}oma paljastatud teenuse nimega, et saada täpne URL. Teenused ilmarediacc.service_port-ita (andmebaasid, töötajad) ei saa marsruute ja neid ei kuvata.
Levinud vead
docker composekasutaminerenet composeasemel - konteinerid ei saa võrgu isoleerimist.- Taaskäivituspoliitikad on ohutud, renet eemaldab need automaatselt ja valvekoer käsitseb taastamist.
privileged: truekasutamine - pole vajalik, renet süstib spetsiifilised CRIU võimalused.- Toorte IP-de hardkodeerimine püsivatesse konfiguratsioonifailidesse - kasutage ühenduste jaoks teenuste nimesid, et hoida forki isoleerimine puutumata.
rdc term connect -ckasutamine lahendusena ebaõnnestunud käskude jaoks - teatage vigadest.repo deleteteeb täieliku puhastuse, sealhulgas loopback-IP-d ja systemd-üksused. Käivitagerdc machine prune --name <name>, et puhastada pärand-kustutamiste järelejäänud.