使用极狐GitLab Pages chart

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: 私有化部署

gitlab-pages 子 chart 提供了一个守护进程,用于从极狐GitLab 项目中提供静态网站服务。

要求#

此 chart 依赖于 Workhorse 服务的访问权限,可以是完整极狐GitLab chart 的一部分,也可以是从该 chart 部署到的 Kubernetes 集群可访问的外部服务。

配置#

gitlab-pages chart 按如下方式配置:全局设置chart 设置

全局设置#

我们在 chart 之间共享一些通用的全局设置。详情请参见 Globals 文档

chart 设置#

以下两节中的表格包含了所有可以通过 --set 标志提供给 helm install 命令的 chart 配置。

常规设置#

参数默认值描述
affinity{}Pod 分配的 亲和性规则
annotationsPod 注释
common.labels{}应用于此 chart 创建的所有对象的补充标签。
deployment.strategy{}允许配置部署使用的更新策略。当未提供时,使用集群默认值。
extraEnv公开的额外环境变量列表
extraEnvFrom来自其他数据源的额外环境变量列表以公开
hpa.behavior{scaleDown: {stabilizationWindowSeconds: 300 }}行为包含向上和向下扩展行为的规范(需要 autoscaling/v2beta2 或更高版本)
hpa.customMetrics[]自定义指标包含用于计算所需副本数的规格(覆盖在 targetAverageUtilization 中配置的默认使用平均 CPU 利用率)
hpa.cpu.targetTypeAverageValue设置自动缩放 CPU 目标类型,必须为 UtilizationAverageValue
hpa.cpu.targetAverageValue100m设置自动缩放 CPU 目标值
hpa.cpu.targetAverageUtilization设置自动缩放 CPU 目标利用率
hpa.memory.targetType设置自动缩放内存目标类型,必须为 UtilizationAverageValue
hpa.memory.targetAverageValue设置自动缩放内存目标值
hpa.memory.targetAverageUtilization设置自动缩放内存目标利用率
hpa.minReplicas1最小副本数
hpa.maxReplicas10最大副本数
hpa.targetAverageValue已弃用 设置自动缩放 CPU 目标值
image.pullPolicyIfNotPresent极狐GitLab 镜像拉取策略
image.pullSecrets镜像仓库的密钥
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-pages极狐GitLab Pages 镜像仓库
image.tag镜像标签
init.image.repositoryinitContainer 镜像
init.image.taginitContainer 镜像标签
init.containerSecurityContextinitContainer 特定的 安全上下文
init.containerSecurityContext.allowPrivilegeEscalationfalseinitContainer 特定:控制进程是否可以获得比其父进程更多的特权
init.containerSecurityContext.runAsNonRoottrueinitContainer 特定:控制容器是否以非 root 用户身份运行
init.containerSecurityContext.capabilities.drop[ "ALL" ]initContainer 特定:移除容器的 Linux 能力
keda.enabledfalse使用 KEDA ScaledObjects 而不是 HorizontalPodAutoscalers
keda.pollingInterval30检查每个触发器的间隔
keda.cooldownPeriod300在最后一个触发器报告活动后缩放资源回 0 之前等待的时间
keda.minReplicaCountKEDA 将资源缩放到的最小副本数,默认为 hpa.minReplicas
keda.maxReplicaCountKEDA 将资源缩放到的最大副本数,默认为 hpa.maxReplicas
keda.fallbackKEDA 回退配置
keda.hpaNameKEDA 将创建的 HPA 资源的名称,默认为 keda-hpa-{scaled-object-name}
keda.restoreToOriginalReplicaCount指定在删除 ScaledObject 之后目标资源是否应缩放回原始副本数
keda.behavior向上和向下扩展行为的规范,默认为 hpa.behavior
keda.triggers激活目标资源缩放的触发器列表,默认为从 hpa.cpuhpa.memory 计算的触发器
metrics.enabledtrue是否应提供指标端点以供抓取
metrics.port9235指标端点端口
metrics.path/metrics指标端点路径
metrics.serviceMonitor.enabledfalse是否应创建 ServiceMonitor 以启用 Prometheus Operator 管理指标抓取,注意启用此功能会移除 prometheus.io 抓取注释
metrics.serviceMonitor.additionalLabels{}要添加到 ServiceMonitor 的附加标签
metrics.serviceMonitor.endpointConfig{}ServiceMonitor 的额外端点配置
metrics.annotations已弃用 设置显式指标注释。被模板内容取代。
metrics.tls.enabledfalse为指标端点启用 TLS
metrics.tls.secretName{Release.Name}-pages-metrics-tls指标端点 TLS 证书和密钥的密钥
priorityClassName分配给 pod 的 优先级类
podLabels补充 Pod 标签。不会用于选择器。
resources.requests.cpu900m极狐GitLab Pages 最小 CPU
resources.requests.memory2G极狐GitLab Pages 最小内存
securityContext.fsGroup1000启动 pod 时使用的组 ID
securityContext.runAsUser1000启动 pod 时使用的用户 ID
securityContext.fsGroupChangePolicy更改卷所有权和权限的策略(需要 Kubernetes 1.23)
securityContext.seccompProfile.typeRuntimeDefault使用的 seccomp 配置文件
containerSecurityContext覆盖容器的 安全上下文
containerSecurityContext.runAsUser1000允许覆盖启动容器的特定安全上下文用户 ID
containerSecurityContext.allowPrivilegeEscalationfalse控制容器的进程是否可以获得比其父进程更多的特权
containerSecurityContext.runAsNonRoottrue控制容器是否以非 root 用户身份运行
containerSecurityContext.capabilities.drop[ "ALL" ]移除 Gitaly 容器的 Linux 能力
service.externalPort8090极狐GitLab Pages 暴露端口
service.internalPort8090极狐GitLab Pages 内部端口
service.namegitlab-pages极狐GitLab Pages 服务名称
service.annotations所有页面服务的注释。
service.primary.annotations仅用于主服务的注释。
service.metrics.annotations仅用于指标服务的注释。
service.customDomains.annotations仅用于自定义域服务的注释。
service.customDomains.typeLoadBalancer为处理自定义域而创建的服务类型
service.customDomains.internalHttpsPort8091Pages 守护进程监听 HTTPS 请求的端口
service.customDomains.internalHttpsPort8091Pages 守护进程监听 HTTPS 请求的端口
service.customDomains.nodePort.http要打开的 HTTP 连接的节点端口。仅当 service.customDomains.typeNodePort 时有效
service.customDomains.nodePort.https要打开的 HTTPS 连接的节点端口。仅当 service.customDomains.typeNodePort 时有效
service.sessionAffinityNone会话亲和性的类型。必须是 ClientIPNone (这仅对来自集群内部的流量有意义)
service.sessionAffinityConfig会话亲和性配置。如果 service.sessionAffinity == ClientIP,则默认会话粘性时间为 3 小时(10800)
serviceAccount.annotations{}ServiceAccount 注释
serviceAccount.automountServiceAccountTokenfalse指示默认 ServiceAccount 访问令牌是否应挂载在 pod 中
serviceAccount.createfalse指示是否应创建 ServiceAccount
serviceAccount.enabledfalse指示是否使用 ServiceAccount
serviceAccount.nameServiceAccount 的名称。如果未设置,则使用完整 chart 名称
serviceLabels{}补充服务标签
tolerations[]pod 分配的容忍标签

