RAILSHOT.
Natrag u dvoranu

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.

2026.09.28 – 2026.10.04 · završeno

Timski projekt · moj dio: planiranje i implementacija CI-ja, CSP klasteri i Ansible sučelje, rad sustava, timska recenzija koda i integracija

SoftBank Hackathon 2026 powered by KOREC & ProgateSudionik pretkola · odabir za finale bit će objavljen 2026.10.26 (stanje na 2026.10.07)

  • WebImplementirano · hakaton
  • MCP poslužiteljImplementirano · udaljeni · lokalni

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.

Karta klastera · nacrtano prema deklaracijama i kodu na javnom commitu 645e28a
Karta operativnog i klijentskog klastera RailshotOperativni klaster K3s i registrirani klaster klijentskih aplikacija. U operativnom klasteru imenski prostor railshot-system smješta nadzornu ploču, API proizvoda, udaljeni MCP (samo ako je dana njegova slika) i build controller na čvorove s ulogom platform; runner Jobovi u imenskom prostoru railshot-build preuzimaju poslove GitHub Actions na čvoru s ulogom build koji ima taint. Release job na GitHub-hostedu objavljuje provjereni bundle u GHCR. API proizvoda commita workload u config Git i sinkronizira Application u imenskom prostoru argocd, a Argo CD primjenjuje Deployment, NodePort Service i NetworkPolicy na imenski prostor registriran u klijentskom klasteru. Zahtjevi aplikaciji ulaze kroz L7 ulaznu točku pružatelja na NodePort i Service čvora, a zatim u Pod aplikacije. Presuda o postavljanju temelji se samo na stanju Arga i provjeri javnog URL-a; dijagnostika Poda, zapisnici i metrike čitaju se kao zasebni signali. Operaterovi ulazi za instalaciju i registraciju drže se odvojeno od payloada aplikacije zakupca.Korisnik Railshotanadzorna ploča · MCPOperaterov bootstrapinstalacija · registracija · SecretGHCRslike prema digestuRepozitorij config Gitworkload.json · revisionL7 ulazna točka pružateljaALB · GCP LB · AmphoraKorisnik aplikacijejavni HTTPSVM za promatranjeizvan klijentskog K3s-a · Composerailshot-systemdashboard · nginxudaljeni MCP · samo sa slikombuild controller · CronJobAPI proizvoda · cd.js → bridge.pyargocdArgo CD · ApplicationAppProject · cluster SecretCronJob za obnovu · svaka 2 hrailshot-buildrunner Job · hostNetwork · Docker socketrailshot-deploy.ymlloop job · self-hosted runnerrelease job · GitHub-hosted<app namespace>Deployment · Pod · slika prema digestuNodePort Service · LocalNetworkPolicy · samo registrirani CIDR-ovirailshot-argocd SA · tokenkube-systemCilium · Helm · VXLANrailshot-observabilitynode-exporterkube-state-metricsOperativni klaster · K3sAWS · čvorovi po ulogamačvorovi s ulogom platformnodeSelectorčvor s ulogom buildNoSchedule taintGitHubActions · GHCRKlaster klijentskih aplikacija · primjerjedan po registriranom ciljuJedan K3s čvor · serverCilium · kube-proxy zadržan1workflow_dispatch2nadopuna runner Joba3preuzeti job4provjereni bundle5 objava prema digestu · release job · GitHub-hosted → GHCR51workload commit · push2revision3 Application sync · API proizvoda · cd.js → bridge.py → Argo CD · Application34primjena na imenski prostor5pull prema digestu1HTTPS 4432NodePort3 do Poda · NodePort Service · Local → Deployment · Pod · slika prema digestu34 provođenje politike · Cilium · Helm · VXLAN → NetworkPolicy · samo registrirani CIDR-ovi45 nadzorna ploča · API · Korisnik Railshota → dashboard · nginx51 revizija · health · slike · API proizvoda · cd.js → bridge.py → Argo CD · Application12javna provjera HTTPS-a3dijagnostika Poda · nije presuda4kraj zapisnika · 100 redaka po Podu5prikupljanje · NodePortovi6Blackbox probe1renderiranje platforme · Secret2bootstrap registracije3instalacija K3s · Cilium4TokenRequest · 6 h

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.

  1. API proizvoda · cd.js → bridge.pyrailshot-systempokretanje · primjena: workflow_dispatchloop job · self-hosted runnerrailshot-deploy.yml

    API proizvoda traži izvođenje GitHub Actions s tenant, app, commitom izvora i ciljem. API nikad izravno ne poziva runner Job.

  2. build controller · CronJobrailshot-systempokretanje · primjena: nadopuna runner Jobarunner Job · hostNetwork · Docker socketrailshot-build

    CronJob 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.

  3. runner Job · hostNetwork · Docker socketrailshot-buildpokretanje · primjena: preuzeti jobloop job · self-hosted runnerrailshot-deploy.yml

    Runner 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.

  4. runner Job · hostNetwork · Docker socketrailshot-buildpodaci: provjereni bundlerelease job · GitHub-hostedrailshot-deploy.yml

    Loop job ostavlja bundle koji je prošao iste provjere, a release job preuzima samo taj bundle.

  5. release job · GitHub-hostedrailshot-deploy.ymlpodaci: objava prema digestuGHCR

    Release 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.

  1. API proizvoda · cd.js → bridge.pyrailshot-systempodaci: workload commit · pushRepozitorij config Git

    cd.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.

  2. Repozitorij config Gitpodaci: revisionArgo CD · Applicationargocd

    Application čita samo svoj ograničeni konfiguracijski repozitorij, putanju i reviziju.

  3. API proizvoda · cd.js → bridge.pyrailshot-systempokretanje · primjena: Application syncArgo CD · Applicationargocd

    Imenovani 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.

  4. Argo CD · Applicationargocdpokretanje · 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.

  5. Deployment · Pod · slika prema digestu<app namespace>podaci: pull prema digestuGHCR

    Objavljena 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.

  1. 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.

  2. 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.

  3. 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.

  4. Cilium · Helm · VXLANkube-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.

  5. Korisnik Railshotapodaci: nadzorna ploča · APIdashboard · nginxrailshot-system

    Korisnici 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.

  1. API proizvoda · cd.js → bridge.pyrailshot-systemopažanje: revizija · health · slikeArgo CD · Applicationargocd

    Za 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.

  2. API proizvoda · cd.js → bridge.pyrailshot-systemopažanje: javna provjera HTTPS-aL7 ulazna točka pružatelja

    Registrirani javni URL provjerava se bez preusmjeravanja. Succeeded se bilježi samo uz presudu Arga i ovu provjeru.

  3. API proizvoda · cd.js → bridge.pyrailshot-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.

  4. API proizvoda · cd.js → bridge.pyrailshot-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.

  5. 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.

  6. 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.

  1. 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.

  2. Operaterov bootstrappokretanje · primjena: bootstrap registracijeAppProject · cluster Secretargocd

    Operater 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.

  3. Operaterov bootstrappokretanje · primjena: instalacija K3s · CiliumCilium · Helm · VXLANkube-system

    install-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).

  4. CronJob za obnovu · svaka 2 hargocdpokretanje · 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.