使用 CLI 创建和管理 Azure Database for PostgreSQL(单一服务器)的专用链接

适用于:Azure Database for PostgreSQL - 单一服务器

重要

Azure Database for PostgreSQL - 单一服务器即将停用。 我们强烈建议升级到 Azure Database for PostgreSQL 灵活服务器。 有关迁移到 Azure Database for PostgreSQL - 灵活服务器的详细信息,请参阅 Azure Database for PostgreSQL 单一服务器会发生什么情况?

专用终结点是 Azure 中专用链接的构建基块。 它使 Azure 资源(例如虚拟机 (VM))能够以私密方式来与专用链接资源通信。 本文介绍如何使用 Azure CLI 在 Azure 虚拟网络和带有 Azure 专用终结点的 Azure Database for PostgreSQL 单一服务器中创建 VM。

注意

专用链接功能仅适用于“常规用途”或“内存优化”定价层中的 Azure Database for PostgreSQL 服务器。 请确保数据库服务器位于其中一个定价层中。

先决条件

若要逐步执行本操作方法指南,需要:

本快速入门需要使用 Azure CLI 版本 2.0.28 或更高版本。 若要查找已安装的版本,请运行 az --version。 有关安装或升级信息,请参阅安装 Azure CLI

创建资源组

在创建任何资源之前,必须创建一个资源组以托管虚拟网络。 使用 az group create 创建资源组。 此示例在 chinaeast2 位置创建一个名为 myResourceGroup 的资源组 :

az group create --name myResourceGroup --location chinaeast2

创建虚拟网络

使用 az network vnet create 创建虚拟网络。 此示例创建名为 myVirtualNetwork 的默认虚拟网络,它具有一个名为 mySubnet 的子网:

az network vnet create \
--name myVirtualNetwork \
--resource-group myResourceGroup \
--subnet-name mySubnet

禁用子网专用终结点策略

Azure 会将资源部署到虚拟网络中的子网,因此,你需要创建或更新子网,以禁用专用终结点网络策略。 使用 az network vnet subnet update 更新名为 mySubnet 的子网配置:

az network vnet subnet update \
--name mySubnet \
--resource-group myResourceGroup \
--vnet-name myVirtualNetwork \
--disable-private-endpoint-network-policies true

创建 VM

使用 az vm create 创建 VM。 出现提示时,请提供要用作 VM 登录凭据的密码。 此示例创建名为 myVm 的 VM:

az vm create \
  --resource-group myResourceGroup \
  --name myVm \
  --image Win2019Datacenter

记下 VM 的公共 IP 地址。 在下一步中,此地址将用于从 Internet 连接到 VM。

创建 Azure Database for PostgreSQL(单一服务器)

使用 az postgres server create 命令创建 Azure Database for PostgreSQL。 请记住,PostgreSQL 服务器名称必须在 Azure 中是唯一的,因此请将占位符值替换为你上面使用的唯一值:

# Create a server in the resource group

[!INCLUDE [applies-to-postgresql-single-server](../includes/applies-to-postgresql-single-server.md)]

[!INCLUDE [azure-database-for-postgresql-single-server-deprecation](../includes/azure-database-for-postgresql-single-server-deprecation.md)]


az postgres server create \
--name mydemoserver \
--resource-group myresourcegroup \
--location chinaeast2 \
--admin-user mylogin \
--admin-password <server_admin_password> \
--sku-name GP_Gen5_2

创建专用终结点

为虚拟网络中的 PostgreSQL 服务器创建专用终结点:

az network private-endpoint create \  
    --name myPrivateEndpoint \  
    --resource-group myResourceGroup \  
    --vnet-name myVirtualNetwork  \  
    --subnet mySubnet \  
    --private-connection-resource-id $(az resource show -g myResourcegroup -n mydemoserver --resource-type "Microsoft.DBforPostgreSQL/servers" --query "id" -o tsv) \    
    --group-id postgresqlServer \  
    --connection-name myConnection  

配置专用 DNS 区域

为 PostgreSQL 服务器域创建专用 DNS 区域,并创建一个与虚拟网络关联的链接。

