我面临一个非常奇怪的问题。
首先我的设置:
我有一个私有 Gitlab 服务器,它使用 Kubernetes 上的 Gitlab CI Runners 来构建 Docker 映像。为此,我使用 Kaniko Image。Runners 由 Gitlab 自己提供,并带有内置的 Kubernetes 管理。所有这些都在 PFSense 服务器后面运行。
现在我的问题是:
有时 Kaniko Pod 无法解析 GitLab 服务器的主机名。这会导致 git pull 失败,从而导致构建失败。我认为失败的几率是 60%,这对我们来说太高了。重试几次构建后,它将运行没有任何问题。
运行 Gitlab CI 的 Kubernetes 集群是在 CentOS 7 上设置的。SELinux 和 FirewallD 被禁用。所有主机都可以解析 GitLab 服务器。它也与导致问题的特定主机服务器无关。我已经看到它在包括 Manager Server 在内的所有 5 台服务器上都失败了。另外我还没有看到这个问题出现在其他 Pod 中。但是集群中的其他部署并没有真正通过 DNS 进行连接。我确信 Runner 完全可以访问 DNS,因为它正在从 gcr.io 中提取 Kaniko Image。
有没有人见过这个问题或知道解决方法?
- 我已经尝试过生成只对域进行 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
发生以下错误:
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