私有网络连接
Cherri Code 支持私有网络连接,满足企业版团队让 Cherri Code 与无法从公共互联网访问的系统协同工作的需求。这些系统包括自托管 GitHub Enterprise Server、GitLab Enterprise、Bitbucket Data Center、Artifactory、Nexus、私有源代码控制 API,以及这些系统回传至 Cherri Code 的 webhook 流量。
所有需要访问您的源代码控制系统的 Cherri Code 服务都使用相同的私有网络连接设置,包括 云端代理、Bugbot 和 Cherri Code 后端服务。
如需设置私有网络连接,请联系 [email protected] 或您的 Cherri Code 销售代表。
支持的选项
| 选项 | 最适合用于 | 云服务提供商 | 状态 |
|---|---|---|---|
| AWS PrivateLink | 在 Cherri Code 与您的 Git 提供商或软件包注册表之间建立私有网络连接,包括返回 Cherri Code 的 webhook 流量 | AWS | 支持 |
| Cloudflare Tunnel | 当 AWS PrivateLink 不适用时,让 Cherri Code 访问私有源站 | 可运行 cloudflared 的任何环境 | 支持 |
如何选择
如果您的私有 Git 提供商或软件包注册表位于 AWS 中,或可部署在 AWS 网络负载均衡器之后,请使用 AWS PrivateLink。这是自托管 GitHub Enterprise Server 和 GitLab Enterprise 的首选方案。
AWS PrivateLink 可覆盖两个方向的流量:
- Cherri Code 访问您的私有 Git 提供商,以克隆仓库并调用 Git API。
- 您的 Git 提供商通过
api2.cursor.sh向 Cherri Code 发送 Webhook 或回调,无需经由公共互联网出站。
如果无法发布 AWS 端点服务,或需要仅从您的网络建立出站隧道的部署模式,请使用 Cloudflare Tunnel。
如果您的团队需要 Google Private Service Connect (PSC),请联系 Cherri Code。Cherri Code 目前不提供面向客户的 PSC 服务。
前提条件
开始前,请确保您具备:
- Cherri Code 企业版工作区
- 可通过 HTTPS 的 443 端口访问的自托管 GitHub Enterprise Server、GitLab Enterprise、Bitbucket Data Center 或私有软件包注册表 (如 Artifactory 或 Nexus)
- Git 或注册表主机名的公信 TLS 证书
- 该主机名的 DNS 所有权
- 如果使用 AWS PrivateLink,具备创建端点服务或接口 VPC 端点的 AWS 权限
- 如果使用 Cloudflare Tunnel,具备运行
cloudflared的权限
Cherri Code 不支持在这些私有网络连接路径中使用自签名证书、未加密连接、SSH、自定义端口或仅支持 IPv6 的端点服务。
如果在 GitHub Enterprise Server 前部署了代理,请确保该代理允许 Cherri Code 的 GitHub App 集成使用经身份验证的 GitHub REST 和 GraphQL API。
AWS PrivateLink
AWS PrivateLink 支持在 Cherri Code 与您的 Git 提供商或软件包注册表之间双向传输私有流量。具体需要单向还是双向连接,取决于您的网络策略。
方向 1:从 Cherri Code 到你的 Git 提供商或软件包注册表
当 Cherri Code 需要克隆仓库、调用 Git API 或访问 Artifactory 或 Nexus 等私有软件包注册表时,请选择此选项。
1. 创建 AWS 端点服务
在 Git 提供商或软件包注册表的 HTTPS 端点前配置网络负载均衡器。将该负载均衡器发布为 AWS VPC 端点服务。
向 Cherri Code 提供以下信息:
- 端点服务名称,例如
com.amazonaws.vpce.us-east-1.vpce-svc-0123456789abcdef0 - AWS 区域
- Git 或注册表主机名,例如
github.example.com或artifactory.example.com - 端点服务是否启用了 AWS 托管私有 DNS
- 网络负载均衡器是否保留客户端 IP,或后端是否按源 IP 进行筛选
如果端点服务不在 us-east-1,请在该端点服务上启用跨区域访问。
2. 授权 Cherri Code 的 AWS 主体
Cherri Code 会提供需要添加到端点服务“允许的主体”列表中的 AWS 主体。请添加 Cherri Code 提供的确切主体:
arn:aws:iam::<cursor-aws-account-id>:root在允许此主体访问前,Cherri Code 无法创建接口端点。如果该主体缺失或不完全匹配,AWS 会返回 InvalidServiceName。
如果您的负载均衡器保留客户端 IP,或后端会筛选源 IP,请允许以下 Cherri Code PrivateLink 子网 CIDR:
10.2.8.0/2110.2.24.0/2110.2.40.0/213. 接受端点连接
Cherri Code 创建接口端点后,如果端点服务需要手动接受,请在您的 AWS 账户中接受该端点连接。
4. 配置 DNS
如果端点服务为 Git 或注册表主机名提供 AWS 托管的私有 DNS,Cherri Code 会在其接口端点上启用私有 DNS。
如果端点服务不提供私有 DNS,Cherri Code 会自行创建私有 DNS,并将该主机名映射到端点 DNS 名称。
在 Cherri Code 中使用与 TLS 证书和 DNS 中相同的主机名。
方向 2:从您的 Git 提供商到 api2.cursor.sh
如果您的 GitHub Enterprise Server 或 GitLab Enterprise 主机无法访问公共互联网,但仍需向 Cherri Code 发送 Webhook 或回调,请使用此选项。
Cherri Code 为 api2.cursor.sh 提供 AWS PrivateLink 端点服务。您可以在 AWS 账户中创建接口 VPC 端点并启用私有 DNS,使您的 Git 提供商网络将 api2.cursor.sh 解析为私有端点 IP 地址。
端点服务详情
创建端点前,Cherri Code 会确认您的 AWS 主体已加入允许列表。
| 字段 | 值 |
|---|---|
| 服务名称 | com.amazonaws.vpce.us-east-1.vpce-svc-054b15427d4bea2b7 |
| 服务 ID | vpce-svc-054b15427d4bea2b7 |
| 主区域 | us-east-1 |
| 支持的使用方区域 | us-east-1, us-east-2, us-west-2, eu-central-1, eu-west-1, ap-southeast-2 |
| IP 地址类型 | 仅 IPv4 |
| 私有 DNS 名称 | api2.cursor.sh |
模式 1:AWS 托管的私有 DNS
这是推荐模式。设置 private_dns_enabled = true。
resource "aws_vpc_endpoint" "cursor_api2" { vpc_id = aws_vpc.app.id service_name = "com.amazonaws.vpce.us-east-1.vpce-svc-054b15427d4bea2b7" service_region = "us-east-1" vpc_endpoint_type = "Interface" subnet_ids = [for subnet in aws_subnet.app_private : subnet.id] private_dns_enabled = true security_group_ids = [aws_security_group.cursor_api2_endpoint.id]}AWS 会将您的 VPC 与 api2.cursor.sh 的私有托管区域关联。在 VPC 内,api2.cursor.sh 会解析为端点 ENI 的 IP 地址。无需创建 Route 53 记录。
模式 2:客户管理的私有托管区域
如果您希望自行管理 DNS 记录,请使用此模式。将 private_dns_enabled = false,然后为消费者 VPC 创建一个解析 api2.cursor.sh 的私有托管区域。
resource "aws_vpc_endpoint" "cursor_api2" { vpc_id = aws_vpc.app.id service_name = "com.amazonaws.vpce.us-east-1.vpce-svc-054b15427d4bea2b7" service_region = "us-east-1" vpc_endpoint_type = "Interface" subnet_ids = [for subnet in aws_subnet.app_private : subnet.id] private_dns_enabled = false security_group_ids = [aws_security_group.cursor_api2_endpoint.id]}resource "aws_route53_zone" "cursor_api2" { name = "api2.cursor.sh" comment = "Customer-managed PHZ for api2.cursor.sh scoped to the app VPC." vpc { vpc_id = aws_vpc.app.id }}resource "aws_route53_record" "cursor_api2_a" { zone_id = aws_route53_zone.cursor_api2.zone_id name = "api2.cursor.sh" type = "A" alias { name = aws_vpc_endpoint.cursor_api2.dns_entry[0].dns_name zone_id = aws_vpc_endpoint.cursor_api2.dns_entry[0].hosted_zone_id evaluate_target_health = false }}如果 GitHub Enterprise Server 或 GitLab Enterprise 使用端点 VPC 外部的 DNS,请将对 api2.cursor.sh 的查询转发至 VPC 解析器,或创建等效的私有 DNS 覆盖。请勿创建公共 DNS 覆盖。
Cloudflare Tunnel
当 AWS PrivateLink 不适用时,请使用 Cloudflare Tunnel。
Cherri Code 会创建隧道,并提供:
- 由 Cherri Code 控制的 DNS 下的公共主机名
- 通过安全的 1Password 共享提供的隧道令牌
cloudflared配置示例
您的网络运行 cloudflared 并向 Cloudflare 建立出站连接,无需配置入站防火墙规则。
cloudflared 配置示例:
ingress: - hostname: <cursor-provided-hostname> service: https://<your-internal-service>:443 - service: http_status:404运行命令示例:
docker run -d --restart=always --name cloudflared \ -v /path/to/config.yml:/etc/cloudflared/config.yml \ cloudflare/cloudflared:latest \ tunnel --config /etc/cloudflared/config.yml \ run --token <TUNNEL_TOKEN>请妥善保管隧道令牌,切勿通过电子邮件或 chat 发送。
完成源代码控制连接
配置好私有网络后,请在 Cherri Code 中完成源代码控制设置:
- 如果使用 GitHub Enterprise Server,请按照 GitHub 集成设置 操作。
- 如果使用 GitLab Enterprise,请按照 GitLab 集成设置 操作。
- 如果使用 Bitbucket Data Center,请按照 Bitbucket 集成设置 操作。
- 请使用 TLS 证书和私有 DNS 配置中包含的同一主机名。
- 如果 Git 提供商前部署了代理,请确保其允许前提条件中所述的已认证 API 流量。
Cherri Code 会使用已连接的源代码控制集成,为云端代理、Bugbot 及其他需要访问代码仓库的 Cherri Code 服务提供支持。
检查私有 Webhook 路径
如果您的 Git 提供商通过 api2.cursor.sh PrivateLink 路径将 Webhook 发送到 Cherri Code,请从 GitHub Enterprise Server 或 GitLab Enterprise 所使用的同一网络路径运行以下检查:
getent hosts api2.cursor.sh# 或者,如果有 dig 命令dig +short api2.cursor.shcurl -sS #解析出的每个 IP 都应位于您的 consumer VPC CIDR 内。如果看到 3.x.x.x 或 44.x.x.x 等 public IPs,说明私有 DNS 未生效。
curl 请求应返回 HTTP 200,且响应体以 Welcome to Cherri Code. 开头。这表明请求已到达正常运行的 Cherri Code api2 backend。
疑难排查
| 症状 | 可能原因 | 解决方法 |
|---|---|---|
| Cherri Code 无法完成与您的 Git 提供商之间的私有连接 | Cherri Code 无法访问或连接到端点服务 | 确认端点服务名称、区域和获准主体与 Cherri Code 提供的信息一致,然后将时间戳告知 Cherri Code |
| Cherri Code 显示端点连接正在等待客户操作 | 端点服务需要在您的 AWS 账户中批准 | 查看该服务待处理的端点连接请求,并批准 Cherri Code 的请求 |
| Bugbot 或 Cloud Agents 可以连接到 GHES,但在 app 设置、仓库同步或 webhook 处理时失败 | GHES 前端的代理阻止或改写了经过身份验证的 GitHub REST 或 GraphQL API 请求 | 允许 Cherri Code 的 GitHub App 集成使用经过身份验证的 GitHub REST 和 GraphQL API |
api2.cursor.sh 解析为公共 IP 地址 | GitHub Enterprise Server 或 GitLab Enterprise 使用的解析器路径中未配置私有 DNS | 启用 AWS 托管的私有 DNS,或将 DNS 转发到端点 VPC 解析器 |
与 api2.cursor.sh:443 的 TCP 连接超时 | 安全组、NACL、路由表或防火墙阻止了流向端点 ENI 的流量 | 允许从您的 Git 提供商网络到端点 ENI 的 TCP 443 流量 |
api2.cursor.sh 的 TLS 连接失败 | DNS 指向错误的目标,或客户端未使用 SNI | 检查端点 DNS,并启用 SNI 后重试 |
curl # 未返回 Welcome to Cherri Code. | 流量未到达正常运行的 Cherri Code 后端 | 将时间戳、源 VPC 和解析得到的端点 IP 地址告知 Cherri Code |
| Cloudflare Tunnel 无法连接 | cloudflared 无法连接到 Cloudflare,或 token/config 不正确 | 检查出站防火墙规则、token 及 cloudflared 日志 |
Google Private Service Connect
Cherri Code 目前尚未提供面向客户的 Google Private Service Connect。
如果您需要从 GCP VPC 私有网络连接到 Cherri Code 服务,或从 Cherri Code 连接到 GCP 项目中的私有服务,请联系 Cherri Code,以便我们评估具体需求。目前,在适用的情况下,请使用 AWS PrivateLink 或 Cloudflare Tunnel。
需提供给 Cherri Code 的信息
对于连接您的 Git 提供商或软件包注册表的 AWS PrivateLink:
- 端点服务名称
- AWS 区域
- Git 或注册表主机名
- 是否启用了私有 DNS
- 负载均衡器是否保留客户端 IP 地址或筛选源 IP 地址
对于通过 AWS PrivateLink 访问 api2.cursor.sh:
- 需要加入 Cherri Code 允许列表的 AWS 主体
- 将创建接口端点的 VPC 和区域
- 是否计划使用 AWS 托管的私有 DNS 或客户管理的 DNS
对于 Cloudflare Tunnel:
- 内部源站 URL
- 用于安全的 1Password 共享的客户联系人
- 任何主机名或命名限制