使用外部 NGINX Ingress Controller 配置极狐GitLab chart

此 chart 使用了 NGINX Ingress 配置了Ingress 资源。 NGINX Ingress Controller 作为此 chart 的一部分进行部署。如果您想重用集群中已经可用的现有 NGINX Ingress Controller,本指南将有所帮助。

外部 Ingress Controller 中的 TCP 服务

GitLab Shell 组件需要 TCP 流量通过端口 22(默认情况下,可以更改)。Ingress 不直接支持 TCP 服务,所以需要一些额外的配置。您的 NGINX Ingress Controller 可能已直接部署或通过官方 Helm chart 部署。TCP 直通的配置将根据部署方法而有所不同。

直接部署

在直接部署中,NGINX Ingress Controller 使用 ConfigMap 处理配置 TCP 服务(参见相关文档)。

假设你的 GitLab chart 被部署到命名空间 gitlab,并且您的 Helm 版本被命名为 mygitlab,您的 ConfigMap 示例如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-configmap-example
data:
  22: "gitlab/mygitlab-gitlab-shell:22"

拥有该 ConfigMap 后,您可以使用 --tcp-services-configmap 选项按照 NGINX Ingress Controller 文档中的描述启用它。

args:
  - /nginx-ingress-controller
  - --tcp-services-configmap=gitlab/tcp-configmap-example

最后确保 NGINX Ingress Controller 的 Service 除了 80 和 443 外,还暴露了端口 22。

Helm 部署

如果您通过 Helm chart 已经安装或将安装 NGINX Ingress Controller,那么您需要通过命令行向 chart 添加一个值:

--set tcp.22="gitlab/mygitlab-gitlab-shell:22"

或使用 values.yaml 文件:

tcp:
  22: "gitlab/mygitlab-gitlab-shell:22"

值的格式与上面“直接部署”部分中的描述相同。

自定义 GitLab Ingress 选项

NGINX Ingress Controller 使用 annotation 来标记哪个 Ingress Controller 将为特定的 Ingress 提供服务(参见相关文档)。 您可以使用 global.ingress.class 设置,配置用于此 chart 的 Ingress 类。确保在您的 Helm 选项中设置它。

--set global.ingress.class=myingressclass

虽然不一定需要,但如果您使用外部 Ingress Controller,您可能希望禁用默认情况下使用此 chart 部署的 Ingress Controller:

--set nginx-ingress.enabled=false

自定义证书管理

TLS 选项的完整范围记录在相关文档

如果您使用外部 Ingress Controller,您也可能使用外部 cert-manager 实例,或以其它一些自定义方式管理您的证书。您可以查看关于 TLS 选项的完整文档,以下是需要设置 cert-manager chart,并使得 GitLab 组件 chart 不要查找内置证书资源的两个值:

--set certmanager.install=false
--set global.ingress.configureCertmanager=false