サーバーレスインスタンスのプライベートエンドポイントの管理
項目一覧
Atlas Kubernetes Operator は、次のプラットフォーム上のサーバーレスインスタンスのプライベートエンドポイントの管理をサポートしています。
Amazon Web Servicesを使用するAWS PrivateLink 機能。
Azure は Azure Private Link 機能を使用しています。
注意
サーバーレスインスタンスは Private Service Connect をサポートしていません。 Private Service Connect を設定する必要がある場合は、専有クラスターを使用してください。
MongoDBは、サーバーレスインスタンスでサポートされる構成と機能を徐々に増やしていく予定です。 MongoDBがサーバーレスインスタンスでサポートする予定の機能については、「 サーバーレスインスタンスの制限 」を参照してください。
開始する前に、 プライベートエンドポイントの管理 を参照してください。
手順
クライアントがプライベートエンドポイントを使用して Atlas サーバーレスインスタンスに接続できるようにするには、次の手順に従います。
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
カスタム リソース の stringフィールド内の各プライベートエンドポイントのサービス名の に注目してください。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
プライベートエンドポイントのサービス名を識別する一意のstring 。 この値は、AtlasDeployment
カスタム リソースのstatus.serverlessPrivateEndpoints.EndpointServiceName
フィールド内で見つけます。your-application-subnet-ids
Amazon Web Services VPCが使用するサブネットを識別する一意の文字列。 各サブネットはスペースで区切ります。 これらの値は、 アカウントの {4Subnet Amazon Web Servicesダッシュボードで確認できます。
重要:少なくとも 1 つのサブネットを指定する必要があります。 そうしないと、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 ServicesVPC アカウントのVPC Amazon Web Servicesダッシュボードで確認できます。
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
フィールドの値を指定します。コマンドを実行します。
注意
接続文字列は次の例とは異なります。 複数のプライベートエンドポイントがある場合、シークレットには適切な数値サフィックスを持つ複数の
connectionStringPrivate
フィールドとconnectionStringPrivateSvr
フィールドが含まれます(例:connectionStringPrivate1
、connectionStringPrivate2
など)。{ "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
リソース の フィールドと フィールド内の各プライベートエンドポイントのサービス リソース ID とサービス名をメモします。status.serverlessPrivateEndpoints.PrivateLinkServiceResourceId
status.serverlessPrivateEndpoints.EndpointServiceName
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
プライベートエンドポイントのサービス名を識別する一意のstring 。 この値は、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
フィールドの値を指定します。コマンドを実行します。
注意
接続文字列は次の例とは異なります。 複数のプライベートエンドポイントがある場合、シークレットには適切な数値サフィックスを持つ複数の
connectionStringPrivate
フィールドとconnectionStringPrivateSvr
フィールドが含まれます(例:connectionStringPrivate1
、connectionStringPrivate2
など)。{ "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