Azure 专用链接
Azure 专用链接只能在 ClickHouse Cloud 生产 服务上启用。开发 服务不支持。
本指南介绍如何使用 Azure 专用链接通过虚拟网络在 Azure(包括客户拥有和 Microsoft 合作伙伴服务)与 ClickHouse Cloud 之间提供私有连接。Azure 专用链接简化了网络架构,并通过消除数据暴露于公共互联网来保护 Azure 中端点之间的连接。
与 AWS 和 GCP 不同,Azure 支持通过专用链接进行跨区域连接。这使您能够在部署了 ClickHouse 服务的不同区域中的 VNet 之间建立连接。
跨区域流量可能会收取额外费用。请查看最新的 Azure 文档。
请完成以下步骤以启用 Azure 专用链接
- 获取专用链接的 Azure 连接别名
- 在 Azure 中创建私有终结点
- 将私有终结点 GUID 添加到您的 ClickHouse Cloud 组织
- 将私有终结点 GUID 添加到您的服务允许列表
- 使用专用链接访问您的 ClickHouse Cloud 服务
在此处查找 Azure 专用链接的完整 Terraform 示例:here。
获取专用链接的 Azure 连接别名
选项 1:ClickHouse Cloud 控制台
在 ClickHouse Cloud 控制台中,打开您想要通过 PrivateLink 连接的服务,然后打开 设置 菜单。单击 设置私有终结点 按钮。复制 服务名称,它将用于设置专用链接。
选项 2:API
在开始之前,您需要一个 ClickHouse Cloud API 密钥。您可以创建一个新密钥或使用现有的密钥。请注意,您需要 管理员 密钥来管理专用链接配置。
获得 API 密钥后,在运行任何命令之前设置以下环境变量
REGION=<region code, use Azure format>
PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
从您的区域获取实例 ID
您需要至少一个部署在指定区域的 ClickHouse Cloud 服务才能执行此步骤。
curl --silent --user ${KEY_ID:?}:${KEY_SECRET:?} https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services | jq ".result[] | select (.region==\"${REGION:?}\" and .provider==\"${PROVIDER:?}\") | .id " -r | head -1 | tee instance_id
使用您在上一步收到的 ID 创建一个 INSTANCE_ID
环境变量
INSTANCE_ID=$(cat instance_id)
获取您的 Azure 连接别名和专用 DNS 主机名以用于专用链接
curl --silent --user ${KEY_ID:?}:${KEY_SECRET:?} https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig | jq .result
{
"endpointServiceId": "production-westus3-0-0.63c890a9-4d32-48cc-a08c-8cd92dfb1ad3.westus3.azure.privatelinkservice",
...
}
记下 endpointServiceId
。您将在下一步中使用它。
在 Azure 中创建私有终结点
在本节中,我们将要在 Azure 中创建一个私有终结点。您可以使用 Azure 门户或 Terraform。
选项 1:使用 Azure 门户在 Azure 中创建私有终结点
在 Azure 门户中,打开 专用链接中心 → 私有终结点。
单击 创建 按钮打开私有终结点创建对话框。
在以下屏幕中,指定以下选项
- 订阅 / 资源组:请为私有终结点选择 Azure 订阅和资源组。
- 名称:为 私有终结点 设置一个名称。
- 区域:选择将通过专用链接连接到 ClickHouse Cloud 的已部署 VNet 所在的区域。
完成上述步骤后,单击 下一步:资源 按钮。
选择选项 通过资源 ID 或别名连接到 Azure 资源。
对于 资源 ID 或别名,使用您从 获取专用链接的 Azure 连接别名 步骤中获得的 endpointServiceId
。
单击 下一步:虚拟网络 按钮。
- 虚拟网络:选择您想要使用专用链接连接到 ClickHouse Cloud 的 VNet
- 子网:选择将在其中创建私有终结点的子网
可选
- 应用程序安全组:您可以将 ASG 附加到私有终结点,并在网络安全组中使用它来过滤往返私有终结点的网络流量。
单击 下一步:DNS 按钮。
单击 下一步:标签 按钮。
(可选)您可以将标签附加到您的私有终结点。
单击 下一步:查看 + 创建 按钮。
最后,单击 创建 按钮。
创建的私有终结点的 连接状态 将处于 待定 状态。一旦您将此私有终结点添加到服务允许列表,它将更改为 已批准 状态。
打开与私有终结点关联的网络接口,并复制 私有 IPv4 地址(本例中为 10.0.0.4),您将在后续步骤中需要此信息。
选项 2:使用 Terraform 在 Azure 中创建私有终结点
使用以下模板使用 Terraform 创建私有终结点
resource "azurerm_private_endpoint" "example_clickhouse_cloud" {
name = var.pe_name
location = var.pe_location
resource_group_name = var.pe_resource_group_name
subnet_id = var.pe_subnet_id
private_service_connection {
name = "test-pl"
private_connection_resource_alias = "<data from 'Obtain Azure connection alias for Private Link' step>"
is_manual_connection = true
}
}
获取私有终结点 resourceGuid
为了使用专用链接,您需要将私有终结点连接 GUID 添加到您的服务允许列表。
私有终结点资源 GUID 仅在 Azure 门户中公开。打开上一步中创建的私有终结点,然后单击 JSON 视图
在属性下,找到 resourceGuid
字段并复制此值
设置专用链接的 DNS
您需要创建一个私有 DNS 区域 (${location_code}.privatelink.azure.clickhouse.cloud
) 并将其附加到您的 VNet,以便通过专用链接访问资源。
创建私有 DNS 区域
选项 1:使用 Azure 门户
请按照以下指南使用 Azure 门户创建 Azure 私有 DNS 区域。
选项 2:使用 Terraform
使用以下 Terraform 模板创建私有 DNS 区域
resource "azurerm_private_dns_zone" "clickhouse_cloud_private_link_zone" {
name = "${var.location}.privatelink.azure.clickhouse.cloud"
resource_group_name = var.resource_group_name
}
创建通配符 DNS 记录
创建通配符记录并指向您的私有终结点
选项 1:使用 Azure 门户
- 打开
MyAzureResourceGroup
资源组,然后选择${region_code}.privatelink.azure.clickhouse.cloud
私有区域。 - 选择 + 记录集。
- 对于名称,键入
*
。 - 对于 IP 地址,键入您在私有终结点中看到的 IP 地址。
- 选择 确定。
选项 2:使用 Terraform
使用以下 Terraform 模板创建通配符 DNS 记录
resource "azurerm_private_dns_a_record" "example" {
name = "*"
zone_name = var.zone_name
resource_group_name = var.resource_group_name
ttl = 300
records = ["10.0.0.4"]
}
创建虚拟网络链接
要将私有 DNS 区域链接到虚拟网络,您需要创建一个虚拟网络链接。
选项 1:使用 Azure 门户
请按照以下指南将虚拟网络链接到您的私有 DNS 区域。
选项 2:使用 Terraform
使用以下 Terraform 模板将虚拟网络链接到您的私有 DNS 区域
resource "azurerm_private_dns_zone_virtual_network_link" "example" {
name = "test"
resource_group_name = var.resource_group_name
private_dns_zone_name = var.zone_name
virtual_network_id = var.virtual_network_id
}
验证 DNS 设置
westus3.privatelink.azure.clickhouse.cloud
域内的任何记录都应指向私有终结点 IP。(本例中为 10.0.0.4)。
nslookup instance-id.westus3.privatelink.azure.clickhouse.cloud.
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: instance-id.westus3.privatelink.azure.clickhouse.cloud
Address: 10.0.0.4
将私有终结点 GUID 添加到您的 ClickHouse Cloud 组织
选项 1:ClickHouse Cloud 控制台
要将终结点添加到组织,请继续执行 将私有终结点 GUID 添加到您的服务允许列表 步骤。使用 ClickHouse Cloud 控制台将 私有终结点 GUID
添加到服务允许列表会自动将其添加到组织。
要删除终结点,请打开 组织详细信息 -> 私有终结点,然后单击删除按钮以删除终结点。
选项 2:API
在运行任何命令之前设置以下环境变量
PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
ENDPOINT_ID=<Private Endpoint resourceGuid>
REGION=<region code, use Azure format>
使用来自 获取私有终结点 resourceGuid
步骤的数据设置 VPC_ENDPOINT
环境变量。
运行以下命令以添加私有终结点
cat <<EOF | tee pl_config_org.json
{
"privateEndpoints": {
"add": [
{
"cloudProvider": "azure",
"id": "${ENDPOINT_ID:?}",
"description": "Azure private endpoint",
"region": "${REGION:?}"
}
]
}
}
EOF
您也可以运行以下命令以删除私有终结点
cat <<EOF | tee pl_config_org.json
{
"privateEndpoints": {
"remove": [
{
"cloudProvider": "azure",
"id": "${ENDPOINT_ID:?}",
"region": "${REGION:?}"
}
]
}
}
EOF
添加或删除私有终结点后,运行以下命令将其应用于您的组织
curl --silent --user ${KEY_ID:?}:${KEY_SECRET:?} -X PATCH -H "Content-Type: application/json" https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?} -d @pl_config_org.json
将私有终结点 GUID 添加到您的服务允许列表
默认情况下,即使专用链接连接已批准并建立,ClickHouse Cloud 服务也无法通过专用链接连接访问。您需要为每个应使用专用链接访问的服务显式添加私有终结点 GUID。
选项 1:ClickHouse Cloud 控制台
在 ClickHouse Cloud 控制台中,打开您想要通过 PrivateLink 连接的服务,然后导航到 设置。输入从上一步获得的 终结点 ID
。
如果您想允许从现有 PrivateLink 连接进行访问,请使用现有的终结点下拉菜单。
选项 2:API
在运行任何命令之前设置这些环境变量
PROVIDER=azure
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
ENDPOINT_ID=<Private Endpoint resourceGuid>
INSTANCE_ID=<Instance ID>
为每个应使用专用链接访问的服务执行此操作。
运行以下命令以将私有终结点添加到服务允许列表
cat <<EOF | tee pl_config.json
{
"privateEndpointIds": {
"add": [
"${ENDPOINT_ID:?}"
]
}
}
EOF
您也可以运行以下命令以从服务允许列表中删除私有终结点
cat <<EOF | tee pl_config.json
{
"privateEndpointIds": {
"remove": [
"${ENDPOINT_ID:?}"
]
}
}
EOF
将私有终结点添加到服务允许列表或从中删除后,运行以下命令将其应用于您的组织
curl --silent --user ${KEY_ID:?}:${KEY_SECRET:?} -X PATCH -H "Content-Type: application/json" https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID?} -d @pl_config.json | jq
使用专用链接访问您的 ClickHouse Cloud 服务
每个启用专用链接的服务都有一个公共和私有终结点。为了使用专用链接进行连接,您需要使用私有终结点,它将是 privateDnsHostname
。
私有 DNS 主机名仅可从您的 Azure VNet 访问。不要尝试从位于 Azure VNet 之外的机器解析 DNS 主机。
获取私有 DNS 主机名
选项 1:ClickHouse Cloud 控制台
在 ClickHouse Cloud 控制台中,导航到 设置。单击 设置私有终结点 按钮。在打开的弹出窗口中,复制 DNS 名称。
选项 2:API
在运行任何命令之前设置以下环境变量
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<set ClickHouse organization ID>
INSTANCE_ID=<Instance ID>
运行以下命令
curl --silent --user ${KEY_ID:?}:${KEY_SECRET:?} https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig | jq .result
您应该收到类似于以下的响应
{
...
"privateDnsHostname": "xxxxxxx.<region code>.privatelink.azure.clickhouse.cloud"
}
在此示例中,与 xxxxxxx.region_code.privatelink.azure.clickhouse.cloud
主机名的连接将路由到专用链接。同时,xxxxxxx.region_code.azure.clickhouse.cloud
将通过互联网路由。
使用 privateDnsHostname
通过专用链接连接到您的 ClickHouse Cloud 服务。
故障排除
测试 DNS 设置
来自 ${region_code}.privatelink.azure.clickhouse.cloud.
区域的所有 DNS 记录都应指向来自 在 Azure 中创建私有终结点 步骤的内部 IP 地址。在本例中,区域为 westus3
。
运行以下命令
nslookup abcd.westus3.privatelink.azure.clickhouse.cloud.
您应该收到以下响应
Non-authoritative answer:
Name: abcd.westus3.privatelink.azure.clickhouse.cloud
Address: 10.0.0.4
连接被对端重置
最有可能的是,私有终结点 GUID 未添加到服务允许列表。请重新访问 将私有终结点 GUID 添加到您的服务允许列表 步骤。
私有终结点处于待定状态
最有可能的是,私有终结点 GUID 未添加到服务允许列表。请重新访问 将私有终结点 GUID 添加到您的服务允许列表 步骤。
测试连接性
如果您在使用专用链接连接时遇到问题,请使用 openssl
检查您的连接性。确保专用链接终结点状态为 Accepted
。
OpenSSL 应该能够连接(请参阅输出中的 CONNECTED)。errno=104
是预期的。
openssl s_client -connect abcd.westus3.privatelink.azure.clickhouse.cloud.cloud:9440
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 335 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
检查私有终结点过滤器
在运行任何命令之前设置以下环境变量
KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<please set ClickHouse organization ID>
INSTANCE_ID=<Instance ID>
运行以下命令以检查私有终结点过滤器
curl --silent --user ${KEY_ID:?}:${KEY_SECRET:?} -X GET -H "Content-Type: application/json" https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?} | jq .result.privateEndpointIds
[]
更多信息
有关 Azure 专用链接的更多信息,请访问 azure.microsoft.com/en-us/products/private-link。