使用 NGINX

我们提供完整的 NGINX 部署用作 Ingress Controller。并非所有 Kubernetes 提供商都原生支持 NGINX Ingress 以确保兼容性。

note 与极狐GitLab Helm Chart 捆绑的 NGINX Ingress Helm Chart 版本已更新以支持 Kubernetes 1.22。因此,极狐GitLab Helm Chart 无法再支持 Kubernetes 1.19 之前的版本。
note 只能有一个 global.hosts.domain 值。

配置 NGINX

查看 NGINX chart 文档,获取有关配置的详细信息。

全局设置

我们的 chart 之间共享一些通用的全局设置。请查看 全局配置文档 了解常见的配置项,例如 GitLab 和 Registry 组件服务器的主机名。

使用全局设置配置主机

GitLab 和 Registry 组件服务器的主机名可以使用全局配置

极狐GitLab Geo

第二个 NGINX 子图针对极狐GitLab Geo 流量进行了捆绑和预配置,它支持与默认控制器相同的设置。可以使用 nginx-ingress-geo.enabled=true 启用控制器。

该控制器配置为不修改任何传入的 X-Forwarded-* 标头。 如果您想使用不同的 Geo 流量提供商,请确保执行相同的操作。

默认控制器值(nginx-ingress-geo.controller.ingressClassResource.controllerValue)设置为 k8s.io/nginx-ingress-geo,IngressClass 名称设置为 {ReleaseName}-nginx-geo 以避免干扰使用默认控制器。 IngressClass 名称可以使用 global.geo.ingressClass 覆盖。

仅主要 Geo 站点需要自定义标头来处理从次要站点转发的流量。如果站点即将升级为主要站点,则仅需要在次要站点上使用。

请注意,在故障转移期间更改 IngressClass 将导致另一个控制器处理传入流量。由于另一个控制器分配了不同的负载均衡器 IP,因此可能需要对 DNS 配置进行其他更改。

要避免这种情况,您可以通过在所有 Geo 站点上启用 Geo Ingress 控制器并配置默认和额外的 webservice Ingress 以使用关联的 IngressClass (useGeoClass=true)。

Annotation 值词块列表

引入于极狐GitLab Helm chart 6.6。

在集群操作员需要更好地控制生成的 NGINX 配置的情况下,NGINX Ingress 允许配置片段,插入标准注释和 ConfigMap 条目未解决的原始 NGINX 配置的“片段”。

这些配置片段的缺点是它允许集群操作员部署包含 LUA 脚本和类似配置的 Ingress 对象,这些配置可能会危及极狐GitLab 安装和集群本身的安全性,包括暴露服务账户令牌和 secret。

请参阅 CVE-2021-25742此上游 ingress-nginx 问题来获取更多详细信息。

为了规避极狐GitLab 的 Helm chart 部署中的 CVE-2021-25742 - 我们使用 nginx-ingress 社区的建议,设置 annotation-value-word-blocklist

如果您在极狐GitLab Ingress 配置中使用配置片段,或者将极狐GitLab NGINX Ingress Controller 与使用配置片段的第三方 Ingress 对象一起使用,则在尝试访问极狐GitLab 第三方域名时可能会遇到 404 错误,以及 nginx-controller 日志中的 “invalid word” 错误。在这种情况下,请检查并调整您的 nginx-ingress.controller.config.annotation-value-word-blocklist 设置。