De portier

Applicatiebeheer — deel 13

Vrijdag. Eén voordeur in plaats van een rij ingangen, die op naam en pad het verkeer naar de juiste plek stuurt. En de eerste keer dat Kubernetes Joost gewoon terugbijt.

Concepts

De wegwijzer staat, binnen en buiten zijn gescheiden. Vandaag de voordeur zelf, de plek waar het verkeer van buiten naar binnen komt.

Het ging mis voordat het goed ging, en dat was maar goed ook, want anders had Joost het verkeerde beeld overgehouden.

Het was vrijdag. De rommelige vraag van gisteren had de hele nacht in zijn hoofd gezeten, en hij was er fris op gaan zitten. Spelveld had straks meerdere dingen die de spelers van buiten moesten kunnen bereiken. De voorkant. Het scorebord. Misschien later nog een onderdeel. En als hij voor elk daarvan een eigen deur in de buitenmuur zou zetten, met een eigen adres, dan kregen de spelers een rijtje adressen om te onthouden, en dat was lelijk en het werkte niet.

Hij wist dat hij dit eerder had opgelost. Niet hier. Op zijn eigen servers, jaren geleden.

"Ravi," zei hij toen die langskwam. "Ik heb dit al eens gebouwd. In mijn oude wereld. Ik wil het je vertellen voor je het me uitlegt, want ik denk dat ik weet waar dit heen gaat."

Ravi ging op de rand van het bureau zitten en gebaarde: ga je gang.

"Ik had vroeger achter mijn website een hele rij diensten draaien. De ene deed de bestellingen, de andere de plaatjes, de derde het inloggen. Allemaal aparte dingen, op aparte poorten. En ik wilde niet dat een bezoeker drie verschillende adressen moest onthouden. Eén website-adres, dat was het, en daarachter moest het verkeer naar de juiste dienst." Hij leunde naar voren. "Dus zette ik er eentje voorop. Een portier. Alles kwam bij hem binnen, op één adres, en hij keek waar het heen moest. Vroeg iemand om de bestellingen, dan stuurde hij hem door naar de bestel-dienst. Vroeg iemand om een plaatje, naar de plaatjes-dienst. De bezoeker merkte er niks van. Eén voordeur, en daarachter verdeelde de portier het naar de juiste kamer."

"Dat ding had een naam in jouw wereld," zei Ravi.

"Een reverse proxy noemden wij dat. Of gewoon: de nginx ervoor." Joost haalde zijn schouders op. "Ik heb er honderden regels voor geschreven. Dit pad gaat hierheen, dat pad daarheen, dit adres naar die dienst. En ik vermoed sterk dat jullie hier ook zoiets hebben, want dat probleem dat ik gisteren had, met die rij deuren, dat schreeuwt om een portier."

Ravi knikte langzaam. "Je hebt gelijk. En je hebt het bijna helemaal zelf beschreven. Wij hebben een portier aan de voordeur. Eén adres voor de buitenwereld, en daarachter kijkt hij op naam en op pad waar het verkeer heen moet. Vraagt iemand om het scorebord, dan stuurt hij hem naar de score-dienst. Vraagt iemand om de voorkant, naar de voorkant-dienst. De spelers kennen één adres, en achter dat adres zit de portier die het uitsorteert."

"En hoe heet die portier."

"Dat ding, één voordeur die op naam en pad het verkeer naar de juiste Service stuurt, heet een Ingress." Ravi liet het woord even staan. "Onthoud het. Maar het is precies wat jij net beschreef. Jouw portier, jouw reverse proxy, maar dan als onderdeel van het systeem, met regels die je niet meer met de hand in een lang bestand zet maar netjes opschrijft."

"Eén ding," voegde hij eraan toe. "Die portier staat niet vanzelf klaar. Iemand moet hem eerst in het cluster neerzetten en aanzetten. Dat is jouw nginx, jouw reverse proxy, alleen draait hij hier als een vast onderdeel vooraan. En pas als hij er staat, doen jouw regels iets. Schrijf je een regel zonder dat de portier er is, dan gebeurt er niks. Bij ons is hij er al, dus dat hoef jij vandaag niet meer te doen. Maar weet dat het zo werkt."

Joost voelde de vertrouwde tevredenheid opkomen. Alweer iets wat hij al kende. Hij wilde het meteen gaan bouwen.

En hier ging het mis.

Want hij zette een regel neer voor het scorebord. Verkeer dat om de scores vroeg, moest naar de score-dienst. Hij wist precies wat hij wilde, het was zijn eigen idee van twintig jaar terug. Hij zette het klaar. En toen hij het uitprobeerde, kreeg hij een foutmelding van de portier. Niet de scores. Een kale, onvriendelijke melding dat de pagina niet gevonden was.

"Hij vindt het niet," zei Joost. Hij fronste. "Maar ik heb de regel toch goed gezet. Scorebord-pad naar de score-dienst. Dat staat er."

