本页介绍了如何为 Cloud SQL 实例设置自定义域名系统 (DNS) 名称。
概览
您可以配置 Cloud SQL 实例,以便您的应用可以使用贵组织管理的自定义 DNS 名称进行连接。如果您想使用自定义 DNS 名称(而非 IP 地址)连接到 Cloud SQL 实例,则请配置自定义主题备用名称 (SAN)。您可以在创建或更新实例时配置自定义 SAN。
当您将自定义 DNS 名称作为自定义 SAN 配置添加到实例时,Cloud SQL 会将自定义 DNS 名称插入到实例服务器证书的 SAN 字段中。通过此自定义设置,您可以安全地使用自定义 DNS 名称进行主机名验证。您可以将最多包含三个自定义 DNS 名称的英文逗号分隔列表添加到自定义 SAN 配置中。出于安全考虑,您只能对使用 CUSTOMER_MANAGED_CAS_CA
配置为服务器 CA 模式的实例使用自定义 SAN 配置。
为实例配置自定义 DNS 名称后,您可以使用该自定义 DNS 名称连接数据库客户端或应用,包括 Cloud SQL 语言连接器和 Cloud SQL Auth 代理。
工作流
如需为实例设置自定义 DNS 名称,请执行以下操作:
- 创建配置了客户管理的 CA 的实例。
- 向实例添加自定义 SAN 值。系统会将自定义 SAN 值插入到实例服务器证书的 SAN 字段中。
- 确定实例的 IP 地址。
- 为您的实例创建自定义 DNS 记录。
- 使用自定义 DNS 名称连接到实例。
准备工作
在为实例设置自定义 DNS 名称之前,请确保您拥有所需的角色和权限。
如果您要创建新的 Cloud SQL 实例,则必须为其服务器 CA 模式使用客户管理的证书授权机构 (CA),才能使用自定义 SAN。
使用自定义 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 实例及其虚拟专用云 (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 证书。