Docs Menu
Docs Home
/ /
MongoDB Atlas Kubernetes Operator
/ /

managed 전용 클러스터의 비공개 엔드포인트 cluster

이 페이지의 내용

  • 절차

참고

이 기능은 M0 무료 클러스터, M2M5 클러스터에서는 사용할 수 없습니다. 사용할 수 없는 기능에 대해 자세히 알아보려면 Atlas M0 (무료 클러스터), M2 및 M5 제한을 참조하세요.

Atlas Kubernetes Operator는 다음 플랫폼에서 전용 클러스터에 대한 비공개 엔드포인트 관리를 지원합니다.

  • 를 사용하는Amazon AWS PrivateLink Web Services 기능.

  • Azure Private Link 기능을 사용하는 Azure .

  • Private Service Connect 기능을 사용하는 Google Cloud

시작하기 전에 비공개 엔드포인트 관리를 참조하세요.

클라이언트가 비공개 엔드포인트를 사용하여 Atlas 전용 클러스터에 연결할 수 있도록 하려면 다음과 같이 하세요:

1

AtlasProject Custom Resource(사용자 지정 spec.privateEndpoints 리소스) 에 대한 매개 변수를 지정합니다. 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 리소스를 생성합니다. 이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

2
  1. 다음 명령을 실행합니다:

    kubectl get atlasproject my-project -o yaml
  2. AtlasProject 사용자 지정 리소스status.privateEndpoints.serviceName 필드에 있는 각 비공개 엔드포인트에 대한 서비스 이름 문자열을 확인합니다.

3