az network private-dns zone create --resource-group myResourceGroup \ 
   --name  "privatelink.postgres.database.chinacloudapi.cn" 
az network private-dns link vnet create --resource-group myResourceGroup \ 
   --zone-name  "privatelink.postgres.database.chinacloudapi.cn"\ 
   --name MyDNSLink \ 
   --virtual-network myVirtualNetwork \ 
   --registration-enabled false

#Query for the network interface ID  

networkInterfaceId=$(az network private-endpoint show --name myPrivateEndpoint --resource-group myResourceGroup --query 'networkInterfaces[0].id' -o tsv)


az resource show --ids $networkInterfaceId --api-version 2019-04-01 -o json
# Copy the content for privateIPAddress and FQDN matching the Azure database for PostgreSQL name

[!INCLUDE [applies-to-postgresql-single-server](../includes/applies-to-postgresql-single-server.md)]

[!INCLUDE [azure-database-for-postgresql-single-server-deprecation](../includes/azure-database-for-postgresql-single-server-deprecation.md)]


#Create DNS records 

az network private-dns record-set a create --name myserver --zone-name privatelink.postgres.database.chinacloudapi.cn --resource-group myResourceGroup  
az network private-dns record-set a add-record --record-set-name myserver --zone-name privatelink.postgres.database.chinacloudapi.cn --resource-group myResourceGroup -a <Private IP Address>

注意

客户 DNS 设置中的 FQDN 未解析为已配置的专用 IP。 你必须为已配置的 FQDN 设置一个 DNS 区域,如此处所示。

注意

在某些情况下,Azure Database for PostgreSQL 和 VNet 子网位于不同的订阅中。 在这些情况下,必须确保以下配置:

  • 请确保两个订阅都注册了 Microsoft.DBforPostgreSQL 资源提供程序。 有关详细信息,请参阅资源提供程序

从 Internet 连接到 VM

从 Internet 连接到 VM myVm,如下所示:

  1. 在门户的搜索栏中,输入 myVm

  2. 选择“连接”按钮。 选择“连接”按钮后,“连接到虚拟机”随即打开

  3. 选择“下载 RDP 文件”。 Azure 会创建远程桌面协议 ( .rdp) 文件,并将其下载到计算机。

  4. 打开 downloaded.rdp 文件。

    1. 出现提示时,选择“连接”。

    2. 输入在创建 VM 时指定的用户名和密码。

      注意

      可能需要选择“更多选择”“使用其他帐户”,以指定在创建 VM 时输入的凭据。

  5. 选择“确定”。

  6. 你可能会在登录过程中收到证书警告。 如果收到证书警告,请选择“确定”或“继续” 。

  7. VM 桌面出现后,将其最小化以返回到本地桌面。

从 VM 对 PostgreSQL 服务器进行私密访问

  1. myVM 的远程桌面中,打开 PowerShell。

  2. 输入 nslookup mydemopostgresserver.privatelink.postgres.database.chinacloudapi.cn

    将收到类似于下面的消息:

    Server:  UnKnown
    Address:  168.63.129.16
    Non-authoritative answer:
    Name:    mydemopostgresserver.privatelink.postgres.database.chinacloudapi.cn
    Address:  10.1.3.4
    
  3. 使用任何可用的客户端测试 PostgreSQL 服务器的专用链接连接。 以下示例使用 Azure 数据工作室来执行该操作。

  4. 在“新建连接”中,输入或选择以下信息:

    设置
    服务器类型 选择“PostgreSQL”。
    服务器名称 选择“mydemopostgresserver.privatelink.postgres.database.chinacloudapi.cn”
    用户名 输入用户名 username@servername,该用户名是在创建 PostgreSQL 服务器期间提供的。
    密码 输入创建 PostgreSQL 服务器期间提供的密码。
    SSL 选择“必需”。
  5. 选择“连接”。

  6. 浏览左侧菜单中的数据库。

  7. (可选)创建或查询 postgreSQL 服务器中的信息。

  8. 关闭与 myVm 的远程桌面连接。

清理资源

如果不再需要资源组及其所有资源,可以使用 az group delete 将其删除:

az group delete --name myResourceGroup --yes 

后续步骤