Gitlab Runner 无法解析 Gitlab 服务器的 DNS

0 kubernetes gitlab-ci-runner kaniko

我面临着一个非常奇怪的问题。

首先我的设置:
我有一个私有的 Gitlab 服务器,它使用 Kubernetes 上的 Gitlab CI Runners 来构建 Docker 镜像。为此,我使用 Kaniko 图像。Runners 由 Gitlab 本身通过内置的 Kubernetes 管理进行配置。所有这些都在 PFSense 服务器后面运行。

现在我的问题是:
有时 Kaniko Pod 无法解析 GitLab 服务器的主机名。这会导致 git pull 失败,从而导致构建失败。我认为失败的几率为 60%,这对我们来说太高了。重试构建几次后,它将运行没有任何问题。

运行 Gitlab CI 的 Kubernetes 集群在 CentOS 7 上设置。SELinux 和 FirewallD 被禁用。所有主机都可以解析 GitLab 服务器。它也与导致问题的特定主机服务器无关。我发现它在所有 5 台服务器(包括 Manager 服务器)上都失败了。而且我还没有看到这个问题出现在其他 Pod 中。但集群中的其他部署实际上并不通过 DNS 进行连接。我确信 Runner 能够访问 DNS,因为它正在从 gcr.io 提取 Kaniko 映像。

有没有人见过这个问题或知道解决方法?

  • 我已经尝试过生成仅向域发送 DNS 请求的 Pod。我没有看到任何失败。
  • 我还尝试重新启动整个集群和 Gitlab 实例。
  • 我尝试在 PFSense 中静态覆盖 DNS 路由。还是同样的问题。

这是我的 CI 配置:

build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - echo $REGISTRY_AUTH > /kaniko/.docker/config.json
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $REGISTRY_URL/$REGISTRY_IMAGE:$CI_JOB_ID
  only:
    - master
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

Initialized empty Git repository in /builds/MYPROJECT/.git/
Fetching changes...
Created fresh repository.
fatal: unable to access 'https://gitlab-ci-token:[MASKED]@git.mydomain.com/MYPROJECT.git/': Could not resolve host: git.mydomain.com
Run Code Online (Sandbox Code Playgroud)

小智 5

几天来我们遇到了同样的问题。我们尝试更改 CoreDNS 配置、将运行器移动到不同的 k8s 集群等。最后今天我检查了我的个人跑步者,发现我使用的是不同的版本。gitlab/gitlab-runner:alpine-v12.3.0当我的时候,集群里的跑步者有gitlab/gitlab-runner:alpine-v12.0.1。我们添加了线

image: gitlab/gitlab-runner:alpine-v12.1.0
Run Code Online (Sandbox Code Playgroud)

values.yaml为我们解决了问题