애플리케이션 VPC 인터페이스 엔드포인트를 생성하려면 다음을 수행합니다.

  1. 다음 명령을 복사합니다.

    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}
  2. 다음 자리 표시자를 Amazon Web Services VPC 에 대한 세부 정보로 바꿉니다.

    your-application-vpc-id
    피어링 AWS VPC를 식별하는 고유 문자열입니다. 이 값은 AWS 계정의 VPC 대시보드에서 찾을 수 있습니다.
    aws-region
    비공개 엔드포인트의 Amazon Web Services 리전 을 식별하는 레이블입니다.
    service-name-string
    비공개 엔드포인트의 서비스 이름을 식별하는 고유 문자열입니다. AtlasProject 사용자 지정 리소스status.privateEndpoints.serviceName 필드 내에서 이 값을 찾습니다.
    your-application-subnet-ids

    Amazon Web Services VPC 가 사용하는 서브넷을 식별하는 고유 문자열입니다. 각 서브넷을 공백으로 구분하세요. Amazon Web Services 계정의 Subnet 대시보드에서 이러한 값을 찾을 수 있습니다.

    중요: 서브넷을 하나 이상 지정해야 합니다. 그렇지 않으면Amazon Web Services VPC에 인터페이스 엔드포인트 를 프로비저닝하지 않습니다. VPC 의 클라이언트가 비공개 엔드포인트로 트래픽을 전송하려면 인터페이스 엔드포인트 가 필요합니다.

  3. Amazon Web Services 를 CLI 사용하여명령을 실행합니다.

  4. 출력에서 VpcEndpointId 값을 확인합니다.

    예시

    "VpcEndpoint": {
    "VpcEndpointId": "vpce-XXXXXX",
    "VpcEndpointType": "Interface",
    "VpcId": "vpc-XXXXX",
    "ServiceName": "com.amazonaws.vpce.{aws-region}.vpce-svc-XXXX",
    "State": "pendingAcceptance",

자세한 내용 은 인터페이스 엔드포인트 생성 을 참조하세요. Amazon Web Services 문서에서 확인 가능합니다.

4

AtlasProject Custom Resource(사용자 지정 spec.privateEndpoints 리소스) 에 대한 매개변수를 업데이트합니다. Amazon Web Services 리전 을 지정하고 vpce-id 를 비공개 엔드포인트 의 VpcEndpointId 값으로 바꾸고 다음 명령을 실행 합니다.

참고

AWS 계정의 VPC 대시보드에서 피어 AWS VPC 의 고유 식별자를 찾을 수 있습니다.

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
5

다음 명령을 실행합니다:

kubectl get atlasproject my-project -o yaml
6
  1. 다음 명령을 복사합니다.

    중요

    다음 명령을 실행하려면 jq 1.6 이상이 필요합니다.

    kubectl get secret {my-project}-{my-atlas-cluster}-{my-database-user} -o json | jq -r '.data | with_entries(.value |= @base64d)';
  2. 다음 자리 표시자를 원하는 사용자 지정 리소스의 세부 정보로 바꾸세요.

    my-project
    AtlasProject 사용자 지정 리소스metadata 필드 값을 지정합니다.
    my-atlas-cluster
    AtlasDeployment 사용자 지정 리소스metadata 필드 값을 지정합니다.
    my-database-user
    AtlasDatabaseUser 사용자 지정 리소스metadata 필드 값을 지정합니다.
  3. 명령을 실행합니다.

    참고

    연결 문자열은 다음 예제와 다를 수 있습니다. 비공개 엔드포인트가 여러 개 있는 경우 비밀에는 적절한 숫자 접미사가 붙은 connectionStringPrivateconnectionStringPrivateSvr 필드가 여러 개 포함됩니다(예: 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
1

AtlasProject Custom Resource(사용자 지정 spec.privateEndpoints 리소스) 에 대한 매개 변수를 지정합니다. 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 리소스를 생성합니다. 이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

2

Atlas는 비공개 엔드포인트에 대한 네트워크 정책을 지원하지 않습니다.

  1. 다음 명령을 복사합니다.

    az network vnet subnet update --resource-group {resource-group-name} --vnet-name {vnet-name} --name {subnet-name} --disable-private-endpoint-network-policies true
  2. 다음 자리 표시자를 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 페이지에서 찾을 수 있습니다.
  3. Azure CLI 를사용하여 명령을 실행합니다.

학습내용 은 비공개 엔드포인트 에 대한 네트워크 정책 관리 를 참조하세요. Azure 설명서에 있습니다.

3
  1. 다음 명령을 실행합니다:

    kubectl get atlasproject my-project -o yaml
  2. AtlasProject Custom Resource(사용자 지정 리소스 )의 status.privateEndpoints.serviceResourceIdstatus.privateEndpoints.serviceName 필드에 있는 각 비공개 엔드포인트에 대한 서비스 리소스 ID 및 서비스 이름을 확인합니다.

4

비공개 엔드포인트를 생성하려면 다음을 수행합니다.

  1. 다음 명령을 복사합니다.

    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
  2. 다음 자리 표시자를 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 Custom Resource(사용자 지정 리소스 )의 status.privateEndpoints.serviceResourceId 필드 내에서 이 값을 찾습니다.
    serviceName
    비공개 엔드포인트의 서비스 이름을 식별하는 고유 문자열입니다. AtlasProject 사용자 지정 리소스status.privateEndpoints.serviceName 필드 내에서 이 값을 찾습니다.
  3. Azure CLI 를사용하여 명령을 실행합니다.

5

AtlasProject Custom Resource(사용자 지정 spec.privateEndpoints 리소스) 에 대한 매개변수를 업데이트합니다. 비공개 엔드포인트 에 대한 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
6

다음 명령을 실행합니다:

kubectl get atlasproject my-project -o yaml
7
  1. 다음 명령을 복사합니다.

    중요

    다음 명령을 실행하려면 jq 1.6 이상이 필요합니다.

    kubectl get secret {my-project}-{my-atlas-cluster}-{my-database-user} -o json | jq -r '.data | with_entries(.value |= @base64d)';
  2. 다음 자리 표시자를 원하는 사용자 지정 리소스의 세부 정보로 바꾸세요.

    my-project
    AtlasProject 사용자 지정 리소스metadata 필드 값을 지정합니다.
    my-atlas-cluster
    AtlasDeployment 사용자 지정 리소스metadata 필드 값을 지정합니다.
    my-database-user
    AtlasDatabaseUser 사용자 지정 리소스metadata 필드 값을 지정합니다.
  3. 명령을 실행합니다.

    참고

    연결 문자열은 다음 예제와 다를 수 있습니다. 비공개 엔드포인트가 여러 개 있는 경우 비밀에는 적절한 숫자 접미사가 붙은 connectionStringPrivateconnectionStringPrivateSvr 필드가 여러 개 포함됩니다(예: 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
1

AtlasProject Custom Resource(사용자 지정 spec.privateEndpoints 리소스) 에 대한 매개 변수를 지정합니다. 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 리소스를 생성합니다. 이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

2
  1. 다음 명령을 실행합니다:

    kubectl get atlasproject my-project -o yaml
  2. 각 서비스 첨부 파일 이름에서 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"
    ]
3

Atlas UI 를 사용하여 비공개 엔드포인트 를 편집하고 필요한 스크립트 를 생성하려면 비공개 엔드포인트 구성을 참조하세요.

비공개 엔드포인트를 수동으로 구성하려면 다음을 수행합니다.

  1. 다음 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
  2. 다음 자리 표시자를 Google Cloud Platform VPC 에 대한 세부 정보로 바꿉니다.

    google-cloud-project-id
    프로젝트 를 식별하는 고유 입니다.ID Google 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진수 입니다.string Atlas
  3. shell 파일 을 setup_psc.sh(으)로 저장하고 파일 을 저장한 디렉토리 에서 다음 명령을 사용하여 스크립트 를 실행 합니다.

    sh setup_psc.sh

    이 스크립트 는 IP 주소 및 전달 규칙 이름 목록이 포함된 atlasEndpoints-{endpoint-name}.json 출력 파일 을 생성합니다.

  4. 다음 명령을 실행하여 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
4

AtlasProject Custom Resource(사용자 지정 spec.privateEndpoints 리소스) 에 대한 매개변수를 업데이트합니다. 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
5

다음 명령을 실행합니다:

kubectl get atlasproject my-project -o yaml
6
  1. 다음 명령을 복사합니다.

    중요

    다음 명령을 실행하려면 jq 1.6 이상이 필요합니다.

    kubectl get secret {my-project}-{my-atlas-cluster}-{my-database-user} -o json | jq -r '.data | with_entries(.value |= @base64d)';
  2. 다음 자리 표시자를 원하는 사용자 지정 리소스의 세부 정보로 바꾸세요.

    my-project
    AtlasProject 사용자 지정 리소스metadata 필드 값을 지정합니다.
    my-atlas-cluster
    AtlasDeployment 사용자 지정 리소스metadata 필드 값을 지정합니다.
    my-database-user
    AtlasDatabaseUser 사용자 지정 리소스metadata 필드 값을 지정합니다.
  3. 명령을 실행합니다.

    참고

    연결 문자열은 다음 예제와 다를 수 있습니다. 비공개 엔드포인트가 여러 개 있는 경우 비밀에는 적절한 숫자 접미사가 붙은 connectionStringPrivateconnectionStringPrivateSvr 필드가 여러 개 포함됩니다(예: 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

돌아가기

비공개 엔드포인트

이 페이지의 내용