Pages 特定设置#

参数默认值描述
artifactsServerTimeout10代理请求到产物服务器的超时时间(以秒为单位)
artifactsServerUrl代理产物请求的 API URL
extraVolumeMounts要添加的额外卷挂载列表
extraVolumes要创建的额外卷列表
gitlabCache.cleanupint参见:Pages 全局设置
gitlabCache.expiryint参见:Pages 全局设置
gitlabCache.refreshint参见:Pages 全局设置
gitlabClientHttpTimeout极狐GitLab API HTTP 客户端连接超时(以秒为单位)
gitlabClientJwtExpiryJWT 令牌到期时间(以秒为单位)
gitlabRetrieval.intervalint参见:Pages 全局设置
gitlabRetrieval.retriesint参见:Pages 全局设置
gitlabRetrieval.timeoutint参见:Pages 全局设置
gitlabServer极狐GitLab 服务器 FQDN
headers[]指定应与每个响应一起发送给客户端的任何其他 http 头。可以将多个头作为数组给出,头和值作为一个字符串,例如 ['my-header: myvalue', 'my-other-header: my-other-value']
insecureCiphersfalse使用默认的密码套件列表,可能包含不安全的密码如 3DES 和 RC4
internalGitlabServer用于 API 请求的内部极狐GitLab 服务器
logFormatjson日志输出格式
logVerbosefalse详细日志记录
maxConnections对 HTTP、HTTPS 或代理监听器的并发连接数限制
maxURILength限制 URI 的长度,0 为无限制。
propagateCorrelationId如果存在,重用来自传入请求头 X-Request-ID 的现有 Correlation-ID
redirectHttpfalse将页面从 HTTP 重定向到 HTTPS
sentry.enabledfalse启用 Sentry 报告
sentry.dsn用于发送 Sentry 崩溃报告的地址
sentry.environmentSentry 崩溃报告的环境
serverShutdowntimeout30s极狐GitLab Pages 服务器关闭超时(以秒为单位)
statusUri状态页面的 URL 路径
tls.minVersion指定最小的 SSL/TLS 版本
tls.maxVersion指定最大的 SSL/TLS 版本
useHTTPProxyfalse当极狐GitLab Pages 位于反向代理之后时使用此选项。
useProxyV2false强制 HTTPS 请求使用 PROXYv2 协议。
zipCache.cleanupint参见:Zip 服务和缓存配置
zipCache.expirationint参见:Zip 服务和缓存配置
zipCache.refreshint参见:Zip 服务和缓存配置
zipOpenTimeoutint参见:Zip 服务和缓存配置
zipHTTPClientTimeoutint参见:Zip 服务和缓存配置
rateLimitSourceIP参见:极狐GitLab Pages 速率限制
rateLimitSourceIPBurst参见:极狐GitLab Pages 速率限制
rateLimitDomain参见:极狐GitLab Pages 速率限制
rateLimitDomainBurst参见:极狐GitLab Pages 速率限制
rateLimitTLSSourceIP参见:极狐GitLab Pages 速率限制
rateLimitTLSSourceIPBurst参见:极狐GitLab Pages 速率限制
rateLimitTLSDomain参见:极狐GitLab Pages 速率限制
rateLimitTLSDomainBurst参见:极狐GitLab Pages 速率限制
rateLimitSubnetsAllowList参见:极狐GitLab Pages 速率限制
serverReadTimeout5s参见:极狐GitLab Pages 全局设置
serverReadHeaderTimeout1s参见:极狐GitLab Pages 全局设置
serverWriteTimeout5m参见:极狐GitLab Pages 全局设置
serverKeepAlive15s参见:极狐GitLab Pages 全局设置
authTimeout5s参见:极狐GitLab Pages 全局设置
authCookieSessionTimeout10m参见:极狐GitLab Pages 全局设置

