关于 GitHub Enterprise Server 群集的网络
GitHub Enterprise Server 群集中的每个节点都必须能够通过网络与群集中的所有其他节点通信。 可以查看最终用户、管理以及节点之间的通信所需的端口和协议。 若要在前端节点之间分配流量,GitHub 建议配置外部负载均衡器。
网络注意事项
对于集群而言,最简单的网络设计是将节点置于单个 LAN 上。 如果群集必须跨子网,我们不建议在网络之间配置任何防火墙规则。 节点之间的延迟应小于 1 毫秒。
主节点和副本节点之间的延迟不得超过 70 毫秒。 我们不建议在两个节点之间配置防火墙。
最终用户的应用程序端口
应用程序端口为最终用户提供 Web 应用程序和 Git 访问。
端口 | 说明 | 加密 |
---|---|---|
22/TCP | 通过 SSH 访问 Git | |
25/TCP | SMTP | 需要 STARTTLS |
80/TCP | HTTP | 启用 SSL 后,此端口重定向到 HTTPS |
443/TCP | HTTPS | |
9418/TCP | 简单的 Git 协议端口 (以私密模式禁用) |
管理端口
最终用户在使用基本应用程序时不需要管理端口。
端口 | 说明 | 加密 |
---|---|---|
ICMP | ICMP Ping | |
122/TCP | 管理 SSH | |
161/UDP | SNMP | |
8080/TCP | Management Console HTTP | 启用 SSL 后,此端口重定向到 HTTPS |
8443/TCP | Management Console HTTPS |
集群通信端口
如果节点之间存在网络级防火墙,则需要访问这些端口。 节点之间的通信未加密。 这些端口不应从外部访问。
端口 | 说明 |
---|---|
1336/TCP | 内部 API |
3033/TCP | 内部 SVN 访问 |
3037/TCP | 内部 SVN 访问 |
3306/TCP | MySQL |
4486/TCP | 管理者访问 |
5115/TCP | 存储后端 |
5208/TCP | 内部 SVN 访问 |
6379/TCP | Redis |
8001/TCP | Grafana |
8090/TCP | 内部 GPG 访问 |
8149/TCP | GitRPC 文件服务器访问 |
8300/TCP | Consul |
8301/TCP | Consul |
8302/TCP | Consul |
9000/TCP | Git Daemon |
9102/TCP | 页面文件服务器 |
9105/TCP | LFS 服务器 |
9200/TCP | Elasticsearch |
9203/TCP | 语义代码服务 |
9300/TCP | Elasticsearch |
11211/TCP | Memcache |
161/UDP | SNMP |
8125/UDP | Statsd |
8301/UDP | Consul |
8302/UDP | Consul |
25827/UDP | Collectd |
配置负载均衡器
我们建议使用基于 TCP 的外部负载均衡器,它支持 PROXY 协议来跨节点分配流量。 请考虑以下负载均衡器配置:
- TCP 端口(如下所示)应转发到运行
web-server
服务的节点。 这些是提供外部客户端请求的唯一节点。 - 不应启用粘性会话。
Warning
在负载均衡器上终止 HTTPS 连接时,从负载均衡器到 GitHub Enterprise Server 的请求也需要使用 HTTPS。 不支持降级到 HTTP 连接。
处理客户端连接信息
由于客户端与集群的连接来自负载均衡器,因此客户端 IP 地址可能会丢失。 要正确捕获客户端连接信息,需要考虑其他因素。
如果您的负载均衡器可以支持 PROXY 协议,我们强烈建议您实施该协议。 如果不能提供 PROXY 支持,使用 X-Forwarded-For
标头也可以对 HTTP 和 HTTPS 端口进行负载均衡。
Caution
启用了 PROXY 支持或 HTTP 转发时,重要的是确保没有外部流量可以直接到达 GitHub Enterprise Server 设备。 如果未能正确阻止外部流量,则源 IP 地址可能被伪造。
在 GitHub Enterprise Server
上启用 PROXY 支持
我们强烈建议您为实例和负载均衡器启用 PROXY 支持。
Note
GitHub Enterprise Server 支持与 AWS 网络负载均衡器不兼容的 PROXY 协议 V1。 如果将 AWS 网络负载均衡器与 GitHub Enterprise Server 配合使用,请不要启用 PROXY 支持。
-
对于您的实例,请使用以下命令:
ghe-config 'loadbalancer.proxy-protocol' 'true' && ghe-cluster-config-apply
-
对于负载均衡器,请使用供应商提供的说明。
PROXY 协议 TCP 端口映射
源端口 | 目标端口 | 服务说明 |
---|---|---|
22 | 23 | 通过 SSH 访问 Git |
80 | 81 | HTTP |
443 | 444 | HTTPS |
8080 | 8081 | Management Console HTTP |
8443 | 8444 | Management Console HTTPS |
9418 | 9419 | Git |
在 GitHub Enterprise Server
上启用 X-Forwarded-For 支持
仅当 PROXY 协议不可用时才使用 X-Forwarded-For
协议。 X-Forwarded-For
标头仅与 HTTP 和 HTTPS 兼容。 对于基于 SSH 的 Git 连接,报告的 IP 地址将是负载均衡器的 IP 地址。 在某些环境中,实例的审核日志中的客户端 IP 地址可能会错误地显示为 127.0.0.1
。
若要启用 X-Forwarded-For
标头,请使用以下命令:
ghe-config 'loadbalancer.http-forward' 'true' && ghe-cluster-config-apply
协议 TCP 端口映射,无需 PROXY 支持即可使用
源端口 | 目标端口 | 服务说明 |
---|---|---|
22 | 22 | 通过 SSH 访问 Git |
25 | 25 | SMTP |
80 | 80 | HTTP |
443 | 443 | HTTPS |
8080 | 8080 | Management Console HTTP |
8443 | 8443 | Management Console HTTPS |
配置健康状态检查
如果预配置的检查在该节点上失败,则状态检查允许负载均衡器停止向未响应的节点发送流量。 如果集群节点出现故障,则与冗余节点配对的状态检查可提供高可用性。
配置负载均衡器,以检查以下 URL。
http(s)://HOSTNAME/status
如果节点运行正常并且可为最终用户的请求提供服务,则终结点将返回状态代码 200
(正常)。 有关详细信息,请参阅“监视高可用性配置”。
Note
当设备处于维护模式时,https://HOSTNAME/status
URL 将返回状态代码 503
(服务不可用)。 有关详细信息,请参阅“启用和排定维护模式”。
DNS 要求
对 GitHub Enterprise Server 主机名的 DNS 查询应解析为负载均衡器。 我们建议您启用子域隔离。 如果启用了子域隔离,另一个通配符记录 *.HOSTNAME
也应解析到负载均衡器。 有关详细信息,请参阅“启用子域隔离”。