GitLab-CI und Docker Registry
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 95 | |
Author | ||
License | CC Attribution 4.0 International: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor. | |
Identifiers | 10.5446/32296 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
FrOSCon 201751 / 95
4
8
9
15
20
22
23
24
25
27
29
32
36
37
38
39
40
45
46
47
48
49
50
51
53
54
59
63
64
65
74
75
76
79
83
84
86
87
88
89
91
92
93
94
95
00:00
Windows RegistryFreewareOpen sourceSource codeHash functionEnterprise architectureXMLComputer animation
01:00
EnergiePhysical quantityComputer animation
01:50
Windows RegistryCompilation albumMagneto-optical driveInformation securityArchitectureCoding theoryPairwise comparisonLecture/ConferenceComputer animation
02:38
Pairwise comparisonWindows RegistryTOUR <Programm>Enterprise architectureComputer animation
03:33
Revision controlSpacetimeServer (computing)Repository (publishing)DemonSoftware testingData storage deviceWindows RegistryFront and back endsChecklistLocal ringAuthenticationService (economics)Server (computing)SummationSoftware repositoryClient (computing)Process (computing)Enterprise architectureData storage deviceChecklistVirtual machineWindows RegistryPDF <Dateiformat>BuildingVAX/VMSGit <Software>Wind waveComputer animation
09:12
ChecklistProxy serverReverse engineeringFront and back endsComputer-generated imageryDirected setInternetworkingPublic key certificateHorizonDirect numerical simulationKommunikationProxy serverComputer fileSocial classEnterprise architectureInternetCurveEigenvalues and eigenvectorsPublic key certificateBuildingVAX/VMSMikroarchitekturHTTPChemical equationComputer animation
12:32
Proxy serverDirect numerical simulationHorizonIP addressServer (computing)Software testingWORKS SuiteBuildingFile viewerLecture/Conference
13:27
Gastropod shellArchitectureServer (computing)Configuration spaceLaptopForm (programming)Statement (computer science)Virtual machineKonnektorPoint cloudNormal (geometry)Gastropod shellHTTPComputer animationProgram flowchart
14:51
Gastropod shellArchitectureStatement (computer science)Gastropod shellWindows RegistrySoftware repositorySlide ruleComputer animationProgram flowchart
16:20
Client (computing)CloningArchitectureWindows RegistryBuildingSoftware testingToken ringStatement (computer science)Proxy serverKommunikationInternetAuthenticationClient (computing)ALT <Programm>Configuration spaceSoftware repositoryComponent-based software engineeringSystems <München>Computer fileBuildingNetwork socketWindows AzureWindows RegistrySoftware testingServer (computing)
22:50
Client (computing)Windows RegistryToken ringArchitectureFront and back endsBuildingSoftware testingLocal ringNetwork socketPublic key certificateKommunikationInternetConfiguration spaceComputer animationLecture/Conference
24:35
Source codeData storage deviceFront and back endsMilitary operationDevice driverMiniDiscDefault (computer science)Overlay-NetzPhysical systemDemonComputer-generated imageryLocal ringClient (computing)BuildingModule (mathematics)CASInternetUbuntu <Programm>Direction (geometry)Set (mathematics)Local ringOLEKernel (computing)Client (computing)Public key certificateOverlay-NetzDefault (computer science)Computer animation
29:53
Overhead (computing)Enterprise architecturePublic key certificateScratchSoftware repositoryConfiguration spaceWindows RegistryVariable (mathematics)Proxy serverCentOSInternetUbuntu <Programm>Default (computer science)Version <Informatik>Spoke-hub distribution paradigmCloningNumerisches GitterCASCelestial sphereLecture/Conference
36:03
Configuration spaceComputer-generated imageryWindows RegistryVolumePublic key certificateService (economics)Level (video gaming)Scripting languageVariable (mathematics)Overlay-NetzLoginConfiguration spaceUbuntu <Programm>Link (knot theory)Eigenvalues and eigenvectorsComputer fileThread (computing)Block (periodic table)Variable (mathematics)Windows RegistryDevice driverNetwork socketSoftware testingFloppy diskVersion <Informatik>CloningEnterprise architectureSoftware repositorySlide ruleCASOverlay-NetzXML
40:34
Computer-generated imageryConfiguration spaceLevel (video gaming)Service (economics)Scripting languageOverlay-NetzVariable (mathematics)LoginPoint (geometry)Public key certificateVolumeProxy serverIntegrated development environmentLocal ringAsynchronous Transfer ModeDefault (computer science)Inheritance (object-oriented programming)Intercept theoremModule (mathematics)MicrosoftFacebookInstanz <Informatik>Service (economics)Variable (mathematics)Windows RegistryConfiguration spaceVersion <Informatik>Computer fileSoftware repositoryProxy serverSystems <München>Enterprise architectureEigenvalues and eigenvectorsComputer animation
46:54
Computer filePositionEckeCloningSoftware repositoryVersion <Informatik>Software testingLecture/Conference
49:49
Module (mathematics)Public key certificateLocal ringSample (statistics)VideoconferencingPointer (computer programming)Data storage deviceComputer fileServer (computing)Content (media)Correlation and dependenceObject (grammar)Scripting languageComputer fileACCESS <Programm>Object (grammar)CodePublic key certificateGit <Software>Ubuntu <Programm>TEXDownloadSoftware repositoryComputer animation
52:26
Computer-generated imageryLevel (video gaming)Scripting languagePoint cloudRevision controlProduct (business)Enterprise architectureIntegrated development environmentPersonal digital assistantVideoconferencingFront and back endsEnterprise architecturePHPObject (grammar)Ruby on RailsGit <Software>Software bug
54:18
SummierbarkeitSAINTS <Programm>ZahlTemplate (C++)NumberActiveXVersion <Informatik>AgreeablenessWordUntermodulRuby on RailsSoftware bugEigenvalues and eigenvectorsPublic-key infrastructureLecture/Conference
01:02:10
Link (knot theory)Computer fileInstallation artRootFreewareOpen sourceEvent horizonSlide ruleComputer fileComputer animation
Transcript: German(auto-generated)
00:12
So, fangen wir an. Herzlich willkommen zu meinem Vortrag GitLab CI und Docker Registry.
00:25
Das heutige Agenda sieht folgendermaßen aus. Ich erzähle ein bisschen über mich, für diejenigen, die mich noch nicht kennen. Wir gehen nochmal auf Sachen, was wir mit diesem Vortrag überhaupt erreichen möchten.
00:41
Für diejenigen, die GitLab noch nicht kennen oder nicht so gut kennen, nur vom Namen her, gehen wir auf Basics von GitLab und dann konzentrieren uns auf das Deployment on-premise und essentiell auf einer Enterprise-Infrastruktur. Und wer schon in großen Enterprise gearbeitet
01:11
hat, weiß, dass das Deployment bei diesen Infrastrukturen ein großes Schmerzen bereiten kann. Daher, wir haben die Erfahrung gemacht und wir möchten die Erfahrung einfach scheren und so eine Diskussion machen.
01:25
Und zum Schluss gehen wir noch auf die bekannten Bugs, die GitLab zurzeit hat und die sind dabei, das zu fixen, damit ihr da auch Bescheid weiß, was auf euch wartet, wenn ihr GitLab deployen möchtet. Und zum Schluss gibt es eine Fragen-Antwort-Session, Diskussionsrunde. Oh, die ist kaputt gegangen, sorry. Vielen Dank.
01:49
Noch mal. Okay, alles klar. Dann über mich. Ich bin Oleg Fixl. Ich bin Security Consultant bei der Firma CSP, früher ModComp.
02:05
Ich mache Architektur, ein bisschen Perlcoding, Development Cycles. Privat lerne ich ein bisschen Golang und Bastel am Gentoo. Was möchten wir mit diesem Talk erreichen? Ich möchte keinen Vergleich hier machen, GitLab gegen Jenkins, gegen was anderes.
02:34
Also hier geht es um GitLab, wenn ihr euch schon für GitLab entschieden habt oder euch entscheiden möchtet, dann geht es hier um GitLab CI.
02:44
Und wir möchten eine Übersicht verschaffen, was GitLab Deployment mit sich bringt, wenn man dann auch eigene Docker-Container mit CI bauen möchte in einer on-premise Enterprise-Architektur.
03:02
Wir gehen auf GitLab CI Community oder GitLab Community Edition. Mit Enterprise Edition haben wir noch keine Erfahrungen gesammelt. So, und ich bin kein Mitarbeiter von GitLab. Das heißt, das, was wir besprechen, ist halt unsere Erfahrung und unser bestes Effort.
03:26
Okay, wer hat schon mal GitLab gehört? Okay, wer arbeitet mit GitLab? Okay, cool. Ich gehe mal kurz, was GitLab ist,
03:42
was es macht und das Wording von GitLab überhaupt, damit wir auf denselben Welle sind und die gleichen Wording die Bedeutung verstehen. Okay, also GitLab, Git Repository Manager, wie GitHub nur selbst hostet, das war so die Idee,
04:04
gestartet in 2011. Und jetzt ist es rapide gewachsen bis auf 150 Mitarbeiter und Enterprise-Produkt. In 2016 haben sie CI Pipelines eingebaut und damit ist GitLab reif zum CI und
04:33
automatischen Deployment. GitLab ist schon benutzt von mehreren Firmen, IBM, Sony, SpaceX, NASA und CSP.
04:47
So, wer kennt, was Docker ist? Ja, super, alle. Dann könnt ihr wahrscheinlich sogar mehr als ich. Okay, ich gehe ganz kurz auf Docker, was es ist. Ganz kurz sieht Docker vollendermaßen aus.
05:04
Wir haben Docker Client, wir haben Docker Host, wo die ganzen Container laufen. Container, so eine Art wie virtuelle Maschine, aber nicht virtuelle Maschine, gar nicht virtuelle Maschine, also mehr als ein separater Sandbox-Prozess. Und wir haben richtig Registry, wo die ganzen Container liegen. Das heißt, es gibt natürlich viel mehr Möglichkeiten. Wir können Container
05:29
bauen von einem Docker-File, das heißt wir laufen Docker-Build und der erstellt uns einen Container, hier glücklicherweise ein Gentoo-Container. Und dann können wir mit Docker Run diesen Container oder einen anderen Container aus unseren Images,
05:45
lokalen Images dann laufen lassen. Man sieht hier schön, dass die Container, die laufen, da gibt es so Schichten, das heißt jedes Mal, wenn man zum Container irgendwas hinzufügt, kommt eine Schicht oben drüber.
06:00
Das ist ein Filesystem Schichtmodell. Und ich habe auch die Möglichkeit, Docker Pull zu machen und einen Container aus dem Registry zu ziehen in mein lokales Container. repository, lokales Speicher. So, das ist ganz kurz zu Docker. Fragen? Gut, ja, okay. So, zum
06:27
Boarding, damit wir auf derselben Seite sind, was ich oder was GitLab mit einem bestimmten Wortsatz meint. GitLab Server ist gemeint ein Server, der hat Repositories und hostet diese Repositories. Dann gibt es GitLab CI Runner, das ist ein kleines
06:54
Go-Binary, das läuft im User Space und sorgt dafür, dass die macht eine Verbindung zum GitLab Server und sorgt dafür, dass die
07:06
Tests, Builds, was auch immer, was GitLab anstoßt, dass die aufgerufen werden und evaluiert werden. So, dann wenn zum Beispiel ein CI Runner, ein Build-Prozess laufen lässt, dann entsteht am Ende dieses Build-Prozess ein Binary oder ein Build oder ein PDF oder was auch immer, ein Artifakt.
07:33
Und dieses Artifakt kann eventuell dann an GitLab wieder zurück hochgeladen werden. GitLab hat dafür dann so ein Artifact Storage. So,
07:48
dann gibt es auch, es gibt auch noch viel mehr, aber in diesem Vortrag gehen wir nur auf diese Sachen zu. Dann gibt es GitLab Container Registry und das ist nicht viel mehr als ein Frontend für Docker Container Registry.
08:07
Das heißt, man muss nicht missverstehen, ich mache da ein Häkchen an und ich habe direkt ein Docker Registry. Nein, das ist nur ein Frontend, der greift nämlich auf das Docker Registry Service und ich habe halt
08:20
dann die Möglichkeit im Docker Registry meine Images zu verwalten, zu löschen und das macht auch die Authentifizierung. Das heißt, der GitLab hat dann ein Frontend für Docker Registry Service. Den muss man dann auch separat laufen lassen. Dann gehen wir gleich in der Architektur nochmal drauf ein.
08:44
So, wie sieht so ein Deployment von GitLab mit CI on-premise aus? Wir haben ein Checklist, was wir alles dafür brauchen.
09:00
Wir brauchen zwei VMs, man kann, also ich würde sagen mindestens zwei VMs. Wir können natürlich auf einer VM laufen, dann hat man so eine riesen VM und alles da drin ist, ist nicht schön. Also mindestens zwei würde ich sagen oder wenn sie schon Kubernetes Cluster oder Rancher Cluster oder Mesos Cluster oder was auch immer. Amazon, Amazon ist ja nicht mehr on-premise.
09:22
Also zwei VMs. Wir brauchen eventuell optional ein Reverse Proxy oder ein Load Balancer für SSL Offload. Praktisch, da hat man die ganzen SSL Zertifikate drauf. Wichtig ist, dass das Ding ein HTTP 1.1 vorne und nach hinten verstehen muss, also können muss. Zum Beispiel
09:48
mit light-httpd hatten wir die Erfahrung, der macht nach vorne HTTP 1.1, bricht aber nach hinten 1.0. Also put und delete HTTP Request kommen nach hinten nicht durch. Zum Beispiel eine direkte
10:06
Verbindung zum Internet, am besten eine direkte Verbindung zum Internet für das Ziehen der Docker Images. Der CI Runner, das ist der, der der Builds laufen lässt, der wird sich Docker Images ziehen, um halt
10:22
irgendwas Java Docker Image, um halt Java Dateien oder War Dateien zu bauen, muss er halt irgendwie ans Internet. Wir gehen noch auch darauf ein, was man machen kann, wenn man wie üblich in Enterprise Architekturen einen Forward Proxy hat und man bräuchte SSL Zertifikate für das Frontend, für die Zwischenkommunikation.
10:52
Interessant wird, wenn man intern eine eigene CA betreibt, das heißt also das GitLab eventuell nach extern erreichbar
11:02
ist, großteils nicht, nur intern und intern wird eine eigene SSL CA benutzt und dann wird es spannend. Das ist der Hauptteil von dem Vortrag. Okay, was für Probleme können dabei auftreten oder was kann Schwierigkeiten bereiten, wenn man dann so ein Deployment macht.
11:29
Also internal CA ist auf jeden Fall eine Sache, die euch viel Arbeit, viel Gehirnschmal braucht.
11:42
Also man sieht ja auch der Smiley, der hat wirklich so eine schöne Kurve drin. Also Forward Proxy kann auch ein bisschen schwierig sein, hat auch eine leichtere Kurve so im Gesicht und DNS Split Horizon, was nicht in diesem Vortrag, nicht Teil dieses Vortrags.
12:07
Wer versteht was, DNS Split Horizon? Okay, also DNS Server, Name, gib mir einen IP, ich frag den an, ich geb ihm einen Namen, der gibt mir einen IP.
12:22
So, Split Horizon heißt, ich hab einen DNS Server, der ist sowohl für außen zuständig als auch für innen. Und wenn jemand von außen fragt, gib mir gitlab.domain.com, der gibt eine Public Adresse.
12:40
Wenn ich von innen frage, der sieht, aha, okay, du hast eine interne IP, da hab ich eine andere View, da geb ich dir eine interne IP. So, das ist Split Horizon, also für den gleichen Namen, zwei verschiedene Einträge, IP-Adressen und abhängig von der Source IP des Anfragenden. So, das kann auch ein Interne Trick gewähren.
13:04
Okay, so, das GitLab CI Runner ist das Ding, was die Builds und die Tests und die Docker Images baut und das ganze CI Doing macht, der Worker dafür.
13:22
Der sieht, die Architektur kann vollendermaßen aussehen, also hier haben wir GitLab CI, das ist der Server oder ein Teil des Servers, das CI Teil, das Command and Control Center, was sagt, welcher Runner was machen muss.
13:42
Und da haben wir verschiedene Möglichkeiten, wir können zum Beispiel einfach einen CI Runner bei uns auf dem Laptop laufen lassen, der verbindet sich dann über HTTP zum GitLab Server und rollt sich dann die Befehle, was er machen soll und macht das dann, kann eventuell auch mit Docker funktionieren,
14:03
also wenn man gerade da eine VM mit Docker hat oder ein Nativ, man kann Runner als virtuelle Maschinen in der Cloud aufsetzen. Ich glaube, GitLab hat sogar einen Connector zum Digital Ocean, da kann er bei Digital Ocean einen Runner einfach erstellen,
14:24
Sachen laufen lassen und wieder löschen, das heißt, in der Cloud ist es auch kein Problem, es ist sehr dynamisch. Hauptsache derjenige kommt dahin, also die Befehle gehen von einem GitLab CI, aber die Verbindung geht andersrum. Und ich habe noch die Möglichkeit, einfach einen Shell Runner laufen zu lassen, der kann dann in normalen Shell
14:47
Befehle absetzen, also dann programmiere ich meine CI Konfiguration so, dass ich halt wie auf der Shell Befehle aufrufen soll. Und ganz interessant wird es nämlich mit dem Docker Runner, das heißt, der Docker CI Runner verbindet sich dann an den Docker Container und für
15:08
jeden CI Job startet er einen Docker Container oder zieht sich einen Docker Container und klont da die Repository rein und lässt die Befehle laufen, oder was auch immer, das heißt, man kann hier verschiedene Container aus dem Registry ziehen und da
15:26
die CI laufen lassen, was hier aber noch nicht da ist, was auf dem anderen Slide da ist, man kann hier in dem CI Runner, der Docker Container benutzt, noch einen Docker Container erstellen
15:43
und in diesem Docker Container ein Docker Image bauen, so baut man dann die Images nochmal. Ja, das heißt Dint Docker in Docker, das ist ein ganz kruder Konstrukt, man kann es auch anders machen, aber das ist wohl die Sache, die bis jetzt so ja empfohlen wird.
16:02
Und also so wie es aussehen kann. Okay, jetzt kommt ein ganz interessanter Slide, den müsste ich mal durchgehen. So kann es aussehen, sieht vielleicht sehr kompliziert aus, aber gehen wir einfach mal durch und man sieht, das ist relativ logisch.
16:29
Also das ist unser GitLab Server, da gibt es verschiedene Komponenten, GitLab, Repository, dann gibt es GitLab CI, dann gibt es Artifact Storage, dann gibt es Registry Frontend und Authentifizierungsstelle.
16:44
So, wenn der CI Runner startet, verbindet er sich, ja okay, an dem CI, wahrscheinlich muss er sich an GitLab verbinden, aber der verbindet sich an GitLab, holt sich die Befehle und dann verbindet sich an, sorry, der
17:06
verbindet sich an die CI, holt sich die Befehle und dann holt er das Repository von dem GitLab Server runter. Dann klont die in einen Container, ein Container macht dann die Builds und Tests oder was auch immer
17:20
und der Runner hat dann die Möglichkeit, dann noch per HTTPS dann die Artifacts hochzuladen in die Artifact Storage. Und hier hat man auch dann die Möglichkeit, in dem Docker Container nochmal Docker Build zu bedienen und ein
17:42
Docker Container als Artifact zu erstellen und dieses Artifact geht dann nicht in Artifact Storage, sondern der geht in Registry. Das heißt, als Resultat unseres Builds ist ein Docker Container, der dann später in die Registry
18:03
eingecheckt wird für dieses Projekt und der später benutzt werden kann, um andere Builds zu machen. So, dann haben wir die Registry, die ist relativ simpel, das ist ein ganz
18:21
kleiner Container, auch ein Golang Binary, der braucht eine Storage und eine Config-Datei. Die Storage kann eventuell S3 sein oder lokale Storage, also irgendein Mount auf dem System oder Swift, Azure. Der braucht eine Config-Datei, wo er den GitLab findet, die Authentifizierungsstelle, dafür muss man selbst sein CA erstellen,
18:46
da ist wirklich die Doku sehr gut, was mir aber gefehlt hat, diese Verbindung, wie die ganze Kommunikation durchläuft. Das heißt, der verbindet sich mit dem Docker für die Authentifizierung, wenn ich für das Projekt nicht
19:00
freigeschaltet bin, kann ich auch keine Images dahin pushen und das ist dann für die Authentifizierung hier. Der GitLab hat ein Frontend für das Registry und braucht dann auch die Storage gemountet, das heißt die Storage muss an beiden Systemen gemountet sein oder wenn es S3 ist, dann gibt man die Credentials und dann können die beide die Storage erreichen.
19:26
Der muss auch das Zertifikat, das CA haben, damit die Verbindung hier verschlüsselt mit dem eigenen CA, also mit dem CA nur für diese Kommunikation, da stellt man halt ein eigenes CA. Und der Docker Client, der geht erstmal hin, authentifiziert sich und dann mit irgendeinem Token kann er dann pushen.
19:48
Also hier gibt es die Authentifizierung zweimal, einmal hier, einmal hier. Ich weiß ehrlich gesagt nicht, was genau greift, also wozu diese hier?
20:04
Wahrscheinlich um den hier push zu machen, gehe ich mal von aus, weil der Client laut Dokumentation authentifiziert sich direkt mit dem GitLab und dann geht er in Docker Registry. So, die roten Pfeile, die wären dann interessant, wenn man eine eigene CA benutzt.
20:26
Dann diese Kommunikation muss alle Clients, die diese rote Pfeile, rote Kommunikation betreiben, die müssen alle dieser CA vertrauen. Das heißt, der muss die CA lokal installiert haben und vertrauen, der und ganz interessant, der.
20:51
Das Problem werden wir später sehen, der wird aus dem Internet teilweise gezogen. Der hat die CA gar nicht drin. Das heißt, wie kann er dann pushen? Kann er gar nicht. Da kriegt man einen Zertifikatfehler.
21:06
Und das ist auch ein großer Teil dieses Vortrags. Wie man dieses Image anpasst, damit man die eigene CA oder Proxy-Konfiguration, oder was auch immer da integriert, damit diese Kommunikation hier klappt.
21:23
Der Pfeil, der rote Pfeil muss eigentlich von hier kommen. Teilweise pusht der, aber Großteil pusht der. Vor allem, wenn man Docker-Images baut, dann pusht der Docker-Container. Ja.
21:50
Soll ich die Frage wiederholen? Die Frage war, der GitLab CI-Runner, ist das ein Container oder ist das kein Container? Beides.
22:02
Es ist ein Golang-Binary, der verbindet sich an den Docker-Container und startet da ein CI-Runner-Docker-Container. Und dieses Container hat dann die Möglichkeit, andere Container zu starten. Das ist sehr verschachtelt.
22:20
Ganz krude wäre das, wenn man wirklich Docker-in-Docker macht, dann ist es dieses CI-Runner-Container macht noch ein Container, tut da den Socket rein von Docker und damit der Docker-Container da drin sich an den Docker selbst verbinden kann.
22:40
Das muss man sich ein bisschen da rein denken. Ich weiß nicht, warum man das so macht. Man kann das auch über Shell-Befehle machen, aber dann muss man halt Shell-Befehle tippen. Erstmal ganz laut in Diskussion, ob man es so machen muss oder so machen muss. Bei beiden Möglichkeiten gibt es verschiedene Probleme. Auf ein Problem gehe ich darauf ein, mit dem Storage-Backend von Docker.
23:09
Dass es auch teilweise sehr langsam sein kann. Da gibt es aber ein Workaround oder ein Fix dafür. So, habe ich die Frage beantworten? Okay, noch Fragen? Also diese CA brauchst du auf jeden Fall.
23:35
Das Thema heute ist, was machst du, wenn du intern eine eigene CA betreibst und kein offizielles Zertifikat.
23:43
Wenn du ein offizielles Zertifikat im internen Netz betreibst für GitLab, dann hast du überhaupt kein Problem. Dann ist es trusted von allen, dann ist die Kommunikation, da hast du überhaupt kein Problem. Da hast du keinen Krampf. Das Interessante wird, wenn du im internen Netz kein offizielles Zertifikat hast, kein Wildcard gekauftes oder kein gekauftes Zertifikat,
24:07
wenn du wirklich eine selbstsignierte CA klickst und daraus Zertifikate signiert, dann wird es interessant. Aber diese Kommunikation, da erstellst du halt drei Befehle, erstellst du eine CA nur für diese Konfiguration.
24:22
Ist alles super beschrieben auch, funktioniert auch genauso. Da gibt es auch kein Problem. Okay, so, bevor wir dann Docker in Docker bauen, gibt es ein interessantes Phänomen,
24:43
wenn man, das heißt dint, Docker, dint, Docker in Docker, Docker, zu viele Docker. Wenn man Docker in Docker baut, laufen lässt, der interne Docker-Container, der heißt dint, der bei Default benutzt ein WFS-Storage-Driver.
25:08
Und dieser Storage-Driver kann sehr langsam werden, wenn man gerade, weiß ich nicht, an einem Tag zwei, drei Images baut, ist es nicht schlimm, abhängig natürlich von der Menge. Aber wenn man wirklich sehr viele Images sehr oft baut, dann kann es für die Storage sehr viel Arbeit bedeuten.
25:30
Das heißt, als erstes, was man eventuell machen möchte an der Maschine, die CI-Runner hat, ist auf das Overlay Docker Storage Backend zu gehen.
25:41
Und das geht sehr leicht bei Ubuntu. Man muss das Modul haben, das Kernel -Modul, muss das Modul Modproben, das System neu starten, dann wird es automatisch geladen. Und man muss den Storage Backend in dem Docker anpassen auf Overlay und dann
26:06
wird das ganze Fallsystem nicht auf einmal kopiert, sondern wird in diesen Layern auch gehandelt. Wichtig ist dabei, sobald man das macht, erstellt der Docker ein neues Verzeichnis
26:22
in VAR Docker Storage mit dem Namen Overlay und das ist erstmal leer. Das heißt, wenn man lokal irgendwelche Container hatte, die sind dann mal weg. Das heißt, die liegen halt woanders. Wenn man dann wieder umstellt, dann sieht man die wieder, weil er wieder auf ein anderes Verzeichnis schwenkt.
26:41
Aber muss man halt im Hinterkopf behalten, dass die Container, die man jetzt lokal hat, werden halt weg sein mit dieser Umstellung. Ok, jetzt wird es interessant, wenn man eine eigene CA hat, was braucht man dafür, um GitLab
27:09
überhaupt zum Laufen zu kriegen mit Docker Registry und mit Docker in Docker, also bauen von Docker Containern.
27:20
So, alle müssen die CA wirklich trusted haben, die Clients, aber wahrscheinlich wird es dann automatisch irgendwie aufverteilt oder jeder, der Docker Registry erreichen möchte oder GitLab erreichen möchte, jeder Client muss dann die CA trusted haben.
27:42
Und das gehört auch, das gilt auch für CI-Runner. Das heißt, der pusht dann später die ganzen Artifacts, die ganzen Sachen Richtung GitLab, der muss natürlich auch die CA haben. Es wird viral. Sobald man eine eigene CA hat, jeder muss die CA integriert
28:03
haben. Am besten integriert man die in die Images rein, dann hat man kein Problem. So, das Problem, was wir vorher angesprochen haben, dass der Docker Container von CI holt einen
28:21
Docker Container aus dem Internet und baut damit dann irgendein Artifact oder wiederum ein Docker Image. Die Tatsache, dass er aus dem Internet holt, hat er die CA nicht integriert. Das heißt, der kann die Artifacts oder was auch immer, kann er gar nicht pushten.
28:41
Das heißt, ein Problem, die Public Images haben blöderweise unsere CA nicht integriert. Das heißt, die muss man dann irgendwie integrieren. Also, wir sind dann mit der Lösung oder mit dem Workaround gekommen, um die Images
29:05
aus dem Internet zu nehmen und die automatisch zu bauen mit Integration von unserer eigenen CA. Das heißt, wir haben ein Docker Image, der sagt From, das und das, CA rein und das war's. Nichts
29:23
mehr. Und die werden dann gescheduled, gebaut, einmal am Tag, damit man dann immer auf den aktuellen Images, dann baut man halt die Docker Images, die Docker in Docker Images und eventuell die Base System Images, die man braucht. So, wie geht man da vor? Das wird jetzt, ja?
29:47
Eine kurze Frage noch. Habt ihr versucht, die Zertifikate in die Docker Images rein zu mounten? Also, dass man die Zertifikate in das Image rein mountet?
30:01
Sehr gute Idee, ja. Du kannst das Zertifikat rein mounten, ja. Und du
30:22
müsstest dann das Zertifikat in die Trusted CA nochmal hinzufügen. Ja, das würde gehen. Dann hast du, ja, nee, nee, nee. Sehr, sehr, sehr gute Idee. Dann hast du nochmal die Proxy Settings. Die Proxy Settings machen wir auch dann beim Imagebauen.
30:40
Tun wir die ganzen APT, Proxy Settings oder was auch, die Environment Variablen. So. Und irgendwann hast du 10 Docker Images und in jeder CA-Konfiguration hast du diese Zeilen. Und das, wenn du dann dein Proxy, eine IP oder einen Namen ändert, hoffentlich
31:02
nicht, oder eine neue CA hast, dann musst du wirklich alle deine CA-Konfiguration ändern. So änderst du nur eine Konfiguration und darauf wird dann automatisch gebaut. Das ist so und so. Kann man so machen? Klar. Ja, ist auf jeden Fall viel einfacher, die Zertifikate einfach da rein zu tun.
31:25
Aber bei viel CA-Konfiguration kannst du dazu führen, dass du wirklich viel anpassen musst. Und das ist auch großer Overhead bei CA-Konfiguration. Das ist immer das Gleiche. Ja.
31:43
Kann man machen, muss man aber nicht. Genau, ja. Also die Frage, warum soll man die Images direkt vom Docker Hub immer ziehen, muss man nicht.
32:03
Natürlich, dafür ist die eigene Registry da. Wir bauen eigene. Aber Ubuntu oder CentOS oder Docker, also Docker Image mit Docker drin, die willst du eigentlich selber bauen. Kannst du. Nimmst du die, klonst du die Repository? Klar.
32:24
Ja, klar, natürlich. Direkt vom Scratch kompilieren, alles klar, natürlich. Dann macht man einfach dann den Clon von dem Docker Repository ins GitLab rein, tut da CCI-Konfiguration und wird dann gebaut.
32:42
Dann hast du eigene, clean Images, nicht verseucht mit irgendwelchen Sachen. Ja, klar. Ja, ich wiederhole nochmal die Frage. Kann man nicht einfach letzten Crypt benutzen und sich den ganzen Stress sparen?
33:21
Ja, sicherlich, klar. Wenn du die Möglichkeit hast, auf ein valides Zertifikat drauf zu kommen, klar. Aber bei großen Enterprise ist es größer. Du hast keine Kontrolle über DNS. Du hast keine Kontrolle über das Traffic, der reinkommt. Wie willst du überhaupt letzten Crypt bekommen? Das heißt, du musst entweder DNS Entry oder du musst irgendwas nach außen laufen lassen.
33:45
Ja, sicher, klar. Kannst du. Nein, nein. Die CCI ist nur für HTTPS, damit die HTTPS Verbindung vertraut aufgebaut werden kann.
34:20
Und wenn man dafür ein offizielles Zertifikat benutzen kann, ohne viel Schmerzen, dann auf jeden Fall machen.
34:27
Letzten Crypt ist eine super Sache. Nur in einer großen Enterprise dauert eventuell so ein DNS Change vielleicht mal einen Monat. Wenn du das gemacht hast, hast du ein Zertifikat bekommen, dann ist das schon abgelaufen, bis du den nächsten Change hast.
34:48
Stell dir vor, du hast keine Kontrolle über DNS, du hast keine Kontrolle über Firewall, du hast keine Kontrolle über einkommenden Traffic. Aber du möchtest trotzdem CCI machen.
35:01
Also große Konzerne sind halt so, dass du sehr lange auf so einem Change, der irgendwie nichts bewirkt, also kein Benefit hat, die dauern halt so lange, wie dein letzten Crypt Zertifikat läuft.
35:21
Ja, deshalb der Vortrag. Genau. Das Problem ist, wenn man einen Docker Container erstellt mit der eigenen CCI, der GitLab CCI ist so konfiguriert, der bei Default immer Images von Docker Hub pullt.
35:42
Das heißt, wenn er auch lokales Image hat, pullt er das trotzdem, um zu gucken, ob da eine neue Version gibt. Man kann natürlich sagen, der soll woanders pullen, aber bei Default pullt er aus dem Internet. Das heißt, man muss erstmal die Base Docker Images selbst bauen und selbst auf die Repository
36:06
hochladen, damit das Prozess dann später laufen kann, damit er die Images schon mal vorrätig hat. Ansonsten hätte man Henne-Eye-Problem. Der versucht die zu holen, der kann die
36:20
nicht holen, weil der kann die nicht bauen, weil die noch nicht gebaut sind. Und dafür müssen wir erstmal die Runner-Konfiguration anpassen. Dann bauen wir die ersten Docker Images selbst, pushen die zu Repository und sobald die im Repository drin sind,
36:44
dann können wir die CI-Konfiguration anlegen, bitte nimm die Images aus dem Repository und baue mir die selbst. Das heißt, der nimmt die Images selbst und baut die selbst damit. So. Und CI-Konfiguration erstellen.
37:00
Eventuell kann man halt, wenn man so ein eigenes Ubuntu Image pflegen möchte, mit eigenem Custom, vielleicht Security Patches oder Security Guidelines, die man in so einem Enterprise öfters mal hat, da kann man so ein Docker Image dann immer einmal am Tag bauen.
37:26
Die Runner-Konfiguration ist ein Feature von CI, Scheduled Builds, das heißt, immer täglich wird es gebaut und hat man dann immer die aktuelle Version. So. Bei der Runner-Konfiguration ist wichtig, dass der Executor, ein Docker Executor, dass er Privileged ist.
37:47
Privileged heißt, er hat die, es ist ihm erlaubt, an den Docker-Deam dran zu gehen und neue Docker-Container zu starten. Da muss man vorsichtig sein, also nicht alle Jobs möchte man in Privileged Mode laufen lassen, nur die
38:04
Jobs, die auch die Docker-Container bauen und so verschiedene Tests oder so, die müssen nicht Privileged sein. Und man muss den Docker-Socket rein-mounten. Also hier würde man nochmal den Mount, den du meintest, mit der CI, hier würde man den da rein-mounten.
38:22
So. Dann erstellen wir den, wir müssen zwei Images bauen. Ein Image für das Docker-Latest, also das Docker-Image, also Docker-Image mit dem Docker-Vinary da drinnen.
38:41
Und ein Image, Docker-Dint, das ist ein extra Image, der ist sehr ähnlich zu dem normalen Docker-Image, nur der ist gedacht in einem Docker-Container zu laufen. Das heißt, ein Docker-File für das Docker-Latest, wir nehmen das Docker-Latest, kopieren da unser Test-Zertifikat, fügen das zu den CAS und das war's. Mehr ist das nicht.
39:14
Die Dateien sind alle auf dem GitHub, den Link gibt es in den Slides und in
39:21
dem Vortragsprogramm auf dem GitHub-Account, da gibt es die Files, da gibt es auch ein Readme, was man machen muss, um halt sowas zu bauen, also man müsste nicht abfotografieren oder Copy-Paste aus der Präsentation, da gibt es alles, muss man sogar nur die Verzeichnisse reinklonen in GitLab und dann einfach Bild laufen lassen, ist alles auf dem GitHub, dann gut geladen.
39:52
Bitte? Boah, frag mich nicht. Artistic. So, dann braucht man dafür eine CI-Konfiguration, die ist ein bisschen komplizierter, aber wir gehen die mal durch.
40:01
Wenn man Overlay benutzt hat, braucht man dann dieses Docker-Driver, wenn man nicht umgestellt hat, dann kann man es weglassen. Image-Tag ist auch eine Variable, die setzt sich zusammen aus unserem Registry-Fahrt, HTTPS, Docker-Registry-Domain.com, der GitLab kennt
40:22
die ja, weil der hat einen Frontend dafür und commit-reference-name, also wäre dann Master oder Branch-Name oder Tag-Name. Also, bevor wir überhaupt anfangen, lockt er sich ein mit dem CI-Token, Token wird auch per Variable, den sehen wir nicht, das ist intern, das ist so die Standard-Konfiguration wirklich von CI.
40:43
So, und dann bauen wir ein Docker-Image, Stage-Build, also kann man verschiedene Stages test, build, deploy und wir benutzen ein eigenes Image, das ist die Gruppe, die wir erstellt haben und Docker-Master, also Master-Branch.
41:01
So, das ist interessant, Services, um ein Docker-Image zu bauen über CI, braucht man dann ein Service, Service ist ein zusätzlicher Container einfach, der gestartet wird und das ist nämlich der Docker-in-Docker-Image, den wir dann später nochmal bauen. Tags kann man weglassen, aber die CI-Runner kann man taggen, also diese CI-Runner ist zum Beispiel Privilege, läuft in Privilege Mode, das
41:30
heißt, der ist dann dint getaggt, das heißt, auf diesem CI-Runner laufen nur dint-Jobs, also Docker-in-Docker-Jobs und sonst keine. So, und dann Docker-Build, Docker-Push, das war's. Das gleiche macht man dann für Docker-in-Docker-Image, also dint-Image,
41:50
das ist genauso aufgebaut, nur hat hier ein paar Unterschiede, ist so original, kopiert von dem Docker-Image, von dem Docker-File.
42:02
Und die gleiche CI-Konfiguration. Sobald man diese zwei Container gebaut hat, gepusht hat, kann man dann verschiedene Docker-Container damit
42:20
bauen oder auch die selbst dann nochmal damit bauen, regelmäßig und die Konfiguration dafür sieht dann folgendermaßen aus, genauso wie davor. Also Overlay, wie ich schon sagte, könnte man weglassen, könnte man auskommentieren und zum Schluss baut man
42:40
eine Image mit dem Image-Tag und pusht das in die lokale Registry zu diesem Projekt hoch. Und man fügt diese Datei in das Repository, man fügt da ein Docker-File hinzu und verschiedene Dateien, die man halt braucht dafür und das war's. Somit baut man dann im Endeffekt eigene Docker-Images mit GitLab CI.
43:04
So, gibt's dazu noch Fragen zu dem Thema Bauen? Okay, dann gehen wir mal weiter vor. Forward
43:20
-Proxy. Viele Enterprise haben Forward-Proxy mit Filtering, mit was auch immer, auch in der Server-Infrastruktur. Wenn man Glück hat, ist das ein relativ einfaches Forward-Proxy und es filtert nicht viel und es ist ein transparenter Proxy. Wenn man Pech hat, ist es kein transparenter Proxy.
43:47
Dann gehen wir kurz darauf ein, was man da machen kann oder was wir damit machen, um das umzugehen. Also, Problem ist klar, nicht jede Applikation immer hat Proxy-Support oder es ist
44:04
manchmal sehr tricky, muss man lange suchen, versionsabhängig, wie man die Proxy-Konfiguration macht. Wenn man, wie wir schon angesprochen, wenn man die Proxy-Konfiguration immer in CI-Konfiguration machen, dann
44:21
hat man immer so einen Blob in CI, der nochmal dazukommt und den man dann eventuell anpassen muss. Das heißt, das möchten wir auch dann vermeiden. Wir möchten es auf einer Stelle irgendwo konfigurieren oder an wenigen Stellen wie möglich. So, man möchte dann wahrscheinlich Environment-Variablen setzen in dem System und hoffen, dass das Programm Gebrauch
44:46
von diesen Environment-Variablen nimmt und wenn das nicht der Fall ist, das gibt es nämlich auch, dann haben wir uns gedacht, ein lokales Transparent-Proxy auf dem CI-Runner-Maschine laufen zu lassen,
45:04
der nichts anderes tut, als der ganze HTTP-Traffic durch sich leitet und zu der nächsten Proxy-Instanz. Also, das ist so die minimale Konfiguration. Hier würde man den Upstream-Proxy
45:20
konfigurieren und dazu gibt es dann noch einen IP-Tables-Rule, Quick and Dirty. Funktioniert aber nicht für HTTPS. Für HTTPS muss man trotzdem HTTPS-Proxy
45:41
setzen und der Proxy muss das unterstützen. Und der Proxy muss Connect unterstützen. Mit HTTPS kann eventuell tricky sein. So, keine Fragen? Gut. Dann zum Schluss gibt es
46:05
noch ein paar Bugs, die wir gesehen haben, die gerade dabei sind gefixt zu werden. Der eine Bug ist mit Git-Sub-Modules. Git-Sub-Modules, sagt's irgendwas? Okay, einige nicken.
46:32
Von damals noch. Manchmal hat man viele Repositories. Manchmal, wie Facebook, hat man den größten Repository in der Welt, oder war das Microsoft?
46:47
Die haben eine Extension geschrieben für Git, damit das große Repository da einpasst. Und manche haben dann viele kleine Repository und so ein Meter-Repository, der auf die anderen dann verweist. Also, noch mal zu Git-Modules. Ich habe ein Repository, ich habe da Dateien, aber
47:02
ich möchte auch nicht Dateien von einem anderen Repository einfach kopieren, sondern ich möchte es verlinken. Und beim klonen mache ich Recursive, glaube ich, und dann klont er mein Repository und guckt, aha, da gibt es auch einen Verweis auf ein anderes Repository und klont das nochmal rein in ein Verzeichnis.
47:20
Ich weiß nicht, bei SVN, wie ist es damals? Genau, genau.
47:45
Gibt es Vor- und Nachteile? Ich wiederhole nochmal, was du gesagt hast. Sobald man ein Repository zu einem Sub-Module-Repository verlinkt, verlinkt man wirklich zu einem Commit, also geht im Endeffekt alles Commit, zu einem Commit.
48:03
Das heißt, man kriegt nicht immer die latest Version, sondern man kriegt irgendeine Version, gibt es Vor- und Nachteile. Vorteil natürlich, ich bin immer auf der Version, die es funktioniert und nicht der Upstream hat irgendwas geändert, hat eine neue Version gebraucht und plötzlich funktioniert bei mir nichts. Aber hat den Nachteil natürlich, ich muss immer aufpassen, aha, gibt es da eine neue Version, dann verweise ich immer auf die neue Version.
48:34
Bist du sicher? Ich glaube, du kannst nur auf Commit-Basis, auch wenn du auf Master verweist, dann ist das immer nur der jetzige Master, ne?
48:47
Genau, musst du manuell dann anpassen.
49:10
Ich wiederhole nochmal, damit man den Verweis von dem Repository auf ein Sub-Module-Repository
49:21
auf ein latest oder auf einen bestimmten Master macht, muss man in die configs rein. Ja, ok, das wusste ich auch nicht, guck mal. So, wenn wir über CI ein Repository auschecken und darauf irgendwelche Builds, Tests laufen lassen möchten und wir haben dieses Repository mit Sub-Modules gelinkt zu einem anderen Repository, haben wir so ein Fehler bekommen.
49:48
SSL-Certificate-Problem, enable to access und dann github.com. So, das heißt, man muss es jetzt nicht mit CA vertauschen, das ist tatsächlich irgendein
50:04
Problem mit Golang, wie Golang verschiedene Zertifikate behandelt, dafür gibt es einen Bug und der fix soll in der nächsten Release, in ein paar Wochen kommt es raus, soll es gefixed sein. Also, wenn ihr das aufsetzt und diesen Fehler seht, das hat nichts mit eurer CA oder mit Zertifikat zu tun, das ist was anderes.
50:30
Also, es ist tatsächlich ein Problem, du kannst keine Repositories auschecken, die Sub-Modules haben zurzeit. So, dann gibt es noch eine Sache mit Git LFS. Git LFS ist ein Large File Storage für Git, also Git geht
50:52
super um mit Textdateien, Code, TeX oder was auch immer, was Text ist, Git geht ganz schlecht um mit Binary Dateien, um Videos.
51:11
So, Git LFS macht da einen Verweis in Git und lädt die Dateien hoch auf Git LFS Server, in dem Fall ist er in GitLab integriert.
51:25
So, und das klappt auch nicht, sobald man ein Projekt mit LFS-Objects hat, man hat dann ein Projekt, die Verweise, aber die Objects nicht, die werden nicht ausgecheckt.
51:43
Wir haben Workaround, wir haben ein eigenes Image, wir haben wirklich nur sehr wenige Repositories, die die LFS benutzen und wir möchten dieses Repository an dem Release einfach taren, wandeln und als Artifakt hochladen in Git, damit der Kunde oder
52:02
diejenige einfach mal auf das Artifakt Download Button klicken muss und hat dann Archiv mit allen, Artifakt mit allen da drinnen. So, und dafür haben wir dann Docker Image gebaut, der holt sich LFS-Sourcen und dann macht Git LFS Fetch und holt die LFS-Objekte manuell.
52:24
So sieht es aus, also man kennt ja schon, Image, Ubuntu, also wir nehmen ja unser eigenes Ubuntu oder man kann Original Ubuntu nehmen, man lädt das aktuelle LFS runter, installiert Git LFS Install, Git LFS Fetch und Checkout und der holt sich dann die ganzen Objekte aus dem GitLab.
52:48
Und dann tat man das, man sagt man soll dann das Artifakt hochladen, der soll für zwei Wochen aufgehoben werden und da soll nur an den Branches oder Tags erfolgen, wo Release drin ist.
53:04
So, das war's, also ich finde GitLab ist ein sehr tolles Produkt, also vielleicht wenn ich ein bisschen gemerkt habe, aber das Produkt hat sich, also die Community ist super, das entwickelt sich sehr schnell.
53:22
Man sieht ja in einer Enterprise Architektur, die bekommen jetzt immer mehr Enterprise Kunden, man sieht so einen Bugs, dass die damit manchmal sehr viel Challenge haben, das in Enterprise Infrastrukturen zu deployen. Was mir persönlich ein bisschen fehlt bei GitLab, dass die Entwickler Ruby on
53:45
Rails entwickeln und auch ein Großteil Beispiele für Ruby on Rails und auch Frontend. Also ich hätte mir gewünscht, dass da auch ein bisschen Systemtools, Golang, Perl oder PHP oder was auch immer,
54:01
da könnt ihr Beitrag leisten, mal Videos machen, wie man eine bestimmte Sache mal schnell in GitLab CI aufsetzt. Und jetzt gibt es Fragen. Ja, Großteils, ich wiederhole nochmal, wir haben verschiedene Bugs gefunden oder wir
54:31
haben verschiedene Bugs getrackt, wie lange dauert bis ein Bug gefixt ist. Großteils schnell, manche Bugs, weiß man ja so, Legacy Sachen oder Architekturänderungen, manchmal so ein Golang, dieses
54:49
Submodules Bug, da ist so ein Rattenschwanz rausgekommen, da haben die angefangen, ist ja hier eine kleine Sache. Und dann nochmal Dependencies, da Golang Version updaten, manchmal dauert, also dieser Bug ist schon länger unterwegs.
55:04
Aber Großteils, so wirklich Kleinigkeiten, die sind sehr schnell, also schneller als man erwarten würde. Ja, da haben wir so ein Workaround, wenn ein Workaround möglich ist. Also mit Submodules haben wir
55:28
kein Workaround gefunden, aber Gott sei Dank haben wir fast keine Repositories, noch keine Repositories mit Submodules.
55:51
Weiß ich nicht. Also die Frage war, ist GitLab ein Versuch, wie Jenkins und Artifactory zu integrieren? Ja und nein, Artifactory kann
56:03
man trotzdem dazu haben, würde ich sogar empfehlen, da sind wir auch dabei, weil Jar-Dateien will man nicht unbedingt als Artifacts, weil Artifactory ist viel mehr. Ich bin mir nicht sicher, ob man mit Artifactory auch Golang und Perl-Module hochladen kann, da bin ich mir nicht sicher.
56:24
Aber das wäre halt Alternative, Artifactory ist glaube ich sehr stark auf Java orientiert. Wir benutzen auch dazu Artifactory, auf jeden Fall. Artifacts im GitLab ist eher so, das ist ein Release, das ist der Bundle dazu. Bitte
56:42
Kunde oder wer auch immer, Product Manager, klickt drauf, schickt dem Kunden das Release und fertig. Du weißt, dass es die Pipelines durchgegangen ist, dass es getestet ist und dass es bestimmte Qualität hat. Wenn man Artifakten baut, die man später in die Projekte inkludieren möchte, so wie Jar-Dateien in Java, dann besser über Artifactory.
57:06
Jenkins ist ein anderes Thema, da gibt es Vorteile, der hat sich wirklich sehr stark verbessert in der letzten Zeit. GitLab ist hinterher ein bisschen meiner Meinung nach, aber es hat meiner Meinung nach ein bisschen frisches Gefühl.
57:26
Da gibt es zwar ein paar Kinderklarankeiten, aber diese Runner-Architektur hat mich fasziniert.
58:00
Wir starten jetzt damit, wir wollen das sehr gerne machen, können gerne Austausch machen. Wir haben auch einen Kunden, der das machen möchte.
58:13
Ich kann noch nicht viel dazu sagen, wir müssen erstmal sogar gucken, was wir als Backend haben, weil ich glaube, GitLab unterstützt nur Kubernetes ganz gut und bei Kubernetes höre ich immer negativen Feedback.
58:29
Das ist auch die Sache, die wir noch evaluieren, vielleicht bis nächstes Jahr. Aber das ist genau die Sache, warum dieser Vortrag, weil es gibt ein 10 Minuten Video von GitLab,
58:43
ich habe hier ein Ruby und Rails Projekt, ich habe hier ein Kubernetes Cluster, ich habe hier ein Template von GitLab CI und dann habe ich direkt die Tests, das Deployment, Auto Scaling und alles in 10 Minuten. Wir haben gesagt, super Sache, probieren wir mal und dann das, dies und dann habe ich mir gedacht, okay,
59:01
wir haben die Arbeit gemacht und das wollen wir der Community weitergeben, damit ihr auch weiß, was euch erwartet. Dass du nicht dein Manager sagst, mit GitLab bin ich in 10 Minuten fertig, da habe ich die Pipeline aufgesetzt. Noch mehr Fragen?
59:22
Eine Frage, meine Erfahrung nach ist es in Companies, die teilweise auch eine eigene PKI haben, gar nicht so schwer, ein eigenes Zertifikat zu kriegen. Was war euer Grund jetzt zu sagen, wir machen das auf einen anderen Weg, weil ich meine, ihr habt jetzt ja auch relativ viel Zeit dabei investiert, das mit einer Self-Science zu machen.
59:48
Du kriegst ein Zertifikat von der CA gesigned, aber der ist von der CA gesigned, von deiner internen CA. Das heißt, wenn du das Zertifikat haben willst, das kannst du ausstellen, können wir hunderte von ausstellen.
01:00:00
Das ist kein Problem, nur du trustest ihn nicht, weil die CA selbst signed ist oder meinst du eine... Ja, normalerweise, die haben halt irgendwie ihr eigenes Zwischenzertifikat, aber natürlich ein globales Sign. Ach so, okay, ja. Dann ist das so ein offiziell nötiges. Das ist aber auch nicht der Fall, dass die... Okay, verstanden.
01:00:21
Ja, das ist ein selbst erstelltes, unter das CA. Ah, okay, das habe ich verstanden. Das ist nicht immer, dass man intern eine CA offiziell signed betreibt, aber macht auch Sinn. Wir haben auch Kunden, die eigene CA betreiben, selbst eigene CA haben, also eigene CA Center.
01:00:44
Da ist es natürlich kein Problem, musst du halt nur drei Wochen warten. Ja? So ein Wildcard-Zertifikat kostet auch nicht die Welt. Das macht dir ja mehr Arbeit, das einzufüllen.
01:01:00
Ja, ja. Das ist halt so ein scheiß Zertifikat kostet. Ja. Ist das 600 Euro, oder was kostet ein Wildcard? Ja, ja. Die Frage war, macht das wirklich Sinn, eine eigene CA zu betreiben, wenn man relativ günstig ein Wildcard-Zertifikat für das interne Netz einfach kaufen kann?
01:01:22
Nein, macht das keinen Sinn. Aber wenn man es schon hat und wenn man beim Kunden als Konsulten unterwegs ist, man sagt ja nicht, nee, du musst erstmal ein CA-Zertifikat kaufen. Natürlich kann man es machen, aber dann wird gesagt, nee, machen wir nicht. Wir machen so und nicht anders. Da muss man mitmachen.
01:01:43
Ja, natürlich macht das Sinn. Deshalb sagte ich ganz am Anfang, wenn ihr die Möglichkeit habt, offizielle Zertifikat, ob es Let's Encrypt, ob es signierte CA, ob es gekauftes Wildcard ist, immer besser.
01:02:03
Dann, ich bedanke mich für die Teilnahme. Die Dateien sind auf GitHub und die Slides lade ich gleich hoch.