配置 ingress#

此部分控制极狐GitLab Pages Ingress。

名称类型默认值描述
apiVersion字符串apiVersion 字段中使用的值。
annotations字符串此字段与 Kubernetes Ingress 的标准 annotations 完全匹配。
configureCertmanager布尔值false切换 Ingress 注释 cert-manager.io/issueracme.cert-manager.io/http01-edit-in-place。极狐GitLab Pages 通过 cert-manager 获取 TLS 证书已禁用,因为获取通配符证书需要具有 DNS01 solver 的 cert-manager Issuer,而此 chart 部署的 Issuer 仅提供 HTTP01 solver。有关更多信息,请参阅 极狐GitLab Pages 的 TLS 要求
enabled布尔值控制是否为支持它们的服务创建 Ingress 对象的设置。如果未设置,则使用 global.ingress.enabled 设置。
tls.enabled布尔值如果设置为 false,则禁用 Pages 子 chart 的 TLS。这主要用于无法在 ingress-level 使用 TLS 终止的情况,例如在 Ingress 控制器之前有一个 TLS 终止代理时。
tls.secretName字符串包含页面 URL 有效证书和密钥的 Kubernetes TLS Secret 的名称。如果未设置,则使用 global.ingress.tls.secretName。默认未设置。

chart 配置示例#

extraVolumes#

extraVolumes 允许配置 chart 范围内的额外卷。

以下是 extraVolumes 的示例用法:

yaml
extraVolumes: | - name: example-volume persistentVolumeClaim: claimName: example-pvc

extraVolumeMounts#

