Kommunizieren Sie zwischen Gitlab und Gitlab Runner, die mit Docker gestartet wurden

Annahme

Ich miete einen virtuellen Server mit Sakura VPS und führe Gitlab auf diesem Server aus. Gitlab wurde mit Docker-Compose unter Bezugnahme auf das offizielle Dokument GitLab Docker-Bilder gestartet. Außerdem gab es ein praktisches Nginx-Proxy-Image für die SSL-Unterstützung. Ich habe versucht, es zu verwenden und habe hart gekämpft, aber der Versuch, direkt vom Nginx-Proxy zum Puma-Server zu fliegen, ohne den internen Nginx zu durchlaufen, hat nicht funktioniert, und derzeit besteht die Form darin, Gitlab alleine zu starten. .. Da es als einzelne Einheit gestartet wird, lesen Sie intern Gitlabs SSL-Konfiguration (Let-Encrypt-Integration). Ich erhalte und erneuere ein SSL-Zertifikat. Alle diese Einstellungen sind so festgelegt, dass sie auf der lokalen Hostseite beibehalten werden können, indem das Volumen von Docker-Compose angegeben wird.

Diesmal geht es nicht um diese Startmethoden, sondern um die Kommunikation zwischen Docker-Containern.

Bedienung von Gitlab Runner

Da ich CI mit dem Betrieb von Gitlab verschieben wollte, entschied ich mich, zusätzlich Gitlab Runnner zu betreiben. Die Grundinstallation erfolgte gemäß dem offiziellen Dokument Run GitLab Runner in einem Container. Da ich ein Anfänger von Docker war, dachte ich, dass die Kommunikation zwischen Containern in Docker im selben Netzwerk stattfinden sollte. Erstellen Sie daher wie gewohnt das Docker-Netzwerk --driver = bridge --subnet = subnet specation --gateway = Ein Netzwerk wurde mit dem angegebenen Netzwerknamen `` des Gateways erstellt, und Gitlab und Gitlab Runner wurden im selben Netzwerk gestartet.

Wenn Sie die Kommunikation zwischen Containern nachschlagen, bedeutet dies wahrscheinlich einen Ping zwischen lokalen Hosts, oder Sie können viele Artikel sehen, in denen steht, dass "Kommunikation möglich ist, wenn Sie sie in dasselbe Docker-Netzwerk stellen". Die nach außen offene HTTP-Kommunikation mit Gitlab wird jedoch von jemandem abgespielt und curl: (7) Verbindung zum gitlab.example.com-Port 443 fehlgeschlagen: Keine Route zum Host und curl Es kam nicht einmal zurück. Es ist peinlich, weil ich für Docker zu neu bin, aber ich konnte diesbezüglich zwischen Containern auf eine Weise kommunizieren, die jeder für selbstverständlich hält. Das möchte ich als Gebot belassen.

Ergänzung In gitlab.example.com ist DNS für die globale IP des Hosts geeignet, und Curl usw. werden problemlos zurückgegeben, es sei denn, es befindet sich zwischen Containern.

Lösung

Infolgedessen schien es aufgrund der Firewall auf der Hostseite abgespielt zu werden. Daher habe ich festgestellt, dass Einstellungen vorgenommen werden müssen, damit die Firewall das im Docker-Netzwerk verwendete Netzwerk passieren kann.

diesmal. Das neu erstellte Docker-Netzwerk gibt "172.31.0.0 / 16" als Subnetz an. Sie können das Netzwerk mit "Docker Network Inspect Network Name" überprüfen.

Aus diesem Grund habe ich eine Firewall-Regel für dieses Subnetz hinzugefügt, da ich dachte, ich sollte das Netzwerk "172.31.0.0 / 16" durchlaufen, aber es hat nicht funktioniert. In diesem Artikel heißt es, dass Sie eine Regel für 172.0.0.0 / 8 hinzufügen sollten (Docker - Keine Route zum Host Ich habe Host gefunden)), und als ich es ehrlich versuchte, konnte ich sicher kommunizieren. Jetzt können Sie zwischen Gitlab und Gitlab Runner kommunizieren und Runner registrieren.

Die Befehle, die Sie drücken, sind unten zusammengefasst. Wenn das Subnetz 192.168 ist. ~~, denke ich, wäre es gut, wenn es diese Firewall durchbrechen könnte. (Ich bin mir nicht sicher)

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=172.0.0.0/8 accept'
sudo firewall-cmd --permanent --zone=public --add-masquerade
sudo firewall-cmd --reload
sudo less /etc/firewalld/zones/public.xml

>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <masquerade/>
  <!--Gut, wenn dies hinzugefügt wird-->
  <rule family="ipv4">
    <source address="172.0.0.0/8"/>
    <accept/>
  </rule>
</zone>

Schließlich

Es tut mir leid für die schmutzigen Sätze, die ich immer noch nicht gewohnt bin, Qiita zu schreiben. Docker ist zu praktisch und ich versuche, einfache Tests mit Docker durchzuführen. Obwohl ich Gitlab Runner verwenden kann, habe ich CI noch nicht studiert, daher möchte ich mich diesem Thema widmen.

Bitte weisen Sie darauf hin, wenn etwas nicht stimmt.

Recommended Posts

Kommunizieren Sie zwischen Gitlab und Gitlab Runner, die mit Docker gestartet wurden
Richten Sie GitLab mit Docker ein
Hallo Welt mit Docker und C Sprache
Microservices mit Docker- und Cloud-Leistung
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
Erleben Sie .NET 5 mit Docker und Visual Studio Code
Erstellen Sie mit Docker ein Jupyter-Notizbuch und führen Sie Ruby aus
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
Greifen Sie mit ssh auf den Circle CI Docker-Container zu und debuggen Sie ihn
(Für mich) Baue ein Git-Labor mit Ubuntu 18.04 + Docker für zu Hause (Hinweis)
Führen Sie Mosquitto mit Docker aus und versuchen Sie die WebSocket-Kommunikation mit MQTT
Docker-Installation und -Initialisierung
Starten Sie MariaDB mit Docker
Explodiere Docker mit WSL2
Verwenden Sie Puphpeteer mit Docker
Bedienen Sie Emby mit Docker
Führen Sie Payara mit Docker aus
Einweg-PHP mit Docker
Überprüfung der Konfigurationsverwaltungsautomatisierung von Netzwerkgeräten mit oxidiertem und Git-Labor
Verwechseln Sie Docker mit Pokemon und erleichtern Sie das Anhängen
Die Zeit ist falsch mit der Anwendung, die auf dem Docker-Container gestartet wurde
Elasticsearch> Mit Docker erstellen, Twitter-Informationen abrufen und mit Kibana visualisieren
Erstellen Sie mit Docker eine Umgebung für Rails5 und postgresql, damit auch pgadmin verwendet werden kann
Java: Starten Sie WAS mit Docker und stellen Sie Ihre eigene Anwendung bereit