専有クラスターのプライベートエンドポイントの管理
項目一覧
注意
この機能は、次の配置では使用できません。
M0
クラスターM2/M5
クラスターFlex クラスター
Atlas Kubernetes Operator は、次のプラットフォーム上の専有クラスターのプライベートエンドポイントの管理をサポートしています。
Amazon Web Servicesを使用するAWS PrivateLink 機能。
Azure は Azure Private Link 機能を使用しています。
Google Cloud Platform で Private Service Connect 機能を使用。
開始する前に、 プライベートエンドポイントの管理 を参照してください。
手順
クライアントがプライベートエンドポイントを使用して Atlas 専用クラスターに接続できるようにするには、次の手順に従います。
spec.privateEndpoints
パラメータを指定します。
spec.privateEndpoints
AtlasProject
カスタム リソース の パラメータを指定します。spec.privateEndpoints.provider
フィールドにAWS
を指定します。 プレースホルダー {aws-region}
をプライベートエンドポイントのAmazon Web Servicesのリージョン情報に置き換え、次のコマンドを実行します。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: Test Atlas Operator Project privateEndpoints: - provider: "AWS" region: "{aws-region}" EOF
Atlas は選択したリージョンにVPCリソースを作成します。 これが完了するまでに数分かかる場合があります。
プライベートエンドポイントのサービス名を見つけます。
次のコマンドを実行します:
kubectl get atlasproject my-project -o yaml AtlasProject
カスタム リソース の stringフィールド内の各プライベートエンドポイントのサービス名の に注目してください。status.privateEndpoints.serviceName
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 。 この値は、
AtlasProject
カスタム リソースのstatus.privateEndpoints.serviceName
フィールド内で見つけます。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.privateEndpoints
パラメータを更新します。
spec.privateEndpoints
AtlasProject
カスタム リソース の パラメータを更新します。Amazon Web Servicesリージョンを指定し、vpce-id
をプライベートエンドポイントの VpcEndpointId
値に置き換え、次のコマンドを実行します。
注意
ピア の一意の識別子は、Amazon Web ServicesVPC アカウントのVPC Amazon Web Servicesダッシュボードで確認できます。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: Test Atlas Operator Project privateEndpoints: - provider: "AWS" region: "{aws-region}" id: "{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.privateEndpoints
パラメータを指定します。
spec.privateEndpoints
AtlasProject
カスタム リソース の パラメータを指定します。spec.privateEndpoints.provider
フィールドにAZURE
を指定します。 プレースホルダー{azure-region}
をプライベートエンドポイントのAzure リージョン情報に置き換え、次のコマンドを実行します。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: Test Atlas Operator Project privateEndpoints: - provider: "AZURE" region: "{azure-region}" 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 atlasproject my-project -o yaml カスタム
AtlasProject
リソース の フィールドと フィールド内の各プライベートエンドポイントのサービス リソース ID とサービス名をメモします。status.privateEndpoints.serviceResourceId
status.privateEndpoints.serviceName
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 。 この値は、
AtlasProject
カスタム リソースのstatus.privateEndpoints.serviceResourceId
フィールド内で見つけます。serviceName
プライベートエンドポイントのサービス名を識別する一意のstring 。 この値は、
AtlasProject
カスタム リソースのstatus.privateEndpoints.serviceName
フィールド内で見つけます。
spec.privateEndpoints
パラメータを更新します。
spec.privateEndpoints
AtlasProject
カスタム リソース の パラメータを更新します。プライベートエンドポイントのAzure リージョン、リソース ID、IP アドレス情報を指定し、次のコマンドを実行します。
注意
AzureダッシュボードのPropertiesページには、 Resource IDフィールドで作成したプライベートエンドポイントの一意の識別子が表示されます。
AzureダッシュボードのOverviewページには、 Private IPフィールドに作成したプライベートエンドポイント ネットワーク インターフェイスのプライベート IP アドレスが表示されます。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: Test Atlas Operator Project privateEndpoints: - provider: "Azure" region: "{azure-region}" id: "{resource-id}" ip: "{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
spec.privateEndpoints
パラメータを指定します。
spec.privateEndpoints
AtlasProject
カスタム リソース の パラメータを指定します。spec.privateEndpoints.provider
フィールドにGCP
を指定します。 プレースホルダー{gcp-region}
をプライベートエンドポイントのGoogle Cloud Platform リージョン情報に置き換え、次のコマンドを実行します。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: Test Atlas Operator Project privateEndpoints: - provider: "GCP" region: "{gcp-region}" EOF
Atlas は選択したリージョンにVPCリソースを作成します。 これが完了するまでに数分かかる場合があります。
{unique-ID}
プライベートエンドポイントの を見つけます。
次のコマンドを実行します:
kubectl get atlasproject my-project -o yaml 各サービス アタッチメント名で、
projects/
の後に続く{unique-id}
に注意してください。 次の例の{unique-id}
はp-ogyvk1plka2anycnzl6znr9p
です。例
"serviceAttachmentNames": [ "projects/p-ogyvk1plka2anycnzl6znr9p/regions/us-east1/serviceAttachments/sa-us-east1-6274f45bcce0e51662a29b05-0", "projects/p-ogyvk1plka2anycnzl6znr9p/regions/us-east1/serviceAttachments/sa-us-east1-6274f45bcce0e51662a29b05-1", "projects/p-ogyvk1plka2anycnzl6znr9p/regions/us-east1/serviceAttachments/sa-us-east1-6274f45bcce0e51662a29b05-2", "projects/p-ogyvk1plka2anycnzl6znr9p/regions/us-east1/serviceAttachments/sa-us-east1-6274f45bcce0e51662a29b05-3", "projects/p-ogyvk1plka2anycnzl6znr9p/regions/us-east1/serviceAttachments/sa-us-east1-6274f45bcce0e51662a29b05-4", "projects/p-ogyvk1plka2anycnzl6znr9p/regions/us-east1/serviceAttachments/sa-us-east1-6274f45bcce0e51662a29b05-5" ]
プライベートエンドポイントを構成します。
Atlas UI を使用してプライベートエンドポイントを編集し、必要なスクリプトを生成するには、「プライベートエンドポイントの構成 」を参照してください。
プライベートエンドポイントを手動で設定する方法
次の shell スクリプトをコピーします。
!/bin/bash gcloud config set project {google-cloud-project-id} for i in {0..5} do gcloud compute addresses create {private-service-connect-endpoint-prefix}-ip-$i --region={gcp-region} --subnet={subnet-name} done for i in {0..5} do if [ $(gcloud compute addresses describe {private-service-connect-endpoint-prefix}-ip-$i --region={gcp-region} --format="value(status)") != "RESERVED" ]; then echo "{private-service-connect-endpoint-prefix}-ip-$i is not RESERVED"; exit 1; fi done for i in {0..5} do gcloud compute forwarding-rules create {private-service-connect-endpoint-prefix}-$i --region={gcp-region} --network={vpc-name} --address={private-service-connect-endpoint-prefix}-ip-$i --target-service-attachment=projects/{unique-ID}/regions/{gcp-region}/serviceAttachments/sa-{gcp-region}-{org-id}-$i done if [ $(gcloud compute forwarding-rules list --regions={gcp-region} --format="csv[no-heading](name)" --filter="name:{private-service-connect-endpoint-prefix}" | wc -l) -gt 50 ]; then echo "Project has too many forwarding rules that match prefix {endpoint-name}. Either delete the competing resources or choose another endpoint prefix." exit 2; fi gcloud compute forwarding-rules list --regions={gcp-region} --format="json(IPAddress,name)" --filter="name:{private-service-connect-endpoint-prefix}" > atlasEndpoints-{endpoint-name}.json 次のプレースホルダーを、 Google Cloud Platform VPCの詳細に置き換えます。
google-cloud-project-id
IDGoogle Cloud Platformプロジェクトを識別する一意の 。この値は、 Google Cloud Platformの Dashboard ページで確認できます。
private-service-connect-endpoint-prefix
作成されたすべてのエンドポイントのプレフィックスを付け、エンドポイントグループを識別する、人間が判読可能なラベル。
gcp-region
プライベートエンドポイントのGoogle Cloud Platform リージョンを識別するラベル。
subnet-name
Google Cloud Platform VPC内のサブネットを識別する、人間に判読可能なラベル。 この値は、 Google Cloud Platformダッシュボードの VPC Networks ページで確認できます。
vpc-name
Atlas への接続に使用するVPCを識別する、人間が判読可能なラベル。 この値は、 Google Cloud Platformダッシュボードの VPC Networks ページで確認できます。
unique-id
プロジェクトのステータスを返すときに記録した一意string 。
org-id
組織 を識別する一意の 24桁の 16 進数 。stringAtlas
shell ファイルを
setup_psc.sh
として保存し、次のコマンドでファイルを保存したディレクトリからスクリプトを実行します。sh setup_psc.sh このスクリプトでは、IP アドレスと転送ルール名のリストを含む
atlasEndpoints-{endpoint-name}.json
出力ファイルが作成されます。Atlas Kubernetes Operator の出力をフォーマットするには、次のコマンドを実行します。
yq e -P atlasEndpoints-{endpoint-name}.json > atlasEndpoints-user-private-endpoint.yaml awk 'sub("name","endpointName")sub("IPAddress","ipAddress")' atlasEndpoints-user-private-endpoint.yaml 出力は、次の例のようになります。
- ipAddress: 10.0.0.00 endpointName: {endpoint-name}-0 - ipAddress: 10.0.0.01 endpointName: {endpoint-name}-1 - ipAddress: 10.0.0.02 endpointName: {endpoint-name}-2 - ipAddress: 10.0.0.03 endpointName: {endpoint-name}-3 - ipAddress: 10.0.0.04 endpointName: {endpoint-name}-4 - ipAddress: 10.0.0.05 endpointName: {endpoint-name}-5
spec.privateEndpoints
パラメータを更新します。
spec.privateEndpoints
AtlasProject
カスタム リソース の パラメータを更新します。Google Cloud Platform リージョン、 Google Cloud Project ID 、 Private Service Endpoint Prefix 、出力情報を指定し、次のコマンドを実行します。
cat <<EOF | kubectl apply -f - apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: Test Atlas Operator Project privateEndpoints: - provider: "GCP" region: "{gcp-region}" gcpProjectId: "{project-id}" endpointGroupName: "{endpoint-name}" endpoints: - ipAddress: {ip-address} endpointName: {endpoint-name}-0 - ipAddress: {ip-address} endpointName: {endpoint-name}-1 - ipAddress: {ip-address} endpointName: {endpoint-name}-2 - ipAddress: {ip-address} endpointName: {endpoint-name}-3 - ipAddress: {ip-address} endpointName: {endpoint-name}-4 - ipAddress: {ip-address} endpointName: {endpoint-name}-5 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