extraVolumeMounts 允许在 chart 范围内的所有容器上配置额外的卷挂载。

以下是 extraVolumeMounts 的示例用法:

yaml
extraVolumeMounts: | - name: example-volume mountPath: /etc/example

配置 networkpolicy#

此部分控制 NetworkPolicy。 此配置是可选的,用于限制 Pods 的出入流量到特定端点。

名称类型默认值描述
enabled布尔值false此设置启用 NetworkPolicy
ingress.enabled布尔值false如果设置为 true,将激活 Ingress 网络策略。这将阻止所有 Ingress 连接,除非指定了规则。
ingress.rules数组[]Ingress 策略的规则,详情请参见 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 和下面的示例
egress.enabled布尔值false如果设置为 true,将激活 Egress 网络策略。这将阻止所有 egress 连接,除非指定了规则。
egress.rules数组[]egress 策略的规则,详情请参见 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 和下面的示例

网络策略示例#

gitlab-pages 服务需要端口 80 和 443 的 Ingress 连接以及到默认 workhorse 端口 8181 的 egress 连接。此示例添加以下网络策略:

  • 允许 Ingress 请求:
    • nginx-ingress pod 到端口 8090
    • prometheus pod 到端口 9235
  • 允许 egress 请求:
    • kube-dns 的端口 53
    • webservice pod 的端口 8181
    • 到端点如 AWS VPC 端点 S3 172.16.1.0/24 的端口 443

请注意,提供的示例仅为示例,可能不完整

该示例基于以下假设:kube-dns 被部署到命名空间 kube-systemprometheus 被部署到命名空间 monitoringnginx-ingress 被部署到命名空间 nginx-ingress

yaml
1networkpolicy: 2 enabled: true 3 ingress: 4 enabled: true 5 rules: 6 - from: 7 - namespaceSelector: 8 matchLabels: 9 kubernetes.io/metadata.name: monitoring 10 podSelector: 11 matchLabels: 12 app: prometheus 13 component: server 14 release: gitlab 15 ports: 16 - port: 9235 17 - from: 18 - namespaceSelector: 19 matchLabels: 20 kubernetes.io/metadata.name: nginx-ingress 21 podSelector: 22 matchLabels: 23 app: nginx-ingress 24 component: controller 25 ports: 26 - port: 8090 27 egress: 28 enabled: true 29 rules: 30 - to: 31 - namespaceSelector: 32 matchLabels: 33 kubernetes.io/metadata.name: kube-system 34 podSelector: 35 matchLabels: 36 k8s-app: kube-dns 37 ports: 38 - port: 53 39 protocol: UDP 40 - to: 41 - ipBlock: 42 cidr: 172.16.1.0/24 43 ports: 44 - port: 443 45 - to: 46 - podSelector: 47 matchLabels: 48 app: webservice 49 ports: 50 - port: 8181

极狐GitLab Pages 的 TLS 访问#

要访问极狐GitLab Pages 功能的 TLS,您必须:

  1. 为您的极狐GitLab Pages 域创建一个专用的通配符证书,格式为: *.pages.<yourdomain>

  2. 在 Kubernetes 中创建密钥:

    shell
    kubectl create secret tls tls-star-pages-<mysecret> --cert=<path/to/fullchain.pem> --key=<path/to/privkey.pem>
  3. 配置极狐GitLab Pages 使用此密钥:

    yaml
    gitlab: gitlab-pages: ingress: tls: secretName: tls-star-pages-<mysecret>
  4. 在您的 DNS 提供商中创建一个 DNS 条目,名称为 *.pages.<yourdomaindomain> 指向您的 LoadBalancer。

没有通配符 DNS 的 Pages 域#

History
    • 在极狐GitLab 17.2 中作为 beta 引入。
    • 在极狐GitLab 17.4 中成为 GA。
极狐GitLab Pages 一次仅支持一种 URL 方案:要么具有通配符 DNS,要么不具有通配符 DNS。如果您启用 `namespaceInPath`,现有的极狐GitLab Pages 网站仅在没有通配符 DNS 的域上可访问。
  1. 在全局 Pages 设置中启用 namespaceInPath

    yaml
    global: pages: namespaceInPath: true
  2. 在您的 DNS 提供商中创建一个 DNS 条目,名称为 pages.<yourdomaindomain> 指向您的 LoadBalancer。