Ravi keek mee, maar hij hielp niet meteen. Hij liet hem even zoeken.

Joost keek naar zijn regel. Hij keek naar de naam van de dienst. Hij keek terug. En toen zag hij het. Het pad dat hij had opgeschreven, en het pad dat de portier had gekregen, scheelden net iets. Een schuine streep te veel. Eén karakter. De portier zocht naar het ene, de regel zei het andere, en omdat ze niet exact op elkaar pasten, stuurde de portier het verkeer nergens heen en gaf hij die kale foutmelding.

"Eén streep," zei Joost. Hij wreef over zijn gezicht. "Eén streep te veel, en hij doet niks."

"Eén streep," zei Ravi. "Welkom bij het stuk waar het kriebelig wordt."

Joost keek hem aan.

"Ik ga je niet voorliegen," zei Ravi, en hij zei het zonder enige opsmuk. "Tot nu toe heb ik je telkens kunnen vertellen: dit ken je al, dit is je oude werk in een net jasje. En dat is waar geweest. Maar de portier is de plek waar het systeem terugbijt. Hier zitten de regeltjes die net niet matchen. Een pad met een streep te veel. Een naam met een tikfout. En straks, als de spelers er echt op komen, de certificaten, het slot op de deur, dat het verkeer versleuteld binnenkomt. Dat is een wereld op zich, en die is fiddly. Je gaat hier avonden verliezen aan een streep of een puntje dat verkeerd staat. Ik vertel je dat liever nu dan dat je denkt dat je het verkeerd doet."

Het gekke was dat het Joost niet ontmoedigde. Het deed bijna het tegenovergestelde.

"Weet je," zei hij, en er kwam een scheve grijns op zijn gezicht, "dit ken ik ook. Dit is precies hoe het op mijn nginx ook ging. Ik schreef een regel, en hij deed het niet, en ik zat een uur te turen tot ik zag dat er ergens een slash te veel stond, of een spatie, of een hoofdletter waar een kleine letter hoorde. Dat is niet nieuw voor mij. Dat is bijna geruststellend nieuw. Want eindelijk is er iets in deze wereld dat net zo pietluttig is als wat ik gewend was."

Ravi lachte, kort. "Daar had ik niet aan gedacht. Maar je hebt gelijk. Voor jou is dit geen nieuwe ellende. Het is oude, vertrouwde ellende."

"De ellende die ik ken," zei Joost, "is altijd beter dan de ellende die ik niet ken."

Hij haalde de extra streep weg. Hij probeerde het opnieuw. En deze keer kwam het scorebord op, netjes, achter hetzelfde adres als de voorkant, alleen op een ander pad. De portier had het uitgesorteerd, precies zoals hij het had bedoeld, zodra de regel exact klopte.

Hij leunde achterover en keek ernaar. Eén voordeur. Daarachter de regels die het verkeer verdeelden. Het was zijn oude reverse proxy, regel voor regel, alleen netter opgeschreven en met dezelfde gemene valkuil eronder: dat een tikfout geen alarm geeft, maar gewoon stil het verkeer nergens heen stuurt.

"Dit ga ik onthouden," zei hij. "Niet hoe het werkt. Dat snap ik. Ik ga onthouden dat als de portier iets niet vindt, ik eerst naar de regel kijk, letter voor letter, voordat ik denk dat er iets groters stuk is. Want negen van de tien keer is het een streep."

"Negen van de tien keer is het een streep," beaamde Ravi. "Of een naam die net niet matcht. En dat, toevallig, ken je ook al."

Joost knikte. De kaartjes die net niet pasten, een paar dagen terug. Het was dezelfde gemene fout in een ander jasje. Iets dat gezond lijkt, niks dat in brand staat, en toch komt het verkeer niet aan, omdat ergens een naam of een pad een haar verkeerd staat.

Het was vrijdagmiddag toen het stond. Hassan kwam langs, zag het scorebord en de voorkant achter één adres draaien, en knikte goedkeurend. "Dus de spelers krijgen één adres en de rest regelt zichzelf?"

"Eén adres," zei Joost. "Met een portier erachter. En een streep die ik bijna niet vond."

Hassan snapte het halve verhaal niet, maar hij hoorde het zelfvertrouwen, en dat was wat hij kwam halen.

Toen Joost die avond naar huis reed, was het weekend, en hij merkte dat hij naar het werk van maandag uitkeek in plaats van ertegenop, iets wat hem in geen weken was overkomen. Er zat hem nog iets dwars, klein, een steentje voor later. Al die kamers binnen het gebouw, de database, de scores, de voorkant, die konden elkaar allemaal bereiken, vrijuit, zonder dat iemand het had geregeld. Hij had het gisteren al even gevoeld en weggeschoven. De portier bewaakte de voordeur keurig. Maar binnen, achter de voordeur, leek het hem dat iedereen zomaar bij iedereen kon. En dat zou hij, met zijn firewall-verleden, op maandag eens aan Ravi voorleggen.