【问题标题】:Gitlab-runner with podman can't run containers inside properly带有 podman 的 Gitlab-runner 无法在内部正确运行容器
【发布时间】:2022-06-23 15:39:14
【问题描述】:

问题描述:

你好, 我们有一个 pod YAML 文件,其中包含我们容器的规格、它们的设置等。如果我们使用命令“podman play kube pod.yaml”在本地运行这个 pod,它会成功启动,并且我们的应用程序会运行。但是如果我们在 GitLab-runner(podman 作为执行器)中运行这个命令,就会出现一些网络问题。

Gitlab 运行器版本:14.9.2(CI 运行器)、15.0.0(本地 GitLab 运行器)

问题描述以及在 GitLab-runner 与 localhost 中运行容器之间的差异。

  1. 我们无法从 GitLab-runner 中的容器访问外部网络(无法安装任何包等)。 Gitlab-runner 容器本身可以访问外网。
  2. 如果我尝试在 GitLab-runner 中访问 POD_NAME:8080/,它会说连接被拒绝。如果我尝试从 localhost 访问 POD_NAME:8080/ 并直接从主机运行应用程序容器,它会说连接也被拒绝。
  3. 如果我尝试从主机访问 localhost:8080,它会加载页面。如果我尝试从 runner 访问 localhost:8080,它会显示“No route to host”。
  4. 我们使用“--privileged”和“--network=host”标志运行 gitlab-runner 命令。此外,在我们的 pod 中,我们使用 'networkHost: true' 和 'privileged: true'。
  5. 来自 GitLab-runner 和 localhost 的容器具有不同的 /etc/hosts 文件:

从 localhost 启动的容器:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.88.0.113 cqe dd88a3440675-infra
127.0.1.1 cqe cqe-dispatcher
127.0.1.1 cqe cqe-umbsender
127.0.1.1 cqe cqe-frontend
127.0.1.1 cqe cqe-db
127.0.1.1 cqe cqe-umbreader

容器从 runner 开始:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.88.0.117 runner--project-0-concurrent-0 runner--project-0-concurrent-0-d244dbca3614d5aa-build-2
10.88.0.2   cqe 4a46f7216e30-infra
10.88.0.1 host.containers.internal
10.88.0.117 host.containers.internal

我们的 pod 文件(我只保留了网络信息并删除了环境变量等):

apiVersion: v1
kind: Pod
metadata:
  labels:
  name: cqe
spec:
  hostNetwork: true
  privileged: true
  restartPolicy: Always

  containers:
    - name: db
    - name: frontend
      securityContext:
        runAsUser: 5000
        runAsGroup: 5000
      ports:
        - containerPort: 8080
          hostPort: 8080
          protocol: TCP
    - name: dispatcher
      securityContext:
        runAsUser: 5000
        runAsGroup: 5000
    - name: umbreader
      workingDir: /clusterqe-django
      securityContext:
        runAsUser: 5000
        runAsGroup: 5000
    - name: umbsender
      workingDir: /clusterqe-django
      securityContext:
        runAsUser: 5000
        runAsGroup: 5000

  1. 容器可以通过所有端口相互访问。例如,我可以通过“curl POD_NAME:3306”从前端访问 db。这也适用于 GitLab-runner 的容器。

我认为问题可能与我们在容器中拆箱的事实有关。但是尽管使用了所有不同的标志和设置,我们很长时间都无法解决这个问题。我很乐意添加更多信息和复制步骤。

如果我要描述我不理解的主要问题:

  1. gitlab-runner 中的容器无法访问外部网络。
  2. 无论是在运行器中还是在 localhost 上运行,我都无法访问 pod 名称及其暴露的端口。
  3. 如果我在运行器内或在本地主机上,/etc/hosts 和其他网络设置的差异。

【问题讨论】:

    标签: gitlab gitlab-ci-runner podman


    【解决方案1】:

    请检查 See GitLab 15.1(2022 年 6 月)是否有帮助,考虑到 podman 在那里得到官方支持。

    GitLab 跑步者 15.1

    我们今天还将发布 GitLab Runner 15.1!
    GitLab Runner 是轻量级、高度可扩展的代理,可运行 CI/CD 作业并将结果发送回 GitLab 实例。
    GitLab Runner 与 GitLab CI/CD 结合使用,这是 GitLab 中包含的开源持续集成服务。

    新功能:

    错误修复:

    Documentation

    【讨论】:

      猜你喜欢
      • 2022-12-12
      • 2021-11-07
      • 2020-11-13
      • 2021-09-17
      • 2019-09-25
      • 2021-01-09
      • 2021-04-28
      • 1970-01-01
      • 2023-01-24
      相关资源
      最近更新 更多