Railshot
AI deployment & operations platform
Lokalno izrađenu web-aplikaciju postaviti u pripremljena oblačna i lokalna okruženja, a zatim je održavati u radu.
AI platforma za postavljanje i rad koja lokalno izrađenu web-aplikaciju odvodi u pripremljena oblačna ili lokalna okruženja i održava je u radu.
Operativni klaster i klasteri klijentskih aplikacija odvojeni su, a javni put drži se odvojeno od upravljanja postavljanjem.
U operativnom K3s-u nadzorna ploča, API proizvoda i build controller smješteni su na čvorove s ulogom platform, a runner Jobovi na čvor s ulogom build, dok postavljanje obavlja Argo CD. Klijentske aplikacije rade u određenom imenskom prostoru zasebnog jednočvornog klastera K3s + Cilium za svaki registrirani cilj.
Build → objava slike
API proizvoda traži izvođenje GitHub Actions, a runner na čvoru build preuzima i provjerava job. Samo bundle koji je prošao iste provjere objavljuje u GHCR release job na GitHub-hostedu.
API proizvoda · cd.js → bridge.py
railshot-systempokretanje · primjena: workflow_dispatchloop job · self-hosted runnerrailshot-deploy.ymlAPI proizvoda traži izvođenje GitHub Actions s tenant, app, commitom izvora i ciljem. API nikad izravno ne poziva runner Job.
build controller · CronJob
railshot-systempokretanje · primjena: nadopuna runner Jobarunner Job · hostNetwork · Docker socketrailshot-buildCronJob build controllera (svake minute, na čvoru platform) stvara runner Jobove u imenskom prostoru railshot-build. Njegova Role dopušta samo get, list i create za Job te get, update i patch za jedan Secret registracije runnera; ne može stvarati imenske prostore ni druge Secrete.
runner Job · hostNetwork · Docker socket
railshot-buildpokretanje · primjena: preuzeti jobloop job · self-hosted runnerrailshot-deploy.ymlRunner na čvoru s ulogom build (točan hostname, toleration NoSchedule) preuzima loop job prema oznakama self-hosted i izvodi ga. Klijentski izvor izvodi se u postojećim ograničenim Docker kontejnerima za build i provjeru.
runner Job · hostNetwork · Docker socket
railshot-buildpodaci: provjereni bundlerelease job · GitHub-hostedrailshot-deploy.ymlLoop job ostavlja bundle koji je prošao iste provjere, a release job preuzima samo taj bundle.
release job · GitHub-hosted
railshot-deploy.ymlpodaci: objava prema digestuGHCRRelease job na GitHub-hostedu (ubuntu-24.04) objavljuje sliku provjerenog bundlea u GHCR bez ponovnog builda. Objava slika nikad se ne događa unutar klastera klijentskih aplikacija.
Config Git → Argo → klijentski imenski prostor
Config Git nosi željene resurse, a GHCR bajtove slike. Argo CD primjenjuje samo na registrirani klijentski imenski prostor.
API proizvoda · cd.js → bridge.py
railshot-systempodaci: workload commit · pushRepozitorij config Gitcd.js pokreće bridge.py, koji commita i pusha workload.json samo kad se zapis objave i registrirani cilj slažu, a zatim ponovno čita udaljenu reviziju. Git nosi željene resurse; GHCR nosi bajtove slike.
Repozitorij config Gitpodaci: revisionArgo CD · Application
argocdApplication čita samo svoj ograničeni konfiguracijski repozitorij, putanju i reviziju.
API proizvoda · cd.js → bridge.py
railshot-systempokretanje · primjena: Application syncArgo CD · ApplicationargocdImenovani Application postavlja se server-side applyjem, a traži se sinkronizacija jedne točne revizije bez prunea. ServiceAccount railshot-product u API-ju proizvoda ima i bootstrap registracije koji je instalirao operater (create za Secrete, AppProjecte i Applicatione u argocd; get, update i escalate za imenovane Role) i dopuštenja get i patch dodana prema točnom nazivu za svaki provjereni cilj. Create u Kubernetesu ne može se ograničiti nazivom, pa nazive unutar opsega drži i validacija ulaza proizvoda.
Argo CD · Application
argocdpokretanje · primjena: primjena na imenski prostor<app namespace>Argo CD primjenjuje na određeni imenski prostor u klijentskom klasteru s vjerodajnicom registriranog cluster Secreta. AppProject dopušta samo kindove unutar imenskog prostora i nijedan resurs na razini klastera.
Deployment · Pod · slika prema digestu
<app namespace>podaci: pull prema digestuGHCRObjavljena slika prema digestu povlači se s pull Secretom koji se referencira nazivom u istom imenskom prostoru. Vrijednosti Secreta nikad ne ulaze u artefakt ni config Git.
Javni put zahtjeva
Zahtjevi aplikaciji idu L7 ulazna točka pružatelja → NodePort čvora → Service → Pod aplikacije. Provođenje politike Cilium zasebna je kontrola, a ne korak koji nosi zahtjev. Ulaz u operativnu nadzornu ploču zaseban je put.
Korisnik aplikacijepodaci: HTTPS 443L7 ulazna točka pružatelja
Korisnici aplikacije dolaze do L7 ulazne točke pružatelja preko registriranog hostnamea. Svaki pružatelj implementira vlastitu ulaznu točku.
L7 ulazna točka pružateljapodaci: NodePortNodePort Service · Local
<app namespace>Ulazna točka prosljeđuje na privatnu adresu i NodePort čvora. NodePort je onaj dodijeljen pri registraciji cilja.
NodePort Service · Local
<app namespace>podaci: do PodaDeployment · Pod · slika prema digestu<app namespace>Service šalje zahtjev Podu aplikacije (Deployment) na istom čvoru. Uz externalTrafficPolicy Local izvorna adresa stiže nepromijenjena do provjere registriranih CIDR-ova u NetworkPolicy.
Cilium · Helm · VXLAN
kube-systempokretanje · primjena: provođenje politikeNetworkPolicy · samo registrirani CIDR-ovi<app namespace>Cilium provodi NetworkPolicy: ulazni promet samo iz registriranih CIDR-ova prema portu aplikacije; prema zadanim postavkama bez izlaznog prometa, osim odobrene adrese baze podataka. Oblačni vatrozidi i pravila hosta i dalje su važni.
Korisnik Railshotapodaci: nadzorna ploča · APIdashboard · nginx
railshot-systemKorisnici dolaze kroz operativnu ulaznu točku do nginx nadzorne ploče, a nginx stoji ispred API-ja proizvoda. Service nadzorne ploče je NodePort samo kad je zadan odobreni port čvora; API ostaje ClusterIP.
Provjera · promatranje
Presuda o postavljanju temelji se samo na stanju Arga i provjeri javnog URL-a. Dijagnostika Poda, trenutačni zapisnici i operativne metrike zasebni su signali koji je nikad ne mijenjaju.
API proizvoda · cd.js → bridge.py
railshot-systemopažanje: revizija · health · slikeArgo CD · ApplicationargocdZa deployed potrebni su revizija sinkronizacije Applicationa, Synced i Healthy, operation Succeeded te reference slika zabilježene u statusu Argo Applicationa jednake slikama prema digestu u pregledanom Deploymentu. To nije izravni prag prema imageID-u Poda, a sam zeleni status Arga ne utvrđuje podudaranje.
API proizvoda · cd.js → bridge.py
railshot-systemopažanje: javna provjera HTTPS-aL7 ulazna točka pružateljaRegistrirani javni URL provjerava se bez preusmjeravanja. Succeeded se bilježi samo uz presudu Arga i ovu provjeru.
API proizvoda · cd.js → bridge.py
railshot-systemopažanje: dijagnostika Poda · nije presudaDeployment · Pod · slika prema digestu<app namespace>Nakon presude Arga i javne provjere Deployment, ReplicaSetovi i Podovi zasebno se čitaju s registriranom vjerodajnicom, a imageID i spremnost dodaju se kao dijagnostika ready, progressing ili unavailable. Neuspjela ili drukčija dijagnostika nikad ne mijenja presudu deployed ili succeeded.
API proizvoda · cd.js → bridge.py
railshot-systemopažanje: kraj zapisnika · 100 redaka po PoduDeployment · Pod · slika prema digestu<app namespace>Samo za trenutačno postavljenu operaciju, s pouzdanom konfiguracijom i registriranom vjerodajnicom. Za svaki trenutačni Pod (najviše tri) digest pokrenute slike mora biti jednak očekivanom; zatim se unutar ograničenja bajtova čita do 100 očišćenih redaka po Podu. Stariji pokušaj odgovara superseded; bez konfiguracije not_configured. To nije agregacija zapisnika.
VM za promatranjeopažanje: prikupljanje · NodePortovirailshot-observability
Prometheus na VM-u za promatranje prikuplja node-exporter i kube-state-metrics kroz dva NodePorta ograničena vatrozidom. Nedostajuće ili zastarjele vrijednosti su nepoznate, a ne nula.
VM za promatranjeopažanje: Blackbox probeL7 ulazna točka pružatelja
probe_success=1 znači 2xx na tom mjestu sonde. Ne dokazuje ni pristup svakog korisnika ni postavljenu verziju i nikad ne podiže published na deployed.
Operaterova instalacija · registracija
Instalacija klastera, bootstrap registracije i ulazi cilja, Secreti i postav obnove vjerodajnica ulazi su operatera, nikad dio payloada aplikacije zakupca.
Operaterov bootstrappokretanje · primjena: renderiranje platforme · Secretrailshot-system
Operater renderira deklaraciju platforme s render-platform.py i dostavlja privatnu operativnu konfiguraciju i Secrete. Udaljeni MCP uključuje se samo kad je dana njegova slika, a osobni gateway (WireGuard) samo uz --personal.
Operaterov bootstrappokretanje · primjena: bootstrap registracijeAppProject · cluster Secret
argocdOperater u argocd instalira Role bootstrapa registracije i praznu Role registracija te priprema ulaze cilja. Pomoćnici za registraciju koje pokreće API proizvoda (environment.py, applications.py) zatim zapisuju Secret railshot-<target> s vjerodajnicom ograničenog opsega (clusterResources false, popisani dopušteni imenski prostori) i dodaju provjerene točne nazive u Role registracija. Registracija po aplikaciji veže imenski prostor app-<id> uz AppProject istog naziva.
Operaterov bootstrappokretanje · primjena: instalacija K3s · CiliumCilium · Helm · VXLAN
kube-systeminstall-k3s.sh instalira jednočvorni K3s server (flannel, network policy, traefik i servicelb isključeni; kube-proxy zadržan), a Cilium se instalira kao Helm izdanje (kubeProxyReplacement false, VXLAN, Hubble isključen).
CronJob za obnovu · svaka 2 h
argocdpokretanje · primjena: TokenRequest · 6 hrailshot-argocd SA · token<app namespace>CronJob railshot-credentials svaka dva sata traži novi šestosatni token za klijentski SA. Role na strani klijenta dopušta samo create tokena za vlastiti SA. Šest sati je TTL jednog tokena, a ne trenutak kad prestaje operaterov pristup.
Sve veze iste debljine. Odaberite tijek kako biste istaknuli samo njegov put s numeriranim koracima.
- Puna crta · smjer kojim teku zahtjevi, bundlei, slike i deklaracije
- Isprekidana crta · zahtjevi za pokretanje, primjena, instalacija, vjerodajnice
- Duga crta-točka · čitanje stanja, zapisnika, sondi, metrika; odvojeno od presude
- Debela crna crta · odabrani tijek; brojevi daju redoslijed
- Okvir · imenski prostor, njegov naziv u zaglavlju (nije čvor)
- Unutarnja pločica · komponenta u tom imenskom prostoru
- Isprekidani okvir · izvan klastera
- railshot-system · proizvod
- argocd · ovlast za postavljanje
- railshot-build · ovlast nad Dockerom hosta
- GitHub · klijentski klaster
Odluka o smještaju od October 2 u docs/architecture (dva čvora po ulogama) i dijagram u javnom README-u povijest su; ova karta slijedi deklaracije i kod na 645e28a. Strelice prikazuju uzrok i smjer, a ne dokaz da je svaki put pružatelja sada aktivan.
- Imenski prostori i čvorovi
- Imenski prostor je opseg naziva: nije hardver ni, sam po sebi, sigurnosna granica. Uloge platform i build smještaj su pri raspoređivanju preko nodeSelectora i tainta; ova karta ne određuje broj čvorova operativnog klastera. Smještaj Argo CD-a na čvorovima također je zasebna provjera.
- Ovlast čvora build
- Runner Jobovi rade s hostNetwork, Docker socketom hosta, NET_ADMIN i rootom. Imenski prostor, taint ili RBAC ne uklanjaju ovlast nad Dockerom hosta, pa to nije ni izolacija od administratora VM-a ni sandbox za proizvoljan kod.
- Klijentski imenski prostor
- Svaki registrirani cilj koristi nezadani imenski prostor i AppProject (na primjer tenant-demo ili app-<id> po aplikaciji). Stvaraju se samo Deployment jedne usluge (automatsko montiranje tokena ServiceAccounta isključeno), NodePort Service i NetworkPolicy te neobavezni PVC ili Job za migraciju; Secreti se samo referenciraju nazivom (pull Secret i odobreni DATABASE_URL), nikad se ne stvaraju.
- Ulaz AWS
- Route 53 Alias → zajednički ALB HTTPS 443 → privatna adresa i NodePort klijentskog čvora. Mnoge aplikacije ponovno koriste jedan čvor, svaka sa svojim imenskim prostorom, Applicationom i NodePortom.
- Ulaz GCP
- Globalni EXTERNAL_MANAGED HTTPS LB → zonski GCE_VM_IP_PORT NEG → privatni NodePort postojećeg VM-a. Certifikate izdaje Certificate Manager uz DNS autorizaciju. Modul nije vlasnik ni VM-a ni VPC-a, a jedan VM ostaje jedinstvena točka kvara.
- Ulaz OpenStack
- TLS slušatelj Amphora 443 s L7 politikama Host i putanje → HTTP NodePort. Zadana adresa je privatni VIP; Octavia, K3s, baza podataka i DNS izvan su modula. Javna dostupnost i spremnost Amphore na lokaciji zahtijevaju zasebno preuzimanje, a s ovim modulom još nije provjerena nijedna primjena na lokaciji.
- Među pružateljima
- Tri ulazne točke zasebne su implementacije, bez automatskog failovera ili replikacije među pružateljima. Klaster klijentskih aplikacija primjer je registriranog cilja, a ne tvrdnja da isto postavljanje radi u svim oblacima istodobno.
- Operaterove opcije
- Osobni gateway (WireGuard) pridružuje se platformi samo kad operater uključi --personal; nije obavezan put za klijentske oblake. U podržanom izravnom načinu VM za promatranje može dijeliti operativni upravljački VM.