Gitlab CI - 公开生成的 docker 容器的 port/service

Gitlab CI - exposing port/service of spawned docker container

我已经设置了 Gitlab 的测试工厂 CI

我是 运行 笨蛋,我应该如何将端口 4000 公开给我的主机 (VM),最好的方法是什么?

kubectl -n gitlab-managed-apps expose deployment <Gitlab Runner> --type=NodePort --port=4000

下面是我的 gitlab-ci.yaml 文件..

image: docker:19.03.13

services:
  - name: docker:18.09.7-dind
    command:
      [
        '--insecure-registry=gitlab.local:32000',
      ]

stages:
  - testing

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_HOST: tcp://localhost:2375
  DOCKER_TLS_CERTDIR: ""
  CI_REGISTRY_IMAGE: img1

before_script:
  - echo "$REG_PASSWORD" | docker -D login "$CI_REGISTRY" -u "$REG_USER" --password-stdin

testing:
  stage: testing
  tags: [docker]
  script:
    - docker pull "gitlab.local:32000/$CI_REGISTRY_IMAGE:latest"
    - docker images
    - hostname
    - docker run --rm -d -p 4000:4000 "gitlab.local:32000/$CI_REGISTRY_IMAGE:latest"
    - netstat -na | grep -w 4000
    - sleep 3600
  only:
    - master

我设法找出使用 k8s 服务公开的问题是什么。是选择器没有明确定义。需要注意的几个要点

  1. 我可以看到该端口正在侦听 pod 中的 IPv6 接口 (::4000)。然而这不是问题

  2. 我在 gitlab 运行器配置的 config.toml 中添加了 podLabels(例如 app:myapp)。这样,runner 生成的每个 pod 都有一个预定义的标签

  3. 在 LB 服务的我的选择器部分使用了标签

希望对大家有用