使用极狐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 分配的 亲和性规则 |
| annotations | Pod 注释 | |
| common.labels | {} | 应用于此 chart 创建的所有对象的补充标签。 |
| deployment.strategy | {} | 允许配置部署使用的更新策略。当未提供时,使用集群默认值。 |
| extraEnv | 公开的额外环境变量列表 | |
| extraEnvFrom | 来自其他数据源的额外环境变量列表以公开 | |
| hpa.behavior | {scaleDown: {stabilizationWindowSeconds: 300 }} | 行为包含向上和向下扩展行为的规范(需要 autoscaling/v2beta2 或更高版本) |
| hpa.customMetrics | [] | 自定义指标包含用于计算所需副本数的规格(覆盖在 targetAverageUtilization 中配置的默认使用平均 CPU 利用率) |
| hpa.cpu.targetType | AverageValue | 设置自动缩放 CPU 目标类型,必须为 Utilization 或 AverageValue |
| hpa.cpu.targetAverageValue | 100m | 设置自动缩放 CPU 目标值 |
| hpa.cpu.targetAverageUtilization | 设置自动缩放 CPU 目标利用率 | |
| hpa.memory.targetType | 设置自动缩放内存目标类型,必须为 Utilization 或 AverageValue | |
| hpa.memory.targetAverageValue | 设置自动缩放内存目标值 | |
| hpa.memory.targetAverageUtilization | 设置自动缩放内存目标利用率 | |
| hpa.minReplicas | 1 | 最小副本数 |
| hpa.maxReplicas | 10 | 最大副本数 |
| hpa.targetAverageValue | 已弃用 设置自动缩放 CPU 目标值 | |
| image.pullPolicy | IfNotPresent | 极狐GitLab 镜像拉取策略 |
| image.pullSecrets | 镜像仓库的密钥 | |
| image.repository | registry.gitlab.com/gitlab-org/build/cng/gitlab-pages | 极狐GitLab Pages 镜像仓库 |
| image.tag | 镜像标签 | |
| init.image.repository | initContainer 镜像 | |
| init.image.tag | initContainer 镜像标签 | |
| init.containerSecurityContext | initContainer 特定的 安全上下文 | |
| init.containerSecurityContext.allowPrivilegeEscalation | false | initContainer 特定:控制进程是否可以获得比其父进程更多的特权 |
| init.containerSecurityContext.runAsNonRoot | true | initContainer 特定:控制容器是否以非 root 用户身份运行 |
| init.containerSecurityContext.capabilities.drop | [ "ALL" ] | initContainer 特定:移除容器的 Linux 能力 |
| keda.enabled | false | 使用 KEDA ScaledObjects 而不是 HorizontalPodAutoscalers |
| keda.pollingInterval | 30 | 检查每个触发器的间隔 |
| keda.cooldownPeriod | 300 | 在最后一个触发器报告活动后缩放资源回 0 之前等待的时间 |
| keda.minReplicaCount | KEDA 将资源缩放到的最小副本数,默认为 hpa.minReplicas | |
| keda.maxReplicaCount | KEDA 将资源缩放到的最大副本数,默认为 hpa.maxReplicas | |
| keda.fallback | KEDA 回退配置 | |
| keda.hpaName | KEDA 将创建的 HPA 资源的名称,默认为 keda-hpa-{scaled-object-name} | |
| keda.restoreToOriginalReplicaCount | 指定在删除 ScaledObject 之后目标资源是否应缩放回原始副本数 | |
| keda.behavior | 向上和向下扩展行为的规范,默认为 hpa.behavior | |
| keda.triggers | 激活目标资源缩放的触发器列表,默认为从 hpa.cpu 和 hpa.memory 计算的触发器 | |
| metrics.enabled | true | 是否应提供指标端点以供抓取 |
| metrics.port | 9235 | 指标端点端口 |
| metrics.path | /metrics | 指标端点路径 |
| metrics.serviceMonitor.enabled | false | 是否应创建 ServiceMonitor 以启用 Prometheus Operator 管理指标抓取,注意启用此功能会移除 prometheus.io 抓取注释 |
| metrics.serviceMonitor.additionalLabels | {} | 要添加到 ServiceMonitor 的附加标签 |
| metrics.serviceMonitor.endpointConfig | {} | ServiceMonitor 的额外端点配置 |
| metrics.annotations | 已弃用 设置显式指标注释。被模板内容取代。 | |
| metrics.tls.enabled | false | 为指标端点启用 TLS |
| metrics.tls.secretName | {Release.Name}-pages-metrics-tls | 指标端点 TLS 证书和密钥的密钥 |
| priorityClassName | 分配给 pod 的 优先级类。 | |
| podLabels | 补充 Pod 标签。不会用于选择器。 | |
| resources.requests.cpu | 900m | 极狐GitLab Pages 最小 CPU |
| resources.requests.memory | 2G | 极狐GitLab Pages 最小内存 |
| securityContext.fsGroup | 1000 | 启动 pod 时使用的组 ID |
| securityContext.runAsUser | 1000 | 启动 pod 时使用的用户 ID |
| securityContext.fsGroupChangePolicy | 更改卷所有权和权限的策略(需要 Kubernetes 1.23) | |
| securityContext.seccompProfile.type | RuntimeDefault | 使用的 seccomp 配置文件 |
| containerSecurityContext | 覆盖容器的 安全上下文 | |
| containerSecurityContext.runAsUser | 1000 | 允许覆盖启动容器的特定安全上下文用户 ID |
| containerSecurityContext.allowPrivilegeEscalation | false | 控制容器的进程是否可以获得比其父进程更多的特权 |
| containerSecurityContext.runAsNonRoot | true | 控制容器是否以非 root 用户身份运行 |
| containerSecurityContext.capabilities.drop | [ "ALL" ] | 移除 Gitaly 容器的 Linux 能力 |
| service.externalPort | 8090 | 极狐GitLab Pages 暴露端口 |
| service.internalPort | 8090 | 极狐GitLab Pages 内部端口 |
| service.name | gitlab-pages | 极狐GitLab Pages 服务名称 |
| service.annotations | 所有页面服务的注释。 | |
| service.primary.annotations | 仅用于主服务的注释。 | |
| service.metrics.annotations | 仅用于指标服务的注释。 | |
| service.customDomains.annotations | 仅用于自定义域服务的注释。 | |
| service.customDomains.type | LoadBalancer | 为处理自定义域而创建的服务类型 |
| service.customDomains.internalHttpsPort | 8091 | Pages 守护进程监听 HTTPS 请求的端口 |
| service.customDomains.internalHttpsPort | 8091 | Pages 守护进程监听 HTTPS 请求的端口 |
| service.customDomains.nodePort.http | 要打开的 HTTP 连接的节点端口。仅当 service.customDomains.type 为 NodePort 时有效 | |
| service.customDomains.nodePort.https | 要打开的 HTTPS 连接的节点端口。仅当 service.customDomains.type 为 NodePort 时有效 | |
| service.sessionAffinity | None | 会话亲和性的类型。必须是 ClientIP 或 None (这仅对来自集群内部的流量有意义) |
| service.sessionAffinityConfig | 会话亲和性配置。如果 service.sessionAffinity == ClientIP,则默认会话粘性时间为 3 小时(10800) | |
| serviceAccount.annotations | {} | ServiceAccount 注释 |
| serviceAccount.automountServiceAccountToken | false | 指示默认 ServiceAccount 访问令牌是否应挂载在 pod 中 |
| serviceAccount.create | false | 指示是否应创建 ServiceAccount |
| serviceAccount.enabled | false | 指示是否使用 ServiceAccount |
| serviceAccount.name | ServiceAccount 的名称。如果未设置,则使用完整 chart 名称 | |
| serviceLabels | {} | 补充服务标签 |
| tolerations | [] | pod 分配的容忍标签 |
Pages 特定设置
| 参数 | 默认值 | 描述 |
|---|---|---|
| artifactsServerTimeout | 10 | 代理请求到产物服务器的超时时间(以秒为单位) |
| artifactsServerUrl | 代理产物请求的 API URL | |
| extraVolumeMounts | 要添加的额外卷挂载列表 | |
| extraVolumes | 要创建的额外卷列表 | |
| gitlabCache.cleanup | int | 参见:Pages 全局设置 |
| gitlabCache.expiry | int | 参见:Pages 全局设置 |
| gitlabCache.refresh | int | 参见:Pages 全局设置 |
| gitlabClientHttpTimeout | 极狐GitLab API HTTP 客户端连接超时(以秒为单位) | |
| gitlabClientJwtExpiry | JWT 令牌到期时间(以秒为单位) | |
| gitlabRetrieval.interval | int | 参见:Pages 全局设置 |
| gitlabRetrieval.retries | int | 参见:Pages 全局设置 |
| gitlabRetrieval.timeout | int | 参见:Pages 全局设置 |
| gitlabServer | 极狐GitLab 服务器 FQDN | |
| headers | [] | 指定应与每个响应一起发送给客户端的任何其他 http 头。可以将多个头作为数组给出,头和值作为一个字符串,例如 ['my-header: myvalue', 'my-other-header: my-other-value'] |
| insecureCiphers | false | 使用默认的密码套件列表,可能包含不安全的密码如 3DES 和 RC4 |
| internalGitlabServer | 用于 API 请求的内部极狐GitLab 服务器 | |
| logFormat | json | 日志输出格式 |
| logVerbose | false | 详细日志记录 |
| maxConnections | 对 HTTP、HTTPS 或代理监听器的并发连接数限制 | |
| maxURILength | 限制 URI 的长度,0 为无限制。 | |
| propagateCorrelationId | 如果存在,重用来自传入请求头 X-Request-ID 的现有 Correlation-ID | |
| redirectHttp | false | 将页面从 HTTP 重定向到 HTTPS |
| sentry.enabled | false | 启用 Sentry 报告 |
| sentry.dsn | 用于发送 Sentry 崩溃报告的地址 | |
| sentry.environment | Sentry 崩溃报告的环境 | |
| serverShutdowntimeout | 30s | 极狐GitLab Pages 服务器关闭超时(以秒为单位) |
| statusUri | 状态页面的 URL 路径 | |
| tls.minVersion | 指定最小的 SSL/TLS 版本 | |
| tls.maxVersion | 指定最大的 SSL/TLS 版本 | |
| useHTTPProxy | false | 当极狐GitLab Pages 位于反向代理之后时使用此选项。 |
| useProxyV2 | false | 强制 HTTPS 请求使用 PROXYv2 协议。 |
| zipCache.cleanup | int | 参见:Zip 服务和缓存配置 |
| zipCache.expiration | int | 参见:Zip 服务和缓存配置 |
| zipCache.refresh | int | 参见:Zip 服务和缓存配置 |
| zipOpenTimeout | int | 参见:Zip 服务和缓存配置 |
| zipHTTPClientTimeout | int | 参见: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 速率限制 | |
| serverReadTimeout | 5s | 参见:极狐GitLab Pages 全局设置 |
| serverReadHeaderTimeout | 1s | 参见:极狐GitLab Pages 全局设置 |
| serverWriteTimeout | 5m | 参见:极狐GitLab Pages 全局设置 |
| serverKeepAlive | 15s | 参见:极狐GitLab Pages 全局设置 |
| authTimeout | 5s | 参见:极狐GitLab Pages 全局设置 |
| authCookieSessionTimeout | 10m | 参见:极狐GitLab Pages 全局设置 |
配置 ingress
此部分控制极狐GitLab Pages Ingress。
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| apiVersion | 字符串 | 在 apiVersion 字段中使用的值。 | |
| annotations | 字符串 | 此字段与 Kubernetes Ingress 的标准 annotations 完全匹配。 | |
| configureCertmanager | 布尔值 | false | 切换 Ingress 注释 cert-manager.io/issuer 和 acme.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 的示例用法:
yamlextraVolumes: | - name: example-volume persistentVolumeClaim: claimName: example-pvc
extraVolumeMounts
extraVolumeMounts 允许在 chart 范围内的所有容器上配置额外的卷挂载。
以下是 extraVolumeMounts 的示例用法:
yamlextraVolumeMounts: | - 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-system,prometheus 被部署到命名空间 monitoring,nginx-ingress 被部署到命名空间 nginx-ingress。
yaml1networkpolicy: 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,您必须:
-
为您的极狐GitLab Pages 域创建一个专用的通配符证书,格式为: *.pages.<yourdomain>。
-
在 Kubernetes 中创建密钥:
shellkubectl create secret tls tls-star-pages-<mysecret> --cert=<path/to/fullchain.pem> --key=<path/to/privkey.pem> -
配置极狐GitLab Pages 使用此密钥:
yamlgitlab: gitlab-pages: ingress: tls: secretName: tls-star-pages-<mysecret> -
在您的 DNS 提供商中创建一个 DNS 条目,名称为 *.pages.<yourdomaindomain> 指向您的 LoadBalancer。
没有通配符 DNS 的 Pages 域
History
- 在极狐GitLab 17.2 中作为 beta 引入。
- 在极狐GitLab 17.4 中成为 GA。
-
在全局 Pages 设置中启用 namespaceInPath。
yamlglobal: pages: namespaceInPath: true -
在您的 DNS 提供商中创建一个 DNS 条目,名称为 pages.<yourdomaindomain> 指向您的 LoadBalancer。
没有通配符 DNS 的极狐GitLab Pages 域的 TLS 访问
-
为您的极狐GitLab Pages 域创建一个证书,格式为:pages.<yourdomain>。
-
在 Kubernetes 中创建密钥:
shellkubectl create secret tls tls-star-pages-<mysecret> --cert=<path/to/fullchain.pem> --key=<path/to/privkey.pem> -
配置极狐GitLab Pages 使用此密钥:
yamlgitlab: gitlab-pages: ingress: tls: secretName: tls-star-pages-<mysecret>
配置访问控制
-
在全局 pages 设置中启用 accessControl。
yamlglobal: pages: accessControl: true -
可选。如果配置了 TLS 访问,请更新极狐GitLab Pages 系统 OAuth 应用程序 中的重定向 URI 以使用 HTTPS 协议。
速率限制
您可以强制实施速率限制以帮助降低拒绝服务 (DoS) 攻击的风险。详细的 速率限制文档 可用。
要允许某些 IP 范围(子网)绕过所有速率限制:
- rateLimitSubnetsAllowList:设置要绕过所有速率限制的 IP 范围(子网)的允许列表。
配置速率限制子网允许列表
在 charts/gitlab/charts/gitlab-pages/values.yaml 中设置 IP 范围(子网)的允许列表:
yamlgitlab: gitlab-pages: rateLimitSubnetsAllowList: - "1.2.3.4/24" - "2001:db8::1/32"
配置 KEDA
此 keda 部分启用了 KEDA ScaledObjects 的安装,而不是常规的 HorizontalPodAutoscalers。 此配置是可选的,并可用于基于自定义或外部指标的自动缩放。
大多数设置默认为 hpa 部分中设置的值(如适用)。
如果以下条件为真,则根据 hpa 部分中设置的 CPU 和内存阈值自动添加 CPU 和内存触发器:
- 未设置 triggers。
- 相应的 request.cpu.request 或 request.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.cpu 和 hpa.memory 计算的触发器 |
serviceAccount
此部分控制是否应创建 ServiceAccount 以及默认访问令牌是否应挂载在 pod 中。
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| annotations | 映射 | {} | ServiceAccount 注释。 |
| automountServiceAccountToken | 布尔值 | false | 控制默认 ServiceAccount 访问令牌是否应挂载在 pod 中。除非某些 sidecar 需要此功能才能正常工作(例如 Istio),否则不应启用此功能。 |
| create | 布尔值 | false | 指示是否应创建 ServiceAccount。 |
| enabled | 布尔值 | false | 指示是否使用 ServiceAccount。 |
| name | 字符串 | ServiceAccount 的名称。如果未设置,则使用 chart 全名。 |
亲和性
有关更多信息,请参见 affinity。