‫Oké, dus nu we de geheimen en de functies hebben doorgenomen, en hoe het werkt en zo, laten we
‫eens kijken naar enkele praktische zaken.
‫Dus wat ik hier heb is, ik heb onze 3-node zwerm opgezet zoals voorheen.
‫Ik ben in een map
‫met geheime voorbeelden 1 die je in de repo zult zien.
‫En alles wat ik daar heb, is één tekstbestand. En in dat tekstbestand staat gewoon een simpele gebruikersnaam, niet eens echt
‫een wachtwoord.
‫Er zijn twee manieren waarop we een geheim in Swarm kunnen creëren.
‫En een daarvan is om het een bestand te geven, en een andere is om een waarde door te geven op de opdrachtregel.
‫Laten we dus eerst het bestand gebruiken. docker geheim maken. En dan moet ik het een naam geven in de geheime database.
‫En ik noem het psql-gebruiker.
‫Het hoeft natuurlijk niet dezelfde naam te hebben als het bestand. Maar ik ga het gewoon zo noemen.
‫En toen... Het spuugt de ID terug, zoals bij andere objecten. En laten we er nog een maken. Laten we het wachtwoord
‫daadwerkelijk invoeren.
‫En deze keer gaan we het daadwerkelijk herhalen vanaf de opdrachtregel.
‫Als je ziet wat ik aan het doen ben, typ ik eigenlijk een wachtwoord in de opdrachtregel met echo,
‫en echo het in in het creatie-commando.
‫En let op het streepje aan het einde, want dat vertelt het commando om te lezen van de standaardinvoer. Dat is wat we het geven
‫met het echo-commando.
‫Nu moet ik zeggen dat beide nadelen hebben.
‫De eerste, je slaat het wachtwoord eigenlijk op de harde schijf van de server op de host op.
‫En dat zouden we echt niet willen.
‫Dus misschien zou u de externe API van die lokale opdrachtregel op uw computer gebruiken. En geef dan de bestanden op
‫die manier door.
‫En in de tweede gaat het eigenlijk in de geschiedenis van ons Bash-bestand voor onze rootgebruiker.
‫Dus technisch gezien, als iemand in staat zou zijn om in root te komen, zouden ze dit wachtwoord er echt uit kunnen krijgen.
‫Als u met uw eigen productiesystemen te maken heeft, moet u op verschillende manieren kijken
‫om deze twee potentiële beveiligingsproblemen te omzeilen.
‫Dus wat we hier hebben is... nu, als ik een docker secrets ls doe, kun je zien dat ik ze daar allebei heb.
‫Nu kan ik ze inspecteren, maar ik zal nooit de wachtwoorden of het echte geheim zien.
‫Dus, laat me gewoon de gebruiker doen.
‫Het gaat ons de informatie niet geven, toch. Want als het zo gemakkelijk was om aan de informatie te
‫komen, zou het niet zo geheim zijn.
‫Rechts?
‫Dus het doel hier is dat als je het geheim eenmaal in het systeem hebt gestopt, het in de database wordt opgeslagen. En het enige dat toegang krijgt
‫tot de ontsleutelde geheimen zijn de containers en services waaraan we
‫het toewijzen.
‫Dus laten we dat nu doen.
‫Ik ga handmatig een service maken.
‫docker-service maken. Ik noem het psql. En we gaan het geheim eraan toewijzen. Kortom, we vertellen dit
‫maakcommando, neem dit geheim genaamd deze specifieke naam...
‫Ik kan ook de ID van het geheim gebruiken... en wijs het toe aan deze service, zodat alle containers in deze
‫service dit geheim zullen zien.
‫Oke.
‫En plaats dan de gebruiker daar, en dan moet ik het opnieuw doen voor het wachtwoord.
‫Oke.
‫Dus dit brengt de geheimen in kaart voor de service, zodat ze als bestanden in de container verschijnen.
‫Maar het vertelt de postgres-database die we van deze afbeelding maken niet
‫hoe die geheimen moeten worden gebruikt.
‫Dus meestal moeten we iets doen met de configuratie van de afbeelding.
‫En in dit geval zijn de officiële afbeeldingen van Docker Hub afgerekend
‫op een standaard waarbij je omgevingsvariabelen gebruikt. Maar in plaats van misschien iets als een postgres-wachtwoord door te geven, zou dat moeilijk te gebruiken zijn
‫met een bestand.
‫We zouden het bestand eigenlijk in de omgevingsvariabele moeten plaatsen en dat is een
‫beetje lastig.
‫Dus ze hebben de standaard waar, als je een bestand opgeeft... en dit zou de weg zijn... dus het zou worden uitgevoerd geheimen, en
‫dan de naam, toch? Dus psql pass, de naam van het geheim.
‫Als ik dat doe, is dat eigenlijk bij het opstarten van de afbeelding die zal zoeken naar deze omgevingsvariabele die
‫wordt ingevuld.
‫En als dat zo is, zal het dat bestand binnenhalen en opslaan in de omgevingsvariabele. De werkelijke inhoud van dat
‫bestand.
‫Dit is een heel gemakkelijke manier om deze geheimen in de bestanden te consumeren.
‫Maar het betekent wel dat de afbeeldingen die u gebruikt deze standaard moeten hebben.
‫Hetzelfde kunnen we voor de gebruiker doen.
‫Hopelijk is dit logisch voor u. Wanneer ik de service
‫maak, gaat het het typische doen wat het doet wanneer het een planningsverzoek voor een nieuwe container afgeeft.
‫Het gaat één Postgres-database maken en het geeft de omgevingsvariabelen
‫door voor de locaties van die twee geheimen.
‫En dan gaat het in kaart brengen, in een tempfs, het gaat eigenlijk in kaart brengen in wat eruitziet als bestanden.
‫Maar nogmaals, het is eigenlijk gewoon een RAM-bestandssysteem of een tmpfs.
‫Laten we gaan kijken wat we daar kunnen zien.
‫Dus ik doe een docker-service ps psql, en dat zou ons moeten vertellen op welk knooppunt het draait.
‫Oké, het draait op dit knooppunt.
‫Laten we een exec doen om te zien wat we in de container kunnen zien.
‫docker exec -it.
‫En dan de specifieke containernaam voor die service, en dan bash.
‫Oke.
‫Nu zouden we in staat moeten zijn om een ls te doen op run-geheimen, en je zult zien dat we de twee bestanden daar krijgen.
‫En als ik een kat op psql-gebruiker doe, zien we de waarde. Het werkte.
‫En als we naar de logs van die psql kijken, weten we dat het werkt. Want als het niet... als het die bestanden
‫niet had, zou de eigenlijke database zichzelf blijven hercreëren en niet kunnen werken omdat
‫het geen wachtwoord en gebruikersnaam had om de database te maken.
‫Als je docker-service ps opnieuw zou doen, zou je zien als het niet correct zou werken in een databasescenario,
‫dat de database feitelijk zou falen. En het zou blijven herstarten en je zou zien dat
‫hier nieuwe containers worden gemaakt.
‫Dus nu we het daar daadwerkelijk aan hebben toegewezen, kunnen we een docker-service-update gebruiken
‫om het geheim te verwijderen. Dus, docker-service-update --secret-rm.
‫Er is ook een geheime toevoeging. Maar als ik een van deze geheimen zou verwijderen,
‫wat er feitelijk zou gebeuren, zou het de container opnieuw implementeren. Omdat geheimen een onderdeel zijn van het onveranderlijke ontwerp van services.
‫Als er iets in de container moet veranderen voor de service, gaat de service niet naar binnen
‫en verandert er iets in de container. Het zal de container daadwerkelijk stoppen en een nieuwe implementeren.
‫Dat is natuurlijk niet ideaal voor databases. We zullen dus een ander plan moeten
‫bedenken voor het bijwerken van databasewachtwoorden.
‫En dat is iets waar we het later over kunnen hebben.
‫Voor nu wil ik dat je weet dat je ze kunt verwijderen en extra kunt toevoegen aan een bestaande service.
‫Het gaat gewoon de container opnieuw maken als je het doet.