没有通配符 DNS 的极狐GitLab Pages 域的 TLS 访问#

  1. 为您的极狐GitLab Pages 域创建一个证书,格式为:pages.<yourdomain>

  2. 在 Kubernetes 中创建密钥:

    shell
    kubectl create secret tls tls-star-pages-<mysecret> --cert=<path/to/fullchain.pem> --key=<path/to/privkey.pem>
  3. 配置极狐GitLab Pages 使用此密钥:

    yaml
    gitlab: gitlab-pages: ingress: tls: secretName: tls-star-pages-<mysecret>

配置访问控制#

  1. 在全局 pages 设置中启用 accessControl

    yaml
    global: pages: accessControl: true
  2. 可选。如果配置了 TLS 访问,请更新极狐GitLab Pages 系统 OAuth 应用程序 中的重定向 URI 以使用 HTTPS 协议。

极狐GitLab Pages 不会更新 OAuth 应用程序,并且默认 `authRedirectUri` 更新为 `https://pages./projects/auth`。在访问私人 Pages 站点时,如果遇到错误 "The redirect URI included is not valid",请在极狐GitLab Pages [系统 OAuth 应用程序](https://gitlab.cn/docs/jh/integration/oauth_provider/#create-an-instance-wide-application) 中将重定向 URI 更新为 `https://pages./projects/auth`。

速率限制#

您可以强制实施速率限制以帮助降低拒绝服务 (DoS) 攻击的风险。详细的 速率限制文档 可用。

要允许某些 IP 范围(子网)绕过所有速率限制:

  • rateLimitSubnetsAllowList:设置要绕过所有速率限制的 IP 范围(子网)的允许列表。

配置速率限制子网允许列表#

charts/gitlab/charts/gitlab-pages/values.yaml 中设置 IP 范围(子网)的允许列表:

yaml
gitlab: gitlab-pages: rateLimitSubnetsAllowList: - "1.2.3.4/24" - "2001:db8::1/32"

配置 KEDA#

keda 部分启用了 KEDA ScaledObjects 的安装,而不是常规的 HorizontalPodAutoscalers。 此配置是可选的,并可用于基于自定义或外部指标的自动缩放。

大多数设置默认为 hpa 部分中设置的值(如适用)。

如果以下条件为真,则根据 hpa 部分中设置的 CPU 和内存阈值自动添加 CPU 和内存触发器:

  • 未设置 triggers
  • 相应的 request.cpu.requestrequest.memory.request 设置也设置为非零值。

如果未设置触发器,则不会创建 ScaledObject

名称类型默认值描述
enabled布尔值false使用 KEDA ScaledObjects 而不是 HorizontalPodAutoscalers
pollingInterval整数30检查每个触发器的间隔
cooldownPeriod整数300在最后一个触发器报告活动后缩放资源回 0 之前等待的时间
minReplicaCount整数KEDA 将资源缩放到的最小副本数,默认为 hpa.minReplicas
maxReplicaCount整数KEDA 将资源缩放到的最大副本数,默认为 hpa.maxReplicas
fallback映射KEDA 回退配置,请参见 文档
hpaName字符串KEDA 将创建的 HPA 资源的名称,默认为 keda-hpa-{scaled-object-name}
restoreToOriginalReplicaCount布尔值指定在删除 ScaledObject 之后目标资源是否应缩放回原始副本数
behavior映射向上和向下扩展行为的规范,默认为 hpa.behavior
triggers数组激活目标资源缩放的触发器列表,默认为从 hpa.cpuhpa.memory 计算的触发器

serviceAccount#

此部分控制是否应创建 ServiceAccount 以及默认访问令牌是否应挂载在 pod 中。

名称类型默认值描述
annotations映射{}ServiceAccount 注释。
automountServiceAccountToken布尔值false控制默认 ServiceAccount 访问令牌是否应挂载在 pod 中。除非某些 sidecar 需要此功能才能正常工作(例如 Istio),否则不应启用此功能。
create布尔值false指示是否应创建 ServiceAccount。
enabled布尔值false指示是否使用 ServiceAccount。
name字符串ServiceAccount 的名称。如果未设置,则使用 chart 全名。

亲和性#

有关更多信息,请参见 affinity