本页面介绍了如何为 Cloud SQL 实例设置自定义域名系统 (DNS) 名称。
概览
您可以配置 Cloud SQL 实例,以便应用可以使用贵组织管理的自定义 DNS 名称进行连接。如果您想使用自定义 DNS 名称(而非 IP 地址)连接到 Cloud SQL 实例,则请配置自定义主题备用名称 (SAN)。您可以在创建或更新实例时配置自定义 SAN。
当您向实例添加自定义 DNS 名称作为自定义 SAN 配置时,Cloud SQL 会将该自定义 DNS 名称插入到实例的服务器证书的 SAN 字段中。通过此自定义设置,您可以安全地使用自定义 DNS 名称进行主机名验证。您可以在自定义 SAN 配置中添加最多包含三个自定义 DNS 名称的英文逗号分隔列表。出于安全考虑,您只能对配置为使用 CUSTOMER_MANAGED_CAS_CA
作为服务器 CA 模式的实例使用自定义 SAN 配置。
为实例配置自定义 DNS 名称后,您可以使用该自定义 DNS 名称连接数据库客户端或应用,包括 Cloud SQL 语言连接器和 Cloud SQL Auth 代理。
工作流
如需为实例设置自定义 DNS 名称,请执行以下操作:
- 创建配置了客户管理的 CA 的实例。
- 向实例添加自定义 SAN 值。自定义 SAN 值会插入到实例的服务器证书的 SAN 字段中。
- 确定实例的 IP 地址。
- 为实例创建自定义 DNS 记录。
- 使用自定义 DNS 名称连接到实例。
准备工作
在为实例设置自定义 DNS 名称之前,请确保您拥有所需的角色和权限。
如果您要创建新的 Cloud SQL 实例,则为了使用自定义 SAN,您的实例还必须使用客户管理的证书授权机构 (CA) 作为其服务器 CA 模式。
使用自定义 SAN 值创建实例
如需创建具有自定义 SAN 值的实例,请使用以下 gcloud sql instances create
命令:
gcloud
gcloud sql instances create "INSTANCE_NAME" \ --database-version=DATABASE_VERSION \ --project=PROJECT_ID \ --region=REGION \ --server-ca-mode=CUSTOMER_MANAGED_CAS_CA \ --server-ca-pool=projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID --custom-subject-alternative-names=CUSTOM_DNS_NAME
进行以下替换:
- 将
INSTANCE_NAME
替换为您要创建的 Cloud SQL 实例的名称。 - 将
DATABASE_VERSION
替换为您要创建的 Cloud SQL 实例的版本enum
。 - 将
PROJECT_ID
替换为您计划在其中创建 Cloud SQL 实例的项目的 ID。 - 将
PROJECT_ID_CAS
替换为您在其中创建 CA_POOL_ID 的项目的 ID。此项目可能与您要在其中创建 Cloud SQL 实例的项目相同,也可能不同。 - 将
REGION
替换为您在其中创建 CA 池的区域。您必须在 CA 池所在的区域中创建实例。 - 将
CA_POOL_ID
替换为您创建的 CA 池的 ID。 CUSTOM_DNS_NAME
,最多包含三个自定义 DNS 名称,以英文逗号分隔,值之间没有空格。例如:develop.example.com,test.example.com,production.example.com
。
为实例添加或更新自定义 SAN 值
如需为现有实例添加或更新自定义 SAN 值,请执行以下操作:
gcloud
gcloud sql instances patch INSTANCE_NAME \ --custom-subject-alternative-names=CUSTOM_DNS_NAME
进行以下替换:
- 将
INSTANCE_NAME
替换为您要更新的 Cloud SQL 实例的名称。 CUSTOM_DNS_NAME
,最多包含三个自定义 DNS 名称,以英文逗号分隔,值之间没有空格。例如,develop.example.com,new-test.example.com,production.example.com
。
清除实例中的所有自定义 SAN 值
如需清除实例中的所有自定义 SAN 值,请执行以下操作:
gcloud
gcloud sql instances patch INSTANCE_NAME \ --clear-custom-subject-alternative-names
将 INSTANCE_NAME
替换为您要更新的 Cloud SQL 实例的名称。
创建自定义 DNS 记录
您必须先在 DNS 名称与 IP 地址之间设置映射,然后才能在客户端和应用中使用自定义 DNS 名称连接到实例。此映射称为 DNS 解析。如果您要使用专用连接,请在相应 Virtual Private Cloud (VPC) 网络的专用 DNS 区域中创建 DNS 记录。
如需为实例创建自定义 DNS 记录,请执行以下操作:
检索实例的 IP 地址。运行以下命令:
gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
进行以下替换:
- INSTANCE_NAME:Cloud SQL 实例的名称
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
在响应中,查找
ipAddresses:
字段。例如:
ipAddresses: - ipAddress: 192.0.2.4 type: PRIVATE
您可以检索为专用服务访问通道、Private Service Connect 或两者配置的实例的专用 IP 地址。
向应用使用的 DNS 区域添加两条 DNS 记录。 您可以使用自行管理的 DNS 服务器,也可以使用应用所用的 Cloud DNS 专用可用区。
- 为实例的 IP 地址创建
A
记录 - 创建包含实例连接名称的
TXT
记录。
标准数据库客户端使用
A
记录来查找 IP 地址以建立连接。Cloud SQL 语言连接器和 Cloud SQL Auth 代理使用TXT
记录来查找实例连接名称。例如,您的实例的连接字符串为
my-project:region:my-instance
,但您想使用 DNS 名称prod-db.mycompany.example.com
进行连接。如果公司网络中实例的 IP 地址为192.0.2.4
,请创建以下 DNS 记录:Record type: A Name: prod-db.mycompany.example.com Value: 192.0.2.4 TTL: 600 Record type: TXT Name: prod-db.mycompany.example.com Value: my-project:region:my-instance TTL: 600
- 为实例的 IP 地址创建
使用自定义 DNS 名称连接到实例
连接到 Cloud SQL for PostgreSQL 实例时,请将自定义 DNS 名称配置为主机名,并在客户端中启用服务器身份验证。例如,使用 psql
客户端时,请指定 sslmode=verify-full
如果您要从外部网络连接到专用 Cloud SQL 实例,则必须配置 Cloud SQL 实例及其 Virtual Private Cloud (VPC) 网络,以允许外部连接并让 Cloud DNS 与本地系统通信。如需详细了解此配置,请参阅从外部来源连接和为本地系统配置 DNS。
限制
- 您无法向 Cloud SQL 实例的服务器证书添加超过三个 DNS 名称作为自定义 SAN 值。
- 您可以向证书添加 DNS 名称,作为实例的自定义 SAN 值,但 DNS 名称的长度上限为 253 个字符。
- 添加到实例证书中的 DNS 名称不能包含通配符字符 (
*
) 或尾随点。例如,不允许使用test.example.com.
。 - DNS 名称必须是符合 RFC 1034 标准的有效名称。
- 只能为
CUSTOMER_MANAGED_CAS_CA
实例指定自定义 SAN 值。
后续步骤
- 在 Cloud SQL 实例上管理 SSL/TLS 证书。
- 详细了解在 Google Cloud中处理加密的方式。
- 使用 SSL/TLS 证书连接到您的 Cloud SQL 实例。
- 详细了解 PostgreSQL 如何使用 SSL/TLS 证书。