-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Nais Sites - CRD for SPA #235
Comments
I like this initiative because I do not believe that using github actions as an interface is a good idea, less github actions, less problem.
This is actually any content, like an MPA, that needs a URL, so there's maybe a distinction that can be made in the naming here. |
Godt poeng! Er nok mange dokumentasjonssider som kunne hatt nytte av dette, så de slapp å lage sine egne apper. |
Syns dette er en god idé, og jeg sitter igjen med noen spørsmål:
Helt uenig, kjempebra navn |
Hva med å stjele navnet til Github pages, Nais pages? |
Godt poeng. Er akkurat like rart :) Liker Nais pages. Men sliter litt med distinksjonen/konseptet, for om du laster opp en statisk webside uten spa-deploy i dag, og peker på den URLen du havner på så får du jo opp sida like fint. Så blir ikke da Nais pages akkurat det samme, bare med en litt finere URL? |
Er egentlig bare det som er distinksjonen, med Nais pages kan du få en egendefinert domene. |
jepp, så tenker derfor man kan argumentere for at dette bare er NAIS CDN sånn konseptuelt, men at vi gjør det mulig med en kjekkere URL. |
PS: For å få nåværende oppsett til å fungere med |
Eksperimentert litt videre med Leesah som bruker AstroJS. Dagens oppsett:
Det som strengt tatt skjer for Docusaurus er at du går til en adresse, så finnes ikke den og du skulle fått en 404, men den sender deg til root, som gjør at SPA som ligger på root sender deg til riktig side. Oppsett for AstroJS:
Her sender vi root til root, spesifikke adresser dit de skal, og alt som bare er "kataloger" til riktig katalog med Neste steg er å sjekke om vi kan bruke samme oppsett for SPA, eller om vi trenger en måte å skille disse to. |
Testet Docosaurus med oppsettet for AstroJS og det virker til å funke fint, så ved å bytte kan vi treffe begge type sider. |
Slik jeg forstår det, så er det vi har i dag mulighet for å laste opp statisk innhold til et CDN med et cdn-upload-action. På toppen av det så har vi noe vi kaller spa-deploy, som egentlig er CDN med url, eller Legger denne saken tilbake i draft for denne perioden, men ønsker den tilbake som initiativ til en senere periode etter at vi har snakket sammen og kartlagt litt mer hvor vi vil og hva vi vil ha. |
+1 ☝ Tenker det er bra å rydde litt i begrepsbruken og, for dette er mer "GitHub pages"-aktig funksjonalitet enn noe som har med SPA å gjøre. Det vi tilbyr her trenger ikke være en SPA og kan være kilde til en del forvirring. Så lurt å få det bort. Det vi kaller Noen tanker: $ nais cdn upload --src=./build # standard cdn-upload oppførsel
$ nais cdn upload --src=./build --url=myapp.domain.tld/foo # dagens spa-deploy Dette kunne/burde da kanskje vært styrt via Nais API som så hadde sørget for å implementere de riktige ressursene i riktig cluster + validering ? |
Fordelen med å ha det som en CRD er at CRDen vet hvor den er, så brukeren slipper å spesifisere miljø, og vi kan enklere unngå at ingresser overlapper, da vi har alle ingresser allerede definert i miljøet. |
Jeg tror vi kan gjøre det enda enklere. For selv med CRD må de jo angi hvilket miljø den CRDen skal deployes til, og det som står inni CRDen må matche - og dette er noe de må passe på. Om vi gjør dette via API kan de slippe det, og vi kan verifisere at domenet fins i tenanten et eller annet sted, også sørger vi for å legge det i riktig miljø for de. |
Ulempen med at brukerne våre skal gjøre dette via API er at de ikke lenger kan deploye noe som ligger i git via github actions. Vi optimaliserer for at de skal deploye fra utviklernes egne maskiner. Det er i mine øyne helt bakvendt i forhold til alt annet vi gjør. Fordelen med å ha det som en CRD er at måten man deployer en SPA er akkurat lik måten man deployer en Application eller en Naisjob: Man deployer en ressurs inn i et cluster. Det er verdi i å gjøre ting likt. |
Sammen med en SPA CRD så må vi også se på hvordan vi gjør ruting / rewriting. Det vi gjør med nginx ingress lever egentlig litt på nåde og burde vært erstattet med noe litt mer produksjonsklart. Fordelen m ed å ha dette som en ordentlig CRD er vi kan endre den bakenforliggende implementasjonen uten at alle applikasjonene trenger å redeploye slik de må i dag (det har f.eks. skjedd sist vi gjorde endringer i ingress class). Ingress behandles ikke som et stabilt API fra vår side i dag. |
nb. deploying from developer machines puts us by default at SLSA level 1 (at best!), which is the lowest level after 0 which is "None". https://slsa.dev/spec/v1.0/levels
Det er verdi i å gjøre ting (s)likt. too! XD |
Man setter egentlig dette bare opp en gang per domene/side, så hvis vi ikke ønsker å administere dette via clusteret, så kan vi jo ha det som clickOps i Nais Console, hvor man går til buckets, også er det en knapp for å legge til et domene. Personlig syns jeg det er rart å flytte dette inn i Nais API, tror ikke vi tjener så mye på å utvide ansvaret. Nais API er blitt ganske svær! |
Ser jeg trenger tydeliggjøre litt hva jeg mente med kommentaren min, da tre kommentarer baserer seg på feil antagelser. Først og fremst. Forslaget med pseudo-kode med Nais CLI betyr ikke at dette kun kan kjøres fra utviklermaskiner. CLIet er vel så mye ment å kunne brukes fra Github actions (eller andre CI verktøy). - uses: nais/setup@v1
- run: nais cdn upload ... Når jeg snakker om Nais API i dette tilfellet, mener jeg ikke nødvendigvis at det ikke skal lages en CRD i tilleggg i clusteret. Det er mer en implementasjonsdetalj. Det kan være CRD, eller det kan være API eller en helt annen komponent som holder styr på det. Poenget med å la dette gå via APIet er at da slipper utviklerene å ha et aktivt forhold til hvilke domener bor i hvilke clustere. @Reasonable-Solutions forslaget var ikke begrenset til utviklermaskiner. Det sagt, vi ønsker fremdeles at utviklere skal kunne bygge og deploye fra egen maskiner |
Beskrivelse / Essensen
I dag tilbyr vi deploy av SPA via en Github Action, for de få som bruker denne løsningen så funker det bra. Problemet er at den har en hardkodet tabell av ingresser for tenants, som må manuelt vedlikeholdes.
Det action gjør er å først opprette to k8s-ressurser på runneren (ingress og service), så laster den opp assets med cdn-upload, før den bruker nais/deploy for å deploye de to ressursene den opprettet.
For å opprette ingress-ressursen trenger den å vite hvilke adresser en tenant støtter, og hva ingressClassen her. Den har heller ikke støtte for root-domener da vi ikke ønsker at noen ved et uhell skal ta over nav.no. Dette skaper problemer for nais.io og leesah.io, dette har blitt løst ved at man manuelt kan sette
ingress
, ogingressClass
.Hvis vi flytter SPA-biten ut til en egen enkel CRD, så kan vi la hver enkel operator avgjøre hvilke domener som er godkjent, og hvilke ingressClass de skal ha. Det blir også enklere å vedlikeholde en liste med ekstra domener.
Ved å ha en operator i clusteret vil vi automatisk ha validering på om et domene+path er tatt i bruk, som vil være en sikring av tjenesten vår.
Etterpå kan vi da fjerne den gamle actionen, og la brukerne laste opp assets med cdn-upload som vanlig, og nais/deploy med den nye crd-filen.
Investeringsvilje
2 uker
Mulig løsning i grove trekk
Ikke-mål
Eventuell annen relevant informasjon
For at SPA-ingresser skal fungere for flest mulig tjenester så bør vi bytte Nginx-config til
Shapers
The text was updated successfully, but these errors were encountered: