使用 GitLab chart 配置极狐GitLab Geo
极狐GitLab Geo 支持在地理上分布式的应用部署。
虽然可以使用外部数据库服务,但本文档重点介绍使用 Linux 软件包 中的 PostgreSQL,以提供最不依赖特定平台的指南,并利用 gitlab-ctl 中包含的自动化功能。
在本指南中,两个集群具有相同的外部 URL。自 7.3 版本起,chart 支持此功能。请参阅 为 Geo 站点设置统一 URL。您也可以选择为辅助站点配置单独的 URL。
有关已知问题,请参阅 Geo 文档。
请参阅 定义术语 以了解 Geo 的各个方面(主要是 site 和 node 之间的区别)。
要求
要将极狐GitLab Geo 与 GitLab Helm chart 一起使用,必须满足以下要求:
- 使用 外部 PostgreSQL 服务,因为 chart 附带的 PostgreSQL 不对外部网络开放,并且不具备复制所需的 WAL 支持。
- 提供的数据库必须:
- 支持复制。
- 主数据库必须能被主站点以及所有辅助数据库节点(用于复制)访问。
- 辅助数据库只需能被辅助站点访问。
- 支持主数据库节点和辅助数据库节点之间的 SSL。
- 所有辅助站点必须能通过 HTTP(S) 访问主站点。主站点也必须能通过 HTTP(S) 访问辅助站点。
- 有关完整的要求列表,请参阅 运行 Geo 的要求。
概述
本指南使用通过 Linux 软件包创建的 2 个数据库节点,仅配置所需的 PostgreSQL 服务,以及 2 个 GitLab Helm chart 部署。这旨在作为 最小 必需配置。本文档不包括从应用到数据库的 SSL、对其他数据库提供商的支持,或将辅助站点提升为主站点。
应按以下顺序进行操作:
- 设置 Linux 软件包数据库节点
- 设置 Kubernetes 集群
- 收集信息
- 配置主数据库
- 将 chart 部署为 Geo 主站点
- 设置 Geo 主站点
- 配置辅助数据库
- 将密钥从主站点复制到辅助站点
- 将 chart 部署为 Geo 辅助站点
- 通过主站点添加辅助 Geo 站点
- 确认运行状态
- 为辅助站点配置单独的 URL(可选)
- 容器镜像仓库
- Cert-manager 和统一 URL
设置 Linux 软件包数据库节点
此过程需要两个节点。一个是主数据库节点,另一个是辅助数据库节点。您可以使用任何机器基础设施提供商,无论是本地部署还是云提供商。
请注意,需要以下通信:
- 两个数据库节点之间用于复制。
- 每个数据库节点与其各自的 Kubernetes 部署之间:
- 主节点需要暴露 TCP 端口 5432。
- 辅助节点需要暴露 TCP 端口 5432 和 5431。
安装 Linux 软件包支持的操作系统,然后在其上安装 Linux 软件包。安装时不要提供 EXTERNAL_URL 环境变量,因为我们将在重新配置软件包之前提供一个最小的配置文件。
安装操作系统和极狐GitLab 软件包后,可以为将要使用的服务创建配置。在此之前,必须收集信息。
设置 Kubernetes 集群
此过程应使用两个 Kubernetes 集群。这些集群可以来自任何提供商,无论是本地部署还是云提供商。
请注意,需要以下通信:
- 到各自的数据库节点:
- 主集群出站到 TCP 5432。
- 辅助集群出站到 TCP 5432 和 5431。
- 两个 Kubernetes Ingress 之间通过 HTTPS。
每个配置的集群都应具备:
- 足够的资源来支持这些 chart 的基本安装。
- 访问持久存储的权限,除非使用 外部 Gitaly。
收集信息
要继续配置,需要从各种来源收集以下信息。请收集这些信息,并做好记录,以便在本文档的其余部分使用。
- 主数据库:
- IP 地址
- 主机名(可选)
- 辅助数据库:
- IP 地址
- 主机名(可选)
- 主集群:
- 外部 URL
- 内部 URL
- 节点 IP 地址
- 辅助集群:
- 内部 URL
- 节点 IP 地址
- 数据库密码(必须预先确定密码):
- gitlab(用于 postgresql['sql_user_password']、global.psql.password)
- gitlab_geo(用于 geo_postgresql['sql_user_password']、global.geo.psql.password)
- gitlab_replicator(复制所需)
- 您的极狐GitLab 许可证文件
每个集群的内部 URL 必须是该集群独有的,以便所有集群都能向其他所有集群发出请求。例如:
- 所有集群的外部 URL:https://gitlab.example.com
- 主集群的内部 URL:https://london.gitlab.example.com
- 辅助集群的内部 URL:https://shanghai.gitlab.example.com
本指南不涉及 DNS 设置。
gitlab 和 gitlab_geo 数据库用户密码必须以两种形式存在:明文密码和 PostgreSQL 哈希密码。要获取哈希形式,请在其中一个 Linux 软件包安装实例上执行以下命令,该命令会要求您输入并确认密码,然后输出一个合适的哈希值供您记录。
- gitlab-ctl pg-password-md5 gitlab
- gitlab-ctl pg-password-md5 gitlab_geo
配置主数据库
本节在主 Linux 软件包安装数据库节点上执行。
要配置主数据库节点的 Linux 软件包安装,请参考以下示例配置:
ruby1### Geo Primary 2external_url 'http://gitlab.example.com' 3roles ['geo_primary_role'] 4# The unique identifier for the Geo node. 5gitlab_rails['geo_node_name'] = 'London Office' 6# Allow cross-site origins for ActionCable requests. 7gitlab_rails['action_cable_allowed_origins'] = ['https://gitlab.example.com'] 8gitlab_rails['auto_migrate'] = false 9## turn off everything but the DB 10sidekiq['enable']=false 11puma['enable']=false 12gitlab_workhorse['enable']=false 13nginx['enable']=false 14geo_logcursor['enable']=false 15gitaly['enable']=false 16redis['enable']=false 17gitlab_kas['enable']=false 18prometheus_monitoring['enable'] = false 19## Configure the DB for network 20postgresql['enable'] = true 21postgresql['listen_address'] = '0.0.0.0' 22postgresql['sql_user_password'] = 'gitlab_user_password_hash' 23# !! CAUTION !! 24# This list of CIDR addresses should be customized 25# - primary application deployment 26# - secondary database node(s) 27postgresql['md5_auth_cidr_addresses'] = ['0.0.0.0/0']
我们必须替换几个项目:
- external_url 必须更新以反映我们主站点的主机名。
- gitlab_rails['geo_node_name'] 必须替换为您的站点的唯一名称。请参阅 通用设置 中的“名称”字段。
- gitlab_rails['action_cable_allowed_origins'] 必须替换为一个数组,其中包含所有集群的外部 URL:主集群和辅助集群,或者如果它们具有相同的外部 URL,则使用它们的统一 URL。
- gitlab_user_password_hash 必须替换为 gitlab 密码的哈希形式。
- postgresql['md5_auth_cidr_addresses'] 可以更新为显式 IP 地址列表,或 CIDR 表示法的地址块。
md5_auth_cidr_addresses 应采用 [ '127.0.0.1/24', '10.41.0.0/16'] 的形式。在此列表中包含 127.0.0.1 非常重要,因为 Linux 软件包中的自动化功能会使用此地址进行连接。此列表中的地址应包括您的辅助数据库的 IP 地址(不是主机名),以及您的主 Kubernetes 集群的所有节点。这_可以_保留为 ['0.0.0.0/0'],但是_这不是最佳实践_。
准备上述配置后:
-
将内容放入 /etc/gitlab/gitlab.rb
-
运行 gitlab-ctl reconfigure。如果您遇到服务未在 TCP 上监听的问题,请尝试使用 gitlab-ctl restart postgresql 直接重启它。
-
运行 gitlab-ctl set-replication-password 为 gitlab_replicator 用户设置密码。
-
获取主数据库节点的公共证书,辅助数据库需要此证书才能进行复制(保存此输出):
shellcat ~gitlab-psql/data/server.crt
将 chart 部署为 Geo 主站点
本节在主站点的 Kubernetes 集群上执行。
要将此 chart 部署为 Geo 主站点,请从此示例配置开始:
-
创建一个包含数据库密码的密钥,供 chart 使用。将下面的 PASSWORD 替换为 gitlab 数据库用户的密码:
shellkubectl --namespace gitlab create secret generic geo --from-literal=postgresql-password=PASSWORD -
基于 示例配置 创建 primary.yaml 文件,并更新配置以反映正确的值:
yaml1### Geo Primary 2global: 3 # See docs.gitlab.com/charts/charts/globals 4 # Configure host & domain 5 hosts: 6 domain: example.com 7 # optionally configure a static IP for the default LoadBalancer 8 # externalIP: 9 # optionally configure a static IP for the Geo LoadBalancer 10 # externalGeoIP: 11 # configure DB connection 12 psql: 13 host: geo-1.db.example.com 14 port: 5432 15 password: 16 secret: geo 17 key: postgresql-password 18 # configure geo (primary) 19 geo: 20 nodeName: London Office 21 enabled: true 22 role: primary- global.hosts.domain
- global.psql.host
- global.geo.nodeName 必须与 管理区域中 Geo 站点的“名称”字段 匹配
- 另外,配置任何其他设置,例如:
- 配置 SSL/TLS
- Redis 配置
- 对象存储 配置
-
将必要的 Ingress 或 Gateway API 配置添加到您的 primary.yaml 中。
配置一个额外的 NGINX 控制器和一个额外的 webservice Ingress,用于内部(站点间)Geo 流量:
yaml1# Configure Geo Nginx Controller for internal Geo site traffic 2nginx-ingress-geo: 3 enabled: true 4gitlab: 5 webservice: 6 # Use the Geo NGINX controller. 7 ingress: 8 useGeoClass: true 9 # Configure an Ingress for internal Geo traffic 10 extraIngress: 11 enabled: true 12 hostname: gitlab.london.example.com 13 useGeoClass: true
除了基于 NGINX Ingress 的方法,您还可以通过配置 Gateway API 和捆绑的 Envoy Gateway 来暴露 Geo。
启用 Gateway API 后,为内部 Geo 流量配置主机名:
yamlglobal: geo: gatewayApi: additionalHostname: gitlab.london.example.com
-
使用此配置部署 chart:
shellhelm upgrade --install gitlab-geo gitlab/gitlab --namespace gitlab -f primary.yaml这假设您使用gitlab 命名空间。如果您想使用不同的命名空间, 您还应该在本文档的其余部分中替换 --namespace gitlab。
-
等待部署完成,应用程序上线。当应用程序可访问时,登录。
-
登录极狐GitLab,并激活您的极狐GitLab 订阅。 此步骤是 Geo 正常运行所必需的。
设置 Geo 主站点
现在 chart 已部署,并且许可证已上传,我们可以将其配置为主站点。我们将通过 Toolbox Pod 执行此操作。
-
找到 Toolbox Pod
shellkubectl --namespace gitlab get pods -lapp=toolbox -
使用 kubectl exec 运行 gitlab-rake gitlab:geo:set_primary_node:
shellkubectl --namespace gitlab exec -ti gitlab-geo-toolbox-XXX -- gitlab-rake gitlab:geo:set_primary_node -
使用 Rails runner 命令设置主站点的内部 URL。将 https://primary.gitlab.example.com 替换为实际的内部 URL:
shellkubectl --namespace gitlab exec -ti gitlab-geo-toolbox-XXX -- gitlab-rails runner "GeoNode.primary_node.update!(internal_url: 'https://primary.gitlab.example.com')" -
检查 Geo 配置的状态:
shellkubectl --namespace gitlab exec -ti gitlab-geo-toolbox-XXX -- gitlab-rake gitlab:geo:check您应该会看到类似于下面的输出:
plaintext1WARNING: This version of GitLab depends on gitlab-shell 10.2.0, but you're running Unknown. Please update gitlab-shell. 2Checking Geo ... 3 4GitLab Geo is available ... yes 5GitLab Geo is enabled ... yes 6GitLab Geo secondary database is correctly configured ... not a secondary node 7Database replication enabled? ... not a secondary node 8Database replication working? ... not a secondary node 9GitLab Geo HTTP(S) connectivity ... not a secondary node 10HTTP/HTTPS repository cloning is enabled ... yes 11Machine clock is synchronized ... Exception: getaddrinfo: Servname not supported for ai_socktype 12Git user has default SSH configuration? ... yes 13OpenSSH configured to use AuthorizedKeysCommand ... no 14 Reason: 15 Cannot find OpenSSH configuration file at: /assets/sshd_config 16 Try fixing it: 17 If you are not using our official docker containers, 18 make sure you have OpenSSH server installed and configured correctly on this system 19 For more information see: 20 doc/administration/operations/fast_ssh_key_lookup.md 21GitLab configured to disable writing to authorized_keys file ... yes 22GitLab configured to store new projects in hashed storage? ... yes 23All projects are in hashed storage? ... yes 24 25Checking Geo ... Finished- 不用担心 Exception: getaddrinfo: Servname not supported for ai_socktype,因为 Kubernetes 容器无法访问主机时钟。这是正常的。
- OpenSSH configured to use AuthorizedKeysCommand ... no 是预期的。此 Rake 任务正在检查本地 SSH 服务器,该服务器实际上存在于 gitlab-shell chart 中,部署在其他位置,并且已经配置妥当。
配置辅助数据库
本节在辅助 Linux 软件包安装数据库节点上执行。
要配置辅助数据库节点的 Linux 软件包安装,请参考以下示例配置:
ruby1### Geo Secondary 2# external_url must match the Primary cluster's external_url 3external_url 'http://gitlab.example.com' 4roles ['geo_secondary_role'] 5gitlab_rails['enable'] = true 6# The unique identifier for the Geo node. 7gitlab_rails['geo_node_name'] = 'Shanghai Office' 8gitlab_rails['auto_migrate'] = false 9geo_secondary['auto_migrate'] = false 10## turn off everything but the DB 11sidekiq['enable']=false 12puma['enable']=false 13gitlab_workhorse['enable']=false 14nginx['enable']=false 15geo_logcursor['enable']=false 16gitaly['enable']=false 17redis['enable']=false 18prometheus_monitoring['enable'] = false 19gitlab_kas['enable']=false 20## Configure the DBs for network 21postgresql['enable'] = true 22postgresql['listen_address'] = '0.0.0.0' 23postgresql['sql_user_password'] = 'gitlab_user_password_hash' 24# !! CAUTION !! 25# This list of CIDR addresses should be customized 26# - secondary application deployment 27# - secondary database node(s) 28postgresql['md5_auth_cidr_addresses'] = ['0.0.0.0/0'] 29geo_postgresql['listen_address'] = '0.0.0.0' 30geo_postgresql['sql_user_password'] = 'gitlab_geo_user_password_hash' 31# !! CAUTION !! 32# This list of CIDR addresses should be customized 33# - secondary application deployment 34# - secondary database node(s) 35geo_postgresql['md5_auth_cidr_addresses'] = ['0.0.0.0/0'] 36gitlab_rails['db_password']='gitlab_user_password'
我们必须替换几个项目:
- gitlab_rails['geo_node_name'] 必须替换为您的站点的唯一名称。请参阅 通用设置 中的“名称”字段。
- gitlab_user_password_hash 必须替换为 gitlab 密码的哈希形式。
- postgresql['md5_auth_cidr_addresses'] 应更新为显式 IP 地址列表,或 CIDR 表示法的地址块。
- gitlab_geo_user_password_hash 必须替换为 gitlab_geo 密码的哈希形式。
- geo_postgresql['md5_auth_cidr_addresses'] 应更新为显式 IP 地址列表,或 CIDR 表示法的地址块。
- gitlab_user_password 必须更新,此处用于让 Linux 软件包自动化 PostgreSQL 配置。
md5_auth_cidr_addresses 应采用 [ '127.0.0.1/24', '10.41.0.0/16'] 的形式。在此列表中包含 127.0.0.1 非常重要,因为 Linux 软件包中的自动化功能会使用此地址进行连接。此列表中的地址应包括您的辅助 Kubernetes 集群的所有节点的 IP 地址。这_可以_保留为 ['0.0.0.0/0'],但是_这不是最佳实践_。
准备上述配置后:
-
检查到主站点 PostgreSQL 节点的 TCP 连接:
shellopenssl s_client -connect <primary_node_ip>:5432 </dev/null输出应显示以下内容:
plaintextCONNECTED(00000003) write:errno=0如果此步骤失败,您可能使用了错误的 IP 地址,或者防火墙可能阻止了对服务器的访问。请检查 IP 地址,特别注意公共地址和私有地址之间的区别,并确保如果存在防火墙,辅助 PostgreSQL 节点被允许通过 TCP 端口 5432 连接到主 PostgreSQL 节点。
-
将内容放入 /etc/gitlab/gitlab.rb
-
运行 gitlab-ctl reconfigure。如果您遇到服务未在 TCP 上监听的问题,请尝试使用 gitlab-ctl restart postgresql 直接重启它。
-
将上面的主 PostgreSQL 节点证书内容放入 primary.crt
-
在辅助 PostgreSQL 节点上设置 PostgreSQL TLS 验证:
安装 primary.crt 文件:
shell1install \ 2 -D \ 3 -o gitlab-psql \ 4 -g gitlab-psql \ 5 -m 0400 \ 6 -T primary.crt ~gitlab-psql/.postgresql/root.crtPostgreSQL 现在在验证 TLS 连接时只会识别该确切证书。该证书只能由有权访问私钥的人复制,而私钥仅存在于主 PostgreSQL 节点上。
-
测试 gitlab-psql 用户是否可以连接到主站点的 PostgreSQL(默认的 Linux 软件包数据库名称是 gitlabhq_production):
shell1sudo \ 2 -u gitlab-psql /opt/gitlab/embedded/bin/psql \ 3 --list \ 4 -U gitlab_replicator \ 5 -d "dbname=gitlabhq_production sslmode=verify-ca" \ 6 -W \ 7 -h <primary_database_node_ip>出现提示时,输入之前为 gitlab_replicator 用户收集的密码。如果一切正常,您应该会看到主 PostgreSQL 节点的数据库列表。
此处连接失败表示 TLS 配置不正确。请确保主 PostgreSQL 节点上的 ~gitlab-psql/data/server.crt 的内容与辅助 PostgreSQL 节点上的 ~gitlab-psql/.postgresql/root.crt 的内容匹配。
-
复制数据库。将 PRIMARY_DATABASE_HOST 替换为您的主 PostgreSQL 节点的 IP 或主机名:
shellgitlab-ctl replicate-geo-database --slot-name=geo_2 --host=PRIMARY_DATABASE_HOST --sslmode=verify-ca -
复制完成后,我们必须最后重新配置一次 Linux 软件包,以确保 pg_hba.conf 对于辅助 PostgreSQL 节点是正确的:
shellgitlab-ctl reconfigure
将密钥从主站点复制到辅助站点
现在,将几个密钥从主站点的 Kubernetes 部署复制到辅助站点的 Kubernetes 部署:
- gitlab-geo-gitlab-shell-host-keys
- gitlab-geo-rails-secret
- gitlab-geo-registry-secret,如果启用了容器镜像仓库复制。
-
将您的 kubectl 上下文切换到主站点。
-
从主部署中收集这些密钥:
shellkubectl get --namespace gitlab -o yaml secret gitlab-geo-gitlab-shell-host-keys > ssh-host-keys.yaml kubectl get --namespace gitlab -o yaml secret gitlab-geo-rails-secret > rails-secrets.yaml kubectl get --namespace gitlab -o yaml secret gitlab-geo-registry-secret > registry-secrets.yaml -
将您的 kubectl 上下文切换到辅助站点。
-
应用这些密钥:
shellkubectl --namespace gitlab apply -f ssh-host-keys.yaml kubectl --namespace gitlab apply -f rails-secrets.yaml kubectl --namespace gitlab apply -f registry-secrets.yaml
接下来,创建一个包含数据库密码的密钥。将下面的密码替换为适当的值:
shellkubectl --namespace gitlab create secret generic geo \ --from-literal=postgresql-password=gitlab_user_password \ --from-literal=geo-postgresql-password=gitlab_geo_user_password
将 chart 部署为 Geo 辅助站点
本节在辅助站点的 Kubernetes 集群上执行。
要将此 chart 部署为 Geo 辅助站点,请从此示例配置开始。
-
基于 示例配置 创建 secondary.yaml 文件,并更新配置以反映正确的值:
yaml1## Geo Secondary 2global: 3 # See docs.gitlab.com/charts/charts/globals 4 # Configure host & domain 5 hosts: 6 domain: shanghai.example.com 7 # use a unified URL (same external URL as the primary site) 8 gitlab: 9 name: gitlab.example.com 10 # configure DB connection 11 psql: 12 host: geo-2.db.example.com 13 port: 5432 14 password: 15 secret: geo 16 key: postgresql-password 17 # configure geo (secondary) 18 geo: 19 enabled: true 20 role: secondary 21 nodeName: Shanghai Office 22 psql: 23 host: geo-2.db.example.com 24 port: 5431 25 password: 26 secret: geo 27 key: geo-postgresql-password- global.hosts.domain
- global.psql.host
- global.geo.psql.host
- global.geo.nodeName 必须与 管理区域中 Geo 站点的“名称”字段 匹配
- 可选地,设置 nginx-ingress-geo.enabled 以启用一个为内部 Geo 流量预配置的 ingress 控制器。 这使站点更容易提升为主站点。。
- 另外,配置任何其他设置,例如:
- 配置 SSL/TLS
- Redis 配置
- 对象存储 配置
- 对于外部数据库,global.psql.host 是辅助的只读副本数据库,而 global.geo.psql.host 是 Geo 跟踪数据库
-
将必要的 Ingress 或 Gateway API 配置添加到您的 secondary.yaml 中。
可选地,启用一个额外的 NGINX 控制器,并为内部 Geo 流量配置一个额外的 webservice Ingress:
yaml1# Optional for secondary sites: Configure Geo Nginx Controller for internal Geo site traffic. 2# nginx-ingress-geo: 3# enabled: true 4gitlab: 5 webservice: 6 # Configure an Ingress for internal Geo traffic 7 extraIngress: 8 enabled: true 9 hostname: shanghai.gitlab.example.com 10 useGeoClass: false # Set to true if Geo NGINX Ingress is enabled.
除了基于 NGINX Ingress 的方法,您还可以通过配置 Gateway API 和捆绑的 Envoy Gateway 来暴露 Geo。
启用 Gateway API 后,为内部 Geo 流量配置主机名:
yamlglobal: geo: gatewayApi: additionalHostname: shanghai.gitlab.example.com
-
使用此配置部署 chart:
shellhelm upgrade --install gitlab-geo gitlab/gitlab --namespace gitlab -f secondary.yaml -
等待部署完成,应用程序上线。
通过主站点添加辅助 Geo 站点
现在两个数据库都已配置,应用程序也已部署,我们必须告知主站点辅助站点的存在:
- 访问主站点。
- 在右上角,选择 管理员。
- 在左侧边栏中,选择 Geo > 添加站点。
- 添加辅助站点。使用完整的极狐GitLab URL 作为 URL。
- 输入与辅助站点的 global.geo.nodeName 相同的名称。这些值必须始终完全匹配,逐字符匹配。
- 输入内部 URL,例如 https://shanghai.gitlab.example.com。
- 可选地,选择应由辅助站点复制的群组或存储分片。留空以复制所有内容。
- 选择 添加节点。
将辅助站点添加到管理面板后,它会自动开始从主站点复制缺失的数据。此过程称为“backfill”。同时,主站点开始将任何更改通知每个辅助站点,以便辅助站点可以及时复制这些更改。
确认运行状态
最后一步是在完全配置后,通过 Toolbox Pod 仔细检查辅助站点上的 Geo 配置。
-
找到 Toolbox Pod:
shellkubectl --namespace gitlab get pods -lapp=toolbox -
使用 kubectl exec 附加到 Pod:
shellkubectl --namespace gitlab exec -ti gitlab-geo-toolbox-XXX -- bash -l -
检查 Geo 配置的状态:
shellgitlab-rake gitlab:geo:check您应该会看到类似于下面的输出:
plaintext1WARNING: This version of GitLab depends on gitlab-shell 10.2.0, but you're running Unknown. Please update gitlab-shell. 2Checking Geo ... 3 4GitLab Geo is available ... yes 5GitLab Geo is enabled ... yes 6GitLab Geo secondary database is correctly configured ... yes 7Database replication enabled? ... yes 8Database replication working? ... yes 9GitLab Geo HTTP(S) connectivity ... 10* Can connect to the primary node ... yes 11HTTP/HTTPS repository cloning is enabled ... yes 12Machine clock is synchronized ... Exception: getaddrinfo: Servname not supported for ai_socktype 13Git user has default SSH configuration? ... yes 14OpenSSH configured to use AuthorizedKeysCommand ... no 15 Reason: 16 Cannot find OpenSSH configuration file at: /assets/sshd_config 17 Try fixing it: 18 If you are not using our official docker containers, 19 make sure you have OpenSSH server installed and configured correctly on this system 20 For more information see: 21 doc/administration/operations/fast_ssh_key_lookup.md 22GitLab configured to disable writing to authorized_keys file ... yes 23GitLab configured to store new projects in hashed storage? ... yes 24All projects are in hashed storage? ... yes 25 26Checking Geo ... Finished- 不用担心 Exception: getaddrinfo: Servname not supported for ai_socktype, 因为 Kubernetes 容器无法访问主机时钟。这是正常的。
- OpenSSH configured to use AuthorizedKeysCommand ... no 是预期的。此 Rake 任务正在检查本地 SSH 服务器,该服务器实际上存在于 gitlab-shell chart 中,部署在其他位置,并且已经配置妥当。
为辅助站点配置单独的 URL(可选)
对于用户来说,主站点和辅助站点使用单个统一 URL 通常更方便。例如,您可以:
- 将两个站点放在负载均衡器后面。
- 使用云提供商的 DNS 功能将用户路由到最近的站点。
在某些情况下,您可能希望让用户控制他们访问哪个站点。为此,您可以配置辅助 Geo 站点使用唯一的外部 URL。例如:
- 主集群的外部 URL:https://gitlab.example.com
- 辅助集群的外部 URL:https://shanghai.gitlab.example.com
-
编辑 secondary.yaml 并更新辅助集群的外部 URL,以便 webservice chart 可以处理这些请求:
yaml1global: 2 # See docs.gitlab.com/charts/charts/globals 3 # Configure host & domain 4 hosts: 5 domain: example.com 6 # use a unique external URL for the secondary site 7 gitlab: 8 name: shanghai.gitlab.example.com -
在极狐GitLab 中更新辅助站点的外部 URL,以便在需要时使用该 URL:
- 使用管理 UI:
- 访问主站点。
- 在右上角,选择 管理员。
- 选择 Geo > 站点。
- 选择铅笔图标以编辑辅助站点。
- 编辑外部 URL,例如 https://shanghai.gitlab.example.com。
- 选择 保存更改。
- 使用管理 UI:
-
重新部署辅助站点的 chart:
shellhelm upgrade --install gitlab-geo gitlab/gitlab --namespace gitlab -f secondary.yaml -
等待部署完成,应用程序上线。
容器镜像仓库
要将辅助容器镜像仓库与主容器镜像仓库同步,您可以使用通知密钥配置容器镜像仓库复制。
Cert-manager 和统一 URL
Geo 的统一 URL 通常与地理感知路由(例如,使用 Amazon Route 53 或 Google Cloud DNS)一起使用,如果使用 HTTP01 质询 来验证域名是否在您的控制之下,这可能会导致问题。
当您为一个 Geo 站点请求证书时,Let's Encrypt 必须将 DNS 名称解析到请求的 Geo 站点。如果 DNS 解析到不同的 Geo 站点,则不会签发或刷新统一 URL 的证书。
要使用 cert-manager 可靠地创建和刷新证书,请将质询名称服务器设置为已知能将统一主机名解析到 Geo 站点 IP 地址的服务器,或配置 DNS01 Issuer。