托管无服务器实例的私有端点
在此页面上
注意
Atlas已弃用 M2
和 M5
集群以及无服务器实例。在不久的将来, Atlas会自动将所有 M2
和 M5
集群迁移到 Flex 集群。对于无服务器实例, Atlas会根据您的使用情况决定将实例迁移到免费集群、Flex 集群还是专用集群,然后自动迁移您的无服务器实例。
为了在一段时间内保持 API 的向后兼容性, Atlas将继续允许通过相同的 API(旧 API 和新 API)托管这些迁移的集群,包括在使用Atlas Kubernetes Operator时。 API 的向后兼容性将保持到 1 月 2026,届时旧的 API 将被删除,只有与 Flex 集群相关的 API 才会保留。
对无服务器实例上的私有端点的支持将于 2025 3 月结束。 您必须在 3 月 2025之前更新Atlas Kubernetes Operator配置,才能删除私有端点。 您必须在 1 月 2026之前从Atlas Kubernetes Operator配置中删除所有剩余的 M2
、M5
和无服务器实例功能。
如果您的工作负载需要 私有端点或持续备份和时点恢复,请切换到Atlas专用集群。要学习;了解更多信息,请参阅 迁移到 Flex 集群和Atlas Flex 迁移指南。
Atlas Kubernetes Operator支持管理以下平台上无服务器实例的私有端点:
Amazon Web Services使用 的AWS PrivateLink 功能。
使用 Azure Private Link 的 Azure 功能。
注意
无服务器实例不支持“私有服务连接”。 如果需要设置“私有服务连接”,请使用专用集群。
开始之前,请参阅托管私有端点。
步骤
要使客户端能够使用私有端点连接到Atlas Serverless 实例,启用以下操作:
指定spec.serverlessSpec.privateEndpoints
参数。
为 spec.serverlessSpec.privateEndpoints
AtlasDeployment
自定义资源 指定 参数。在spec.serverlessSpec.privateEndpoints.name
字段中,指定唯一标签来标识私有端点并运行以下命令:
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasDeployment metadata: name: atlas-deployment-serverless spec: projectRef: name: my-project serverlessSpec: name: serverless-instance tags: - key: "environment" value: "production" providerSettings: providerName: SERVERLESS backingProviderName: AWS regionName: US_EAST_1 privateEndpoints: - name: "{unique-private-endpoint-label}" EOF
Atlas创建VPC资源。 这可能需要几分钟才能完成。
查找私有端点的服务名称。
运行以下命令:
kubectl get atlasdeployment atlas-deployment-serverless -o yaml 请注意
AtlasDeployment
自定义资源的status.serverlessPrivateEndpoints.EndpointServiceName
字段中每个私有端点的服务名称字符串。
使用 Amazon Web Services CLI 配置每个私有端点。
要创建应用程序VPC接口端点,请执行以下操作:
复制以下命令:
aws ec2 create-vpc-endpoint --vpc-id {your-application-vpc-id} --region {aws-region} --service-name {service-name-string} --vpc-endpoint-type Interface --subnet-ids {your-application-subnet-ids} 将以下占位符替换为有关Amazon Web Services VPC的详细信息:
your-application-vpc-id
标识对等 AWS VPC 的唯一字符串。在您的 AWS 帐户的 VPC 仪表盘上找到此值。
aws-region
用于标识私有端点的Amazon Web Services区域的标签。
service-name-string
标识私有端点服务名称的唯一字符串。 在
AtlasDeployment
自定义资源的status.serverlessPrivateEndpoints.EndpointServiceName
字段中找到此值。your-application-subnet-ids
标识AWS VPC使用的子网的唯一字符串。 用空格分隔每个子网。 在您的Amazon Web Services帐户的 Subnet仪表盘上找到这些值。
重要提示:您必须至少指定一个子网。 否则,Amazon Web Services 将不会在您的 中预配VPC 接口端点 。VPC中的客户端需要接口端点才能向私有端点发送流量。
请注意输出中的
VpcEndpointId
值。例子
"VpcEndpoint": { "VpcEndpointId": "vpce-XXXXXX", "VpcEndpointType": "Interface", "VpcId": "vpc-XXXXX", "ServiceName": "com.amazonaws.vpce.{aws-region}.vpce-svc-XXXX", "State": "pendingAcceptance",
要了解更多信息,请参阅 创建接口端点 在Amazon Web Services 文档中。
更新spec.serverlessSpec.privateEndpoints
参数。
更新spec.serverlessSpec.privateEndpoints
AtlasDeployment
自定义资源 的 参数。将vpce-id
替换为私有端点的VpcEndpointId
值,然后运行以下命令:
注意
您可以在 Amazon Web Services 账户的 VPC 仪表盘上找到对等互连 Amazon Web Services VPC 的唯一标识符。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasDeployment metadata: name: atlas-deployment-serverless spec: projectRef: name: my-project serverlessSpec: name: serverless-instance tags: - key: "environment" value: "production" providerSettings: providerName: SERVERLESS backingProviderName: AWS regionName: US_EAST_1 privateEndpoints: - name: "{unique-private-endpoint-label}" cloudProviderEndpointID: "{vpce-id}" EOF
检索 Atlas Kubernetes Operator 创建的用于连接到集群的密钥。
复制以下命令:
重要
以下命令需要
jq
1.6 或更高版本。kubectl get secret {my-project}-{my-atlas-cluster}-{my-database-user} -o json | jq -r '.data | with_entries(.value |= @base64d)'; 对于自定义资源,用详细信息替换以下占位符:
my-project
指定
AtlasProject
自定义资源的metadata
字段的值。my-atlas-cluster
指定
AtlasDeployment
自定义资源的metadata
字段的值。my-database-user
指定
AtlasDatabaseUser
自定义资源的metadata
字段的值。运行命令。
注意
您的连接字符串将与以下示例不同。 如果您有多个私有端点,则密钥包含多个带有相应数字后缀(例如
connectionStringPrivate1
、connectionStringPrivate2
等)的connectionStringPrivate
和connectionStringPrivateSvr
字段。{ "connectionStringPrivate": "mongodb://pl-0-eastus2.uzgh6.mongodb.net:1024,pl-0-eastus2.uzgh6.mongodb.net:1025,pl-0-eastus2.uzgh6.mongodb.net:1026/?ssl=truereplicaSet=atlas-18bndf-shard-0", "connectionStringPrivateSrv": "mongodb+srv://cluster0-pl-0.uzgh6.mongodb.net", "password": "P@@sword%", "username": "theuser" } 您可以使用此 密钥 在您的应用程序中:
containers: - name: test-app env: - name: "CONNECTION_STRING" valueFrom: secretKeyRef: name: my-project-my-atlas-cluster-my-database-user key: connectionStringPrivate
指定spec.serverlessSpec.privateEndpoints
参数。
为 spec.serverlessSpec.privateEndpoints
AtlasDeployment
自定义资源 指定 参数。在spec.serverlessSpec.privateEndpoints.name
字段中,指定唯一标签来标识私有端点并运行以下命令:
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasDeployment metadata: name: atlas-deployment-serverless spec: projectRef: name: my-project serverlessSpec: name: serverless-instance tags: - key: "environment" value: "production" providerSettings: providerName: SERVERLESS backingProviderName: AWS regionName: US_EAST_1 privateEndpoints: - name: "{unique-private-endpoint-label}" EOF
Atlas创建 VNET 资源。 这可能需要几分钟才能完成。
禁用私有端点网络策略。
Atlas 不支持私有端点的网络策略。
复制以下命令:
az network vnet subnet update --resource-group {resource-group-name} --vnet-name {vnet-name} --name {subnet-name} --disable-private-endpoint-network-policies true 将以下占位符替换为有关Azure VNet 的详细信息:
resource-group-name
资源群组的人类可读标签,其中包含要用于连接到Atlas的 VNet。 在Azure仪表盘的Resource Group Properties页面上查找此值。
vnet-name
人类可读标签,用于标识要用于连接到Atlas的 VNet。 在Azure仪表盘的Virtual Network页面上查找此值。
subnet-name
人类可读标签,用于标识Azure VNet 中的子网。 在Azure仪表盘的Virtual Network Subnets页面上查找此值。
要学习;了解详情,请参阅 管理私有端点的网络策略 在 Azure 文档中。
查找私有端点的服务 ID 和名称。
运行以下命令:
kubectl get atlasdeployment atlas-deployment-serverless -o yaml 请注意
AtlasDeployment
自定义资源的status.serverlessPrivateEndpoints.PrivateLinkServiceResourceId
和status.serverlessPrivateEndpoints.EndpointServiceName
字段中每个私有端点的服务资源ID和服务名称。
使用Azure CLI配置每个私有端点。
要创建私有端点,请执行以下操作:
复制以下命令:
az network private-endpoint create --resource-group {resource-group-name} --name {endpoint-name} --vnet-name {vnet-name} --subnet {subnet-name} --private-connection-resource-id {serviceResourceId} --connection-name {serviceName} --manual-request true 将以下占位符替换为有关Azure VNet 的详细信息:
resource-group-name
资源群组的人类可读标签,其中包含要用于连接到Atlas的 VNet。 在Azure仪表盘的Resource Group Properties页面上查找此值。
endpoint-name
用于标识私有端点的人类可读标签。 立即指定。
vnet-name
人类可读标签,用于标识要用于连接到Atlas的 VNet。 在Azure仪表盘的Virtual Network页面上查找此值。
subnet-name
人类可读标签,用于标识Azure VNet 中的子网。 在Azure仪表盘的Virtual Network Subnets页面上查找此值。
serviceResourceId
标识私有端点服务资源的唯一string 。 在
AtlasDeployment
自定义资源的status.serverlessPrivateEndpoints.PrivateLinkServiceResourceId
字段中找到此值。serviceName
标识私有端点服务名称的唯一字符串。 在
AtlasDeployment
自定义资源的status.serverlessPrivateEndpoints.EndpointServiceName
字段中找到此值。
更新spec.serverlessPrivateEndpoints
参数。
更新spec.serverlessSpec.privateEndpoints
AtlasDeployment
自定义资源 的 参数。指定私有端点的资源ID和IP解决信息,并运行以下命令:
注意
Azure仪表盘上的Properties页面显示您在Resource ID字段中创建的私有端点的唯一标识符。
Azure仪表盘上的Overview页面显示您在Private IP字段中创建的私有端点网络接口的私有IP解决。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasDeployment metadata: name: atlas-deployment-serverless spec: projectRef: name: my-project serverlessSpec: name: serverless-instance tags: - key: "environment" value: "production" providerSettings: providerName: SERVERLESS backingProviderName: AWS regionName: US_EAST_1 privateEndpoints: - name: "{unique-private-endpoint-label}" cloudProviderEndpointID: "{resource-id}" privateEndpointIpAddress: "{private-ip}" EOF
检索 Atlas Kubernetes Operator 创建的用于连接到集群的密钥。
复制以下命令:
重要
以下命令需要
jq
1.6 或更高版本。kubectl get secret {my-project}-{my-atlas-cluster}-{my-database-user} -o json | jq -r '.data | with_entries(.value |= @base64d)'; 对于自定义资源,用详细信息替换以下占位符:
my-project
指定
AtlasProject
自定义资源的metadata
字段的值。my-atlas-cluster
指定
AtlasDeployment
自定义资源的metadata
字段的值。my-database-user
指定
AtlasDatabaseUser
自定义资源的metadata
字段的值。运行命令。
注意
您的连接字符串将与以下示例不同。 如果您有多个私有端点,则密钥包含多个带有相应数字后缀(例如
connectionStringPrivate1
、connectionStringPrivate2
等)的connectionStringPrivate
和connectionStringPrivateSvr
字段。{ "connectionStringPrivate": "mongodb://pl-0-eastus2.uzgh6.mongodb.net:1024,pl-0-eastus2.uzgh6.mongodb.net:1025,pl-0-eastus2.uzgh6.mongodb.net:1026/?ssl=truereplicaSet=atlas-18bndf-shard-0", "connectionStringPrivateSrv": "mongodb+srv://cluster0-pl-0.uzgh6.mongodb.net", "password": "P@@sword%", "username": "theuser" } 您可以使用此 密钥 在您的应用程序中:
containers: - name: test-app env: - name: "CONNECTION_STRING" valueFrom: secretKeyRef: name: my-project-my-atlas-cluster-my-database-user key: connectionStringPrivate