【发布时间】: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 中运行容器之间的差异。
- 我们无法从 GitLab-runner 中的容器访问外部网络(无法安装任何包等)。 Gitlab-runner 容器本身可以访问外网。
- 如果我尝试在 GitLab-runner 中访问 POD_NAME:8080/,它会说连接被拒绝。如果我尝试从 localhost 访问 POD_NAME:8080/ 并直接从主机运行应用程序容器,它会说连接也被拒绝。
- 如果我尝试从主机访问 localhost:8080,它会加载页面。如果我尝试从 runner 访问 localhost:8080,它会显示“No route to host”。
- 我们使用“--privileged”和“--network=host”标志运行 gitlab-runner 命令。此外,在我们的 pod 中,我们使用 'networkHost: true' 和 'privileged: true'。
- 来自 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
- 容器可以通过所有端口相互访问。例如,我可以通过“curl POD_NAME:3306”从前端访问 db。这也适用于 GitLab-runner 的容器。
我认为问题可能与我们在容器中拆箱的事实有关。但是尽管使用了所有不同的标志和设置,我们很长时间都无法解决这个问题。我很乐意添加更多信息和复制步骤。
如果我要描述我不理解的主要问题:
- gitlab-runner 中的容器无法访问外部网络。
- 无论是在运行器中还是在 localhost 上运行,我都无法访问 pod 名称及其暴露的端口。
- 如果我在运行器内或在本地主机上,/etc/hosts 和其他网络设置的差异。
【问题讨论】:
标签: gitlab gitlab-ci-runner podman