安装适用于 Kubernetes 的极狐GitLab 代理服务器(KAS)

  • 引入于 13.10 版本。
  • 从专业版移动到免费版于 14.5 版本。

代理服务器是与极狐GitLab 一起安装的组件,对于管理 Kubernetes 的极狐GitLab 代理是必需的。

KAS 作为首字母缩略词,指的是以前的名称,Kubernetes agent server

如果您使用私有化部署版极狐GitLab,则必须安装代理服务器或指定外部安装。

安装选项

作为极狐GitLab 管理员,您可以安装代理服务器:

或者,您可以使用外部代理服务器

Omnibus 安装实例

您可以为单个节点或多个节点上的 Omnibus 包安装启用代理服务器。

在单个节点上启用

在单个节点上启用代理服务器:

  1. 编辑 /etc/gitlab/gitlab.rb

    gitlab_kas['enable'] = true
    
  2. 重新配置极狐GitLab

有关其它配置选项,请参阅 gitlab.rb.templateEnable GitLab KAS 部分。

在多个节点上启用

在多个节点上启用代理服务器:

  1. 对于每个代理服务器节点,编辑 /etc/gitlab/gitlab.rb

    gitlab_kas['enable'] = true
    gitlab_kas['api_secret_key'] = '<32_bytes_long_base64_encoded_value>'
    gitlab_kas['private_api_secret_key'] = '<32_bytes_long_base64_encoded_value>'
    gitlab_kas['private_api_listen_address'] = '0.0.0.0:8155'
    gitlab_kas['env'] = {
      'SSL_CERT_DIR' => "/opt/gitlab/embedded/ssl/certs/",
      'OWN_PRIVATE_API_URL' => 'grpc://<ip_or_hostname_of_this_host>:8155'
    }
    

    在此配置中:

    • gitlab_kas['private_api_listen_address'] 是代理服务器监听的地址。您可以将其设置为 0.0.0.0 或集群中其他节点可访问的 IP 地址。
    • OWN_PRIVATE_API_URL 是 KAS 进程用于服务发现的环境变量。您可以将其设置为正在配置的节点的主机名或 IP 地址。集群中的其他节点必须可以访问该节点。
    • gitlab_kas['api_secret_key'] 是用于 KAS 和极狐GitLab 之间身份验证的共享密钥。此值必须采用 Base64 编码且长度正好为 32 个字节。
    • gitlab_kas['private_api_secret_key'] 是用于不同 KAS 实例之间身份验证的共享密钥。此值必须采用 Base64 编码且长度正好为 32 个字节。
  2. 对于每个应用程序节点,请按照以下步骤操作:使用外部安装
  3. 重新配置极狐GitLab

Helm Chart 安装实例

对于 Helm Chart 安装实例:

  1. global.kas.enabled 设置为 true。例如,在安装了 helmkubectl 的 shell 中,运行:

    helm repo add gitlab-jh https://charts.gitlab.cn
    helm repo update
    helm upgrade --install gitlab gitlab-jh/gitlab \
      --timeout 600s \
      --set global.hosts.domain=<YOUR_DOMAIN> \
      --set global.hosts.externalIP=<YOUR_IP> \
      --set certmanager-issuer.email=<YOUR_EMAIL> \
      --set global.kas.enabled=true # <-- without this setting, the agent server will not be installed
    
  2. 要配置代理服务器,请使用 values.yaml 文件中的 gitlab.kas 子部分:

    gitlab:
      kas:
        # put your custom options here
    

有关详细信息,请参阅如何使用 KAS chart

使用外部安装

引入于 13.10 版本。

您可以将极狐GitLab 配置为使用外部代理服务器,而不是安装代理服务器。

如果您使用极狐GitLab Helm Chart 安装,请参阅如何配置您的外部代理服务器

如果您使用了 Omnibus 包:

  1. 编辑 /etc/gitlab/gitlab.rb 并添加外部代理服务器的路径:

    gitlab_kas['enable'] = false
    gitlab_kas['api_secret_key'] = 'Your shared secret between GitLab and KAS'
    
    gitlab_rails['gitlab_kas_enabled'] = true
    gitlab_rails['gitlab_kas_external_url'] = 'wss://kas.gitlab.example.com' # User-facing URL for the in-cluster agentk
    gitlab_rails['gitlab_kas_internal_url'] = 'grpc://kas.internal.gitlab.example.com' # Internal URL for the GitLab backend
    
  2. 重新配置极狐GitLab

故障排除

如果您在使用 Kubernetes 代理服务器时遇到问题,请运行以下命令查看服务日志:

kubectl logs -f -l=app=kas -n <YOUR-GITLAB-NAMESPACE>

在 Omnibus GitLab 中,在 /var/log/gitlab/gitlab-kas/ 中找到日志。

GitOps: failed to get project information

如果您收到以下错误消息:

{"level":"warn","time":"2020-10-30T08:37:26.123Z","msg":"GitOps: failed to get project info","agent_id":4,"project_id":"root/kas-manifest001","error":"error kind: 0; status: 404"}

Manifest (root/kas-manifest001) 指定的项目不存在,或者 manifest 所在的项目是私有的。要解决此问题,请确保项目路径正确且项目的可见性为设置为公开

未找到配置文件

如果您收到以下错误消息:

time="2020-10-29T04:44:14Z" level=warning msg="Config: failed to fetch" agent_id=2 error="configuration file not found: \".gitlab/agents/test-agent/config.yaml\

路径不正确:

  • 代理注册的仓库。
  • 代理配置文件。

要解决此问题,请确保路径正确。

dial tcp <GITLAB_INTERNAL_IP>:443: connect: connection refused

如果您正在私有化部署极狐GitLab 实例,并且:

  • 实例未在 SSL 终止代理后面运行。
  • 该实例没有在极狐GitLab 实例本身上配置 HTTPS。
  • 实例的主机名在本地解析为其内部 IP 地址。

当代理服务器尝试连接极狐GitLab API 时,可能会出现以下错误:

{"level":"error","time":"2021-08-16T14:56:47.289Z","msg":"GetAgentInfo()","correlation_id":"01FD7QE35RXXXX8R47WZFBAXTN","grpc_service":"gitlab.agent.reverse_tunnel.rpc.ReverseTunnel","grpc_method":"Connect","error":"Get \"https://gitlab.example.com/api/v4/internal/kubernetes/agent_info\": dial tcp 172.17.0.4:443: connect: connection refused"}

要为 Omnibus 软件包安装解决此问题,请在 /etc/gitlab/gitlab.rb 中设置以下参数。将 gitlab.example.com 替换为您的极狐GitLab 实例的主机名:

gitlab_kas['gitlab_address'] = 'http://gitlab.example.com'