Golang for Devops en Cloud Engineers

Golang voor Devops en Cloud Engineers is een uitstekende cursus van Edward Viaene die ik onlangs heb afgerond (certificaat hier). De cursus omvatte ongeveer 20 uur aan video's, en het kostte ongeveer 45 uur om te voltooien inclusief de 'opdrachten' (daadwerkelijk programmeren).

Ik heb specifieke interesse in Golang omdat het resulteert in statische binaries voor meerdere platforms, het kan worden uitgevoerd zonder enige afhankelijkheden en heeft uitstekende ondersteuning voor concurrency.
En het bevalt me dat foutafhandeling zo'n intrinsiek 'deel' van Golang is, in tegenstelling tot 'exceptions' die in andere talen vaak gebruikt worden (afhankelijk van het framework). In feite is veel van de code die je schrijft over 'is er een fout en zo ja wat doe ik er mee'. Dat klinkt vermoeiend, maar eigenlijk gaat het over het schrijven van stabiele applicaties.

Mijn achtergrond is dat ik al enkele Golang applicaties, functies, heb geschreven, die ik draai in AWS Lambda, en enkele command-line programma's voor eigen gebruik om het leven van devops gemakkelijker te maken.

De cursus begon langzaam met de introductie van enkele Golang concepten en technieken die het waard zijn om te weten (zoals bouwen en verpakken, kanalen en asynchrone 'go' routines'), maar kwam snel op gang met een diepgaande uitleg over hoe enkele praktijkgevallen te implementeren.

De praktijkgevallen werden vergezeld door opdrachten of uitdagingen, die meestal een test-gedreven benadering volgden: de instructeur legde eerst de taak / praktijkgevallen voor, en leverde vervolgens de unit tests en het basis skelet om de praktijkgeval en functies te implementeren.

De student werd vervolgens uitgenodigd om de taak te voltooien door de code te schrijven totdat aan de vereisten in de unit tests werd voldaan. Vervolgens werd een mogelijke uitleg van de implementatie aangeboden (natuurlijk week ik hier op sommige punten van af). Dit leidde uiteindelijk tot complete voorbeeldtoepassingen van verschillende belangen:

  • Toegang krijgen tot en beheren van AWS en Azure services vanuit Golang
  • Kubernetes besturen met Golang J
  • Je eigen SSH-server maken
  • Een OIDC-autorisatieserver en OIDC client schrijven
  • Een TLS- en mTLS-server schrijven in Go
  • Een DNS-resolver schrijven in Go


De AWS- en Azure-projecten (authenticeren, bucket creëren, instantie creëren enz.) waren vrij duidelijk voor mij aangezien ik ervaring heb met de AWS Api vanuit andere programmeertalen. Maar het was interessant om de verschillen in benadering tussen AWS en Azure te zien. Het Kubernetes-project toonde hoe programmatisch naar pods op Kubernetes te deployen.

Het maken van een SSH-server was een project dat mij interesseerde. Het toonde hoe je een geïntegreerde SSH-server in je applicatie kunt maken. En vervolgens commando's in die app uitvoeren, met behulp van een terminal of door ze te leveren met het SSH-commando. Ik zie hoe dit nuttig kan zijn, d.w.z. je zou bestanden [scp] of commando's [ssh] direct naar je applicatie kunnen sturen via een beveiligd kanaal. Ook waren de interne aspecten van een SSH-server best interessant.

De OIDC-opdracht vond ik het meest interessant. Het behandelde hoe je een autorisatieserver met OpenId connect schrijft. Niet alleen was de opdracht nuttig om inzicht te krijgen in het OIDC-proces, de instructeur toonde ook hoe deze server te verbinden met AWS IAM en om de gebruiker geleverd door de Golang-autorisatieserver toestemmingen te verlenen voor AWS-bronnen zonder IAM-gebruikers te creëren. En, om de autorisatieserver te gebruiken om gebruikers in Jenkins te autoriseren.
Echt heel interessant, en leuk om te voltooien. Ik heb mijn code naar deze GitLab repository gepusht. (Let op, dit is geen productiecode, ik zou veel dingen anders doen voor productiecode).

TLS in go, toonde niet alleen hoe je een TLS (https) server in Go schrijft, wat vrij voor de hand liggend is, maar ook hoe je je eigen CA en server-/clientcertificaten maakt. Het uiteindelijke gebruiksscenario was om een TLS-server en -client te schrijven, gebruikmakend van server- en clientcertificaten binnen de Go-applicatie zelf. Dit maakt veilige en gecodeerde communicatie tussen microservices mogelijk (er zijn natuurlijk meer doeleinden zijn).
Als bonus werd getoond hoe eenvoudig het is om een TLS-server in Golang te creëren met Let's Encrypt-certificaten: slechts een paar regels en je hebt je zero config https-server draaiend. Wow.

Een DNS-resolver schrijven was van matige interesse, het is niet iets dat men elke dag zou doen als je een devops engineer bent, denk ik. Desalniettemin toonde het hoe communicatie met een Golang-applicatie te verwezenlijken met UDP-packets, en behandelde het proces van DNS-resolving (wat een gecompliceerder is dan lijkt op het eerste gezicht).



Datum: Februari, 2024

Vaardigheden

  • Golang
  • DevOps