Nota
Esta característica no está disponible para ninguna de las siguientes implementaciones:
M0ClústeresClústeres Flex
Atlas Kubernetes Operator admite la gestión de nodos privados para clústeres dedicados en las siguientes plataformas:
AWS utilizando la funcionalidad AWS PrivateLink.
Azure usando la funcionalidad Azure Private Link.
Google Cloud utiliza la funcionalidad Private Service Connect.
Antes de comenzar, consulte Administrar nodos privados.
Procedimiento
Para permitir que los clientes se conecten a los clústeres dedicados de Atlas mediante nodos privados:
Especifica el parámetro spec.privateEndpoints.
Especifique el parámetro spec.privateEndpoints para el AtlasProject Recurso personalizado. En el campo spec.privateEndpoints.provider, especifica AWS. Reemplaza el marcador de posición {aws-region} con la información de la región AWS para tus nodos privados y ejecuta el siguiente comando:
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 crea los recursos VPC en la región que seleccionó. Esto puede llevar varios minutos completarse.
Encuentra los nombres de servicio para tus nodos privados.
Ejecuta el siguiente comando:
kubectl get atlasproject my-project -o yaml Tome nota de la string del nombre del servicio para cada uno de los nodos privados dentro del campo
status.privateEndpoints.serviceNamedeAtlasProjectCustom Resource.
Utiliza la CLI de AWS para configurar cada nodo privado.
Para crear el VPC de tu aplicación, endpoint de la interfaz:
Copie el siguiente comando:
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} Reemplace los siguientes marcadores de posición con los detalles sobre su AWS VPC:
your-application-vpc-idString única que identifica la VPC de emparejamiento AWS VPC. Encontrar este valor en el tablero VPC de la cuenta AWS.
aws-regionEtiqueta que identifica la región de AWS del endpoint privado.
service-name-stringstring única que identifica el nombre del servicio para tu endpoint privado. Encuentra este valor en el
status.privateEndpoints.serviceNamecampo delAtlasProjectrecurso personalizadoyour-application-subnet-idsCadenas únicas que identifican las subredes que utiliza tu VPC de AWS. Separa cada subred con un espacio. Puedes encontrar estos valores en el panel Subnet de tu cuenta de AWS.
IMPORTANTE: Debe especificar al menos una subred. Si no lo haces, AWS no aprovisionará un endpoint de la interfaz en tu VPC. Se requiere un endpoint de interfaz para que los clientes en tu VPC envíen tráfico al endpoint privado.
Ejecuta el comando con el AWS CLI.
Toma nota del valor
VpcEndpointIden la salida.Ejemplo
"VpcEndpoint": { "VpcEndpointId": "vpce-XXXXXX", "VpcEndpointType": "Interface", "VpcId": "vpc-XXXXX", "ServiceName": "com.amazonaws.vpce.{aws-region}.vpce-svc-XXXX", "State": "pendingAcceptance",
Para obtener más información, consulta Crear un endpoint de la interfaz en la documentación de AWS.
Actualiza el parámetro spec.privateEndpoints.
Actualice el spec.privateEndpoints parámetro para el AtlasProject recurso personalizado. Especifique la región de Amazon Web Services y sustituya vpce-id por los valores VpcEndpointId para sus nodos privados y ejecute el siguiente comando:
Nota
You can find the unique identifier of the peer AWS VPC on the VPC dashboard in your AWS account.
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
Recuperar el secreto que Atlas Kubernetes Operator creó para conectarse al clúster.
Copie el siguiente comando:
Importante
El siguiente comando requiere
jq1.6 o superior.kubectl get secret {my-project}-{my-atlas-cluster}-{my-database-user} -o json | jq -r '.data | with_entries(.value |= @base64d)'; Reemplaza los siguientes marcadores de posición con los detalles para tus recursos personalizados:
my-projectEspecifica el valor del campo
metadatade tuAtlasProjectRecurso Personalizado.my-atlas-clusterEspecifica el valor del campo
metadatade tuAtlasDeploymentRecurso Personalizado.my-database-userEspecifica el valor del campo
metadatade tuAtlasDatabaseUserRecurso Personalizado.Ejecuta el comando.
Nota
Tus cadenas de conexión serán diferentes del siguiente ejemplo. Si tienes varios nodos privados, el secreto contiene varios campos
connectionStringPrivateyconnectionStringPrivateSvrcon el correspondiente sufijo numérico (por ejemplo,connectionStringPrivate1,connectionStringPrivate2, etc.).{ "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" } Puedes usar este secreto en tu aplicación:
containers: - name: test-app env: - name: "CONNECTION_STRING" valueFrom: secretKeyRef: name: my-project-my-atlas-cluster-my-database-user key: connectionStringPrivate
Especifica el parámetro spec.privateEndpoints.
Especifique el parámetro spec.privateEndpoints para el AtlasProject Recurso personalizado. En el campo spec.privateEndpoints.provider, especifique AZURE. Reemplace el marcador de posición {azure-region} con la información de la región de Azure para sus nodos privados y ejecute el siguiente comando:
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 crea los recursos VNET en la región que seleccionaste. Esto puede tardar varios minutos en completarse.
Desactivar las políticas de red de los nodos privados.
Atlas no admite políticas de red para nodos privados.
Copie el siguiente comando:
az network vnet subnet update --resource-group {resource-group-name} --vnet-name {vnet-name} --name {subnet-name} --disable-private-endpoint-network-policies true Reemplaza los siguientes marcadores de posición con los detalles de tu VNet de Azure:
resource-group-nameEtiqueta legible por humanos para el grupo de recursos que contiene la VNet que deseas utilizar para conectarse a Atlas. Encuentre este valor en la página Resource Group Properties del tablero de Azure.
vnet-nameEtiqueta legible por humanos que identifica la VNet que desea utilizar para conectarse a Atlas. Encuentre este valor en la página Virtual Network de su tablero Azure.
subnet-nameEtiqueta legible por humanos que identifica la subred en su Azure VNet. Encontrar este valor en la página Virtual Network Subnets del tablero de Azure.
Ejecutar el comando con el Azure CLI.
Para obtener más información, consulta Administrar políticas de red para nodos privados en la documentación de Azure.
Busca los IDs y los nombres de los servicios para tus nodos privados.
Ejecuta el siguiente comando:
kubectl get atlasproject my-project -o yaml Toma nota del ID del recurso de servicio y el nombre del servicio para cada uno de los nodos privados dentro de los campos
status.privateEndpoints.serviceResourceIdystatus.privateEndpoints.serviceNamedelAtlasProjectrecurso personalizado.
Utilice la CLI de Azure para configurar cada nodo privado.
Para crear tu endpoint privado:
Copie el siguiente comando:
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 Reemplaza los siguientes marcadores de posición con los detalles de tu VNet de Azure:
resource-group-nameEtiqueta legible por humanos para el grupo de recursos que contiene la VNet que deseas utilizar para conectarse a Atlas. Encuentre este valor en la página Resource Group Properties del tablero de Azure.
endpoint-nameEtiqueta legible por humanos que identifica tu endpoint privado. Especifica esto ahora.
vnet-nameEtiqueta legible por humanos que identifica la VNet que desea utilizar para conectarse a Atlas. Encuentre este valor en la página Virtual Network de su tablero Azure.
subnet-nameEtiqueta legible por humanos que identifica la subred en su Azure VNet. Encontrar este valor en la página Virtual Network Subnets del tablero de Azure.
serviceResourceIdstring única que identifica el recurso de servicio para tu nodo privado. Encuentra este valor en el campo
status.privateEndpoints.serviceResourceIddelAtlasProjectRecurso Personalizado.serviceNamestring única que identifica el nombre del servicio para tu endpoint privado. Encuentra este valor en el
status.privateEndpoints.serviceNamecampo delAtlasProjectrecurso personalizadoEjecutar el comando con el Azure CLI.
Actualiza el parámetro spec.privateEndpoints.
Actualiza el parámetro spec.privateEndpoints para el AtlasProject Custom Resource. Especifica la región de Azure, el ID de recurso y la información de la dirección IP de los nodos privados y ejecuta el siguiente comando:
Nota
La página Properties en su tablero de Azure muestra el identificador único para el nodo privado que creó en el campo Resource ID.
La página Overview en su tablero de Azure muestra la dirección IP privada de la interfaz de red del nodo privado que se creó en el campo Private 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
Recuperar el secreto que Atlas Kubernetes Operator creó para conectarse al clúster.
Copie el siguiente comando:
Importante
El siguiente comando requiere
jq1.6 o superior.kubectl get secret {my-project}-{my-atlas-cluster}-{my-database-user} -o json | jq -r '.data | with_entries(.value |= @base64d)'; Reemplaza los siguientes marcadores de posición con los detalles para tus recursos personalizados:
my-projectEspecifica el valor del campo
metadatade tuAtlasProjectRecurso Personalizado.my-atlas-clusterEspecifica el valor del campo
metadatade tuAtlasDeploymentRecurso Personalizado.my-database-userEspecifica el valor del campo
metadatade tuAtlasDatabaseUserRecurso Personalizado.Ejecuta el comando.
Nota
Tus cadenas de conexión serán diferentes del siguiente ejemplo. Si tienes varios nodos privados, el secreto contiene varios campos
connectionStringPrivateyconnectionStringPrivateSvrcon el correspondiente sufijo numérico (por ejemplo,connectionStringPrivate1,connectionStringPrivate2, etc.).{ "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" } Puedes usar este secreto en tu aplicación:
containers: - name: test-app env: - name: "CONNECTION_STRING" valueFrom: secretKeyRef: name: my-project-my-atlas-cluster-my-database-user key: connectionStringPrivate
Especifica el parámetro spec.privateEndpoints.
Especifique el parámetro spec.privateEndpoints para el AtlasProject Recurso personalizado. En el campo spec.privateEndpoints.provider, especifica GCP. Reemplace el marcador de posición {gcp-region} con la información de Google Cloud Platform región de sus nodos privados y ejecute el siguiente comando:
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 crea los recursos VPC en la región que seleccionó. Esto puede llevar varios minutos completarse.
Encuentra el {unique-ID} para tus nodos privados.
Ejecuta el siguiente comando:
kubectl get atlasproject my-project -o yaml Tenga en cuenta el
{unique-id}que sigue aprojects/en cada nombre de adjunto de servicio. El{unique-id}en el siguiente ejemplo esp-ogyvk1plka2anycnzl6znr9p.Ejemplo
"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" ]
Configure sus nodos privados.
Para editar los nodos privados y generar el script necesario con Atlas Interfaz de Usuario, consulta Configurar nodos privados
Para configurar tus nodos privados manualmente:
Copia el siguiente script de 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 Reemplaza los siguientes marcadores de posición con los detalles de tu VPC en Google Cloud:
google-cloud-project-idID único que identifica tu proyecto de Google Cloud. Encuentre este valor en la página Dashboard de su plataforma de Google Cloud.
private-service-connect-endpoint-prefixEtiqueta legible por humanos que antepone a todos los endpoint creados y que identifica el grupo de endpoint.
gcp-regionEtiqueta que identifica la región de Google Cloud Platform del endpoint privado.
subnet-nameEtiqueta legible por humanos que identifica la subred en su VPC de Google Cloud Platform. Encuentre este valor en la página VPC Networks de su tablero de Google Cloud.
vpc-nameEtiqueta legible para humanos que identifica la VPC que desea utilizar para conectarse a Atlas. Encuentre este valor en la página VPC Networks de su tablero de Google Cloud.
unique-idstring única que apuntaste al volver a comprobar el estado del proyecto.
org-idCadena hexadecimal única de 24dígitos que identifica la organizaciónde Atlas.
Guarda el archivo de shell como
setup_psc.shy ejecuta el script desde el directorio donde guardaste el archivo con el siguiente comando:sh setup_psc.sh El script crea un archivo de salida
atlasEndpoints-{endpoint-name}.jsonque contiene una lista de direcciones IP y nombres de reglas de reenvío.Ejecute los siguientes comandos para formatear la salida para 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 El resultado debe parecerse al siguiente ejemplo:
- 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
Actualiza el parámetro spec.privateEndpoints.
Actualice el spec.privateEndpoints parámetro para el AtlasProject recurso personalizado. Especifique la región de Google Cloud Platform, Google Cloud Project ID, Private Service Endpoint Prefix, su información de salida y ejecute el siguiente comando:
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
Recuperar el secreto que Atlas Kubernetes Operator creó para conectarse al clúster.
Copie el siguiente comando:
Importante
El siguiente comando requiere
jq1.6 o superior.kubectl get secret {my-project}-{my-atlas-cluster}-{my-database-user} -o json | jq -r '.data | with_entries(.value |= @base64d)'; Reemplaza los siguientes marcadores de posición con los detalles para tus recursos personalizados:
my-projectEspecifica el valor del campo
metadatade tuAtlasProjectRecurso Personalizado.my-atlas-clusterEspecifica el valor del campo
metadatade tuAtlasDeploymentRecurso Personalizado.my-database-userEspecifica el valor del campo
metadatade tuAtlasDatabaseUserRecurso Personalizado.Ejecuta el comando.
Nota
Tus cadenas de conexión serán diferentes del siguiente ejemplo. Si tienes varios nodos privados, el secreto contiene varios campos
connectionStringPrivateyconnectionStringPrivateSvrcon el correspondiente sufijo numérico (por ejemplo,connectionStringPrivate1,connectionStringPrivate2, etc.).{ "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" } Puedes usar este secreto en tu aplicación:
containers: - name: test-app env: - name: "CONNECTION_STRING" valueFrom: secretKeyRef: name: my-project-my-atlas-cluster-my-database-user key: connectionStringPrivate