PrivateLink AWS와 Network Load Balancer를 사용하여 Amazon EKS에서 비공개로 컨테이너 애플리케이션에 액세스합니다. - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

PrivateLink AWS와 Network Load Balancer를 사용하여 Amazon EKS에서 비공개로 컨테이너 애플리케이션에 액세스합니다.

작성자: Kirankumar Chandrashekar(AWS)

환경: 프로덕션

기술: 컨테이너 및 마이크로서비스, 현대화, 보안, ID, 규정 DevOps 준수

워크로드: 기타 모든 워크로드

AWS 서비스: Amazon EKS, Amazon VPC

이 패턴은 Network Load Balancer 뒤에서 Amazon Elastic Kubernetes Service (Amazon EKS) 에서 도커 컨테이너 애플리케이션을 비공개로 호스팅하고 AWS를 사용하여 애플리케이션에 액세스하는 방법을 설명합니다. PrivateLink 그런 다음 프라이빗 네트워크를 사용하여 Amazon Web Services(AWS) 클라우드의 서비스에 안전하게 액세스할 수 있습니다. 

프런트 엔드에 Network Load Balancer가 있는 Docker 애플리케이션을 실행하는 Amazon EKS 클러스터를 가상 사설 클라우드 (VPC) 엔드포인트와 연결하여 AWS를 통해 액세스할 수 있습니다. PrivateLink 그리고 나서 이 VPC 엔드포인트 서비스의 VPC 엔드포인트를 사용하여 다른 VPC와 공유할 수 있습니다.

이 패턴에서 설명하는 설정은 VPC와 AWS 계정 간에 애플리케이션 액세스를 공유하는 안전한 방법입니다. 소비자와 공급자 계정 간의 연결은 글로벌 AWS 백본에 있고 퍼블릭 인터넷을 통과하지 않기 때문에 특별한 연결 또는 라우팅 구성이 필요하지 않습니다.

사전 조건 

  • Docker, Linux, macOS 또는 Windows에 설치 및 구성됨.

  • Docker에서 실행되는 애플리케이션.

  • 활성 상태의 AWS 계정.

  • AWS Command Line Interface(AWS CLI) 버전 2, Linux, macOS 또는 Windows에 설치 및 구성됨.

  • 태그가 지정된 프라이빗 서브넷이 있고 애플리케이션을 호스팅하도록 구성된 기존 Amazon EKS 클러스터. 자세한 내용은 Amazon EKS 설명서의 서브넷 태깅을 참조하십시오. 

  • Kubectl, Amazon EKS 클러스터의 리소스에 액세스하도록 설치 및 구성됨. 자세한 내용은 Amazon EKS 설명서의 kubectl 설치를 참조하세요. 

PrivateLink 및 Network Load Balancer를 사용하여 Amazon EKS 컨테이너의 애플리케이션에 액세스할 수 있습니다.

기술 스택

  • Amazon EKS

  • AWS PrivateLink

  • Network Load Balancer

자동화 및 규모 조정

  • 쿠버네티스 매니페스트는 Git 기반 리포지토리 (예: AWS) 에서 추적 및 관리하고 AWS의 지속적 통합 및 지속적 전달 (CI/CD CodeCommit) 을 사용하여 배포할 수 있습니다. CodePipeline  

  • CloudFormation AWS를 사용하여 코드형 인프라 (IaC) 를 사용하여 이 패턴을 생성할 수 있습니다.

  • AWS CLI – AWS Command Line Interface(AWS CLI)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.

  • Elastic Load Balancing - Elastic Load Balancing은 하나 이상의 가용 영역에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 애플리케이션 또는 네트워크 트래픽을 분산합니다.

  • Amazon EKS – Amazon Elastic Kubernetes Service(Amazon EKS)는 Kubernetes 컨트롤 플레인 또는 노드를 설치, 작동 및 유지 관리할 필요 없이 AWS에서 Kubernetes를 실행하는 데 사용할 수 있는 관리형 서비스입니다.

  • Amazon VPC – Amazon Virtual Private Cloud(VPC)를 이용하면 사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있습니다.

  • Kubectl – Kubectl은 Kubernetes 클러스터에 대해 명령을 실행하기 위한 명령줄 유틸리티입니다.

