Communiquer entre Gitlab et Gitlab Runner lancé avec Docker

supposition

Je loue un serveur virtuel avec Sakura VPS et j'exécute Gitlab sur ce serveur. Gitlab a été lancé avec docker-compose en se référant au document officiel GitLab Docker images. En outre, il y avait une image nginx-proxy pratique pour le support SSL. J'ai essayé de l'utiliser et je me suis battu dur, mais essayer de voler directement de nginx-proxy au serveur puma sans passer par le nginx interne n'a pas fonctionné, et actuellement c'est sous la forme d'un démarrage avec Gitlab seul. .. Puisqu'il est lancé par lui-même, référez-vous à Configuration SSL de Gitlab (let-encrypt-integration) en interne. J'obtiens et je renouvelle un certificat SSL. Tous ces éléments sont définis de manière à pouvoir être conservés du côté de l'hôte local en spécifiant le volume de docker-compose.

Cette fois, il ne s'agit pas de ces méthodes de démarrage, mais de la communication entre les conteneurs Docker.

Fonctionnement de Gitlab Runner

Puisque je voulais déplacer CI avec l'exploitation de Gitlab, j'ai décidé d'exploiter en plus Gitlab Runnner. L'installation de base a été faite selon le document officiel Run GitLab Runner in a container. Comme j'étais un débutant de Docker, je pensais que la communication entre les conteneurs devait être sur le même réseau dans Docker, donc comme d'habitude, docker network create --driver = bridge --subnet = subnet specification --gateway = Un réseau a été créé avec le nom de réseau spécifié de la passerelle, et Gitlab et Gitlab Runner ont été lancés sur le même réseau.

Si vous recherchez la communication entre les conteneurs, cela signifie probablement un ping entre les hôtes locaux, et je vois de nombreux articles qui disent: "Vous pouvez communiquer si vous les mettez dans le même réseau Docker." Cependant, la communication Http avec Gitlab qui est ouverte vers l'extérieur est jouée par quelqu'un et `` curl: (7) Impossible de se connecter au port 443 de gitlab.example.com: Pas de route vers l'hôte '' et curl Il n'est même pas revenu. C'est embarrassant parce que je suis trop nouveau dans Docker, mais j'ai pu communiquer entre les conteneurs à cet égard d'une manière que tout le monde pourrait prendre pour acquise. Je voudrais laisser cela comme un commandement.

Supplément Dans gitlab.example.com, DNS convient à l'adresse IP globale de l'hôte, et Curl etc. sont renvoyés sans difficulté à moins que ce ne soit entre les conteneurs.

Solution

En conséquence, il semblait être joué en raison du pare-feu côté hôte. Par conséquent, j'ai trouvé qu'il était nécessaire de faire des réglages pour que le pare-feu puisse passer par le réseau utilisé dans le réseau Docker.

cette fois. Le réseau Docker nouvellement créé spécifie 172.31.0.0 / 16 '' comme sous-réseau. Vous pouvez vérifier le réseau avec docker network inspect network name ''.

Par conséquent, j'ai ajouté une règle de pare-feu pour ce sous-réseau, pensant que je devrais passer par le réseau de 172.31.0.0 / 16 '', mais cela n'a pas fonctionné. Voici un article disant que vous devez ajouter une règle pour 172.0.0.0 / 8 '' (Docker --No route to host J'ai trouvé l'hôte)), donc quand je l'ai essayé honnêtement, j'ai pu communiquer en toute sécurité. Vous pouvez maintenant communiquer entre Gitlab et Gitlab Runner, et vous pouvez enregistrer Runner.

Les commandes que vous appuyez sont résumées ci-dessous. Si le sous-réseau est 192.168. ~~, je pense que ce serait bien s'il pouvait percer ce pare-feu. (Je ne suis pas sûr)

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/>
  <!--Bon si cela est ajouté-->
  <rule family="ipv4">
    <source address="172.0.0.0/8"/>
    <accept/>
  </rule>
</zone>

finalement

Je suis désolé pour les phrases sales que je n'ai toujours pas l'habitude d'écrire Qiita. Docker est trop pratique et j'essaye de faire des tests simples avec Docker. Bien que je puisse utiliser Gitlab Runner, je n'ai toujours pas étudié l'IC, donc j'aimerais m'y consacrer.

Veuillez indiquer si quelque chose ne va pas.

Recommended Posts

Communiquer entre Gitlab et Gitlab Runner lancé avec Docker
Configurer GitLab avec docker
Hello World avec Docker et langage C
Microservices avec Docker et Cloud Performance
Construction de Rails 6 et environnement PostgreSQL avec Docker
Découvrez .NET 5 avec Docker et Visual Studio Code
Créez un notebook Jupyter avec Docker et exécutez ruby
Préparer un environnement de scraping avec Docker et Java
Accéder et déboguer le conteneur Docker Circle CI avec ssh
(Pour moi-même) Construisez un laboratoire git avec ubuntu 18.04 + docker pour la maison (Remarque)
Exécutez Mosquitto avec Docker et essayez la communication WebSocket avec MQTT
Installation et initialisation de Docker
Lancez MariaDB avec Docker
Exploser Docker avec WSL2
Utiliser Puphpeteer avec Docker
Exploitez Emby avec Docker
Exécutez Payara avec Docker
PHP jetable avec Docker
Vérification de l'automatisation de la gestion de la configuration des équipements réseau avec oxydé et git lab
Rendre Docker déroutant avec Pokemon et le rendre plus facile à attacher
L'heure ne va pas avec l'application lancée sur le conteneur Docker
Elasticsearch> Construisez avec docker, obtenez des informations Twitter et visualisez avec Kibana
Créez un environnement pour Rails5 et postgresql avec Docker afin que pgadmin puisse également être utilisé
Java: démarrez WAS avec Docker et déployez votre propre application