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

时间:2019-07-16 03:14:12

标签: kubernetes gitlab-ci-runner kaniko

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

首先,我的设置是: 我有一个私人的Gitlab服务器,该服务器在Kubernetes上使用Gitlab CI Runners构建Docker映像。为此,我使用了Kaniko图像。 跑步者由Gitlab本身使用内置的Kubernetes管理进行配置。一切都在PFSense服务器后面运行。

由于我的问题: 有时,Kaniko Pods无法解析GitLab服务器的主机名。 这会导致git pull失败,从而导致构建失败。 我认为失败的机会高达60%,这对我们来说太高了。 重试该构建几次后,它将成功运行。

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

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

  • 我已经尝试过生成仅对域进行DNS请求的Pod。我没有看到任何失败。
  • 我还尝试重新启动整个Cluster和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

发生以下错误:

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

2 个答案:

答案 0 :(得分:2)

几天来我们遇到了同样的问题。我们尝试更改CoreDNS配置,将跑步者移动到不同的k8s集群,依此类推。终于在今天,我检查了我的个人跑步者,发现我使用的是其他版本。集群中的跑步者拥有gitlab/gitlab-runner:alpine-v12.3.0,而我的拥有gitlab/gitlab-runner:alpine-v12.0.1。我们添加了

image: gitlab/gitlab-runner:alpine-v12.1.0

values.yaml中,这为我们解决了问题

答案 1 :(得分:0)

有一个gitlab-runner环境可以解决此问题

- name: RUNNER_PRE_CLONE_SCRIPT
  value: "exec command before git fetch ..."

例如: 编辑/etc/hosts

echo '127.0.0.1 git.demo.xxxx' >> /etc/hosts

或编辑/etc/resolv.conf

echo 'nameserver 8.8.8.8' > /etc/resolv.conf

希望它对您有用