작업설명필요한 기술

Kubernetes 배포 매니페스트 파일을 생성합니다.

필요에 따라 다음 샘플 파일을 수정하여 배포 매니페스트 파일을 생성하세요.

apiVersion: apps/v1 kind: Deployment metadata: name: sample-app spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: public.ecr.aws/z9d2n7e1/nginx:1.19.5 ports: - name: http containerPort: 80

참고: 이것은 NGINX 도커 이미지를 사용하여 배포되는 NGINX 샘플 구성 파일입니다. 자세한 내용은 Docker 설명서의 공식 NGINX 도커 이미지를 사용하는 방법을 참조하세요.

DevOps 엔지니어

Kubernetes 배포 매니페스트 파일을 배포합니다.

다음 명령을 실행하여 Amazon EKS 클러스터에 배포 매니페스트 파일을 적용합니다.

kubectl apply –f <your_deployment_file_name> 

DevOps 엔지니어

Kubernetes 서비스 매니페스트 파일을 생성합니다.

필요에 따라 다음 샘플 파일을 수정하여 서비스 매니페스트 파일을 생성하세요.

apiVersion: v1 kind: Service metadata: name: sample-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: ports: - port: 80 targetPort: 80 protocol: TCP type: LoadBalancer selector: app: nginx

중요: 내부 Network Load Balancer를 정의할 때 다음 annotations을(를) 포함했는지 확인하세요.

service.beta.kubernetes.io/aws-load-balancer-type: nlb service.beta.kubernetes.io/aws-load-balancer-internal: "true"
DevOps 엔지니어

Kubernetes 서비스 매니페스트 파일을 배포합니다.

다음 명령을 실행하여 Amazon EKS 클러스터에 서비스 매니페스트 파일을 적용합니다.

kubectl apply -f <your_service_file_name>

DevOps 엔지니어
작업설명필요한 기술

Network Load Balancer의 이름을 기록해 둡니다.

다음 명령을 실행하여 Network Load Balancer 이름을 검색합니다.

kubectl get svc sample-service -o wide

AWS PrivateLink 엔드포인트를 생성하는 데 필요한 네트워크 로드 밸런서의 이름을 기록해 둡니다.

DevOps 엔지니어

AWS PrivateLink 엔드포인트를 생성합니다.

AWS 관리 콘솔에 로그인하고 Amazon VPC 콘솔을 연 다음 AWS PrivateLink 엔드포인트를 생성합니다. 이 엔드포인트를 Network Load Balancer와 연결하면 고객이 애플리케이션을 비공개로 사용할 수 있습니다. 자세한 내용은 Amazon VPC 설명서의 VPC 엔드포인트 서비스 PrivateLink (AWS) 를 참조하십시오.

중요: 소비자 계정에 애플리케이션 액세스가 필요한 경우, 소비자 계정의 AWS 계정 ID를 AWS PrivateLink 엔드포인트 구성의 허용된 보안 주체 목록에 추가해야 합니다. 자세한 내용은 Amazon VPC 설명서의 엔드포인트 서비스 권한 추가 및 권한 제거를 참조하세요.

클라우드 관리자

VPC 엔드포인트를 생성합니다.

Amazon VPC 콘솔에서 엔드포인트 서비스를 선택하고 엔드포인트 서비스 생성을 선택합니다. AWS PrivateLink 엔드포인트에 대한 VPC 엔드포인트를 생성합니다.

VPC 엔드포인트의 FQDN (정규화된 도메인 이름) 은 AWS 엔드포인트의 FQDN을 가리킵니다. PrivateLink 그러면 DNS 엔드포인트가 액세스할 수 있는 VPC 엔드포인트 서비스에 대한 탄력적 네트워크 인터페이스가 생성됩니다. 

클라우드 관리자