View a markdown version of this page

Beanstalk 클러스터 환경의 다중 테넌시 - AWS Elastic Beanstalk

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

Beanstalk 클러스터 환경의 다중 테넌시

동일한 서브넷을 사용하는 Beanstalk 클러스터 환경은 동일한 Amazon EKS 클러스터에서 실행되므로 컴퓨팅 인프라를 공유합니다. Elastic Beanstalk는 공유 클러스터에서 이를 분리합니다. 각 환경의 애플리케이션은 클러스터의 자체 파티션에서 실행되며 Elastic Beanstalk는 기본적으로 환경 간의 네트워크 트래픽을 차단합니다. 이 주제에서는 얻는 분리, 분리 범위를 넓히거나 좁히는 방법, 공유 클러스터가 충족할 수 없는 요구 사항에 대해 설명합니다.

Beanstalk 클러스터 환경 간의 격리에는 두 가지 독립 차원이 있습니다. 네트워크 격리는 트래픽을 환경의 애플리케이션으로 전송할 수 있는 환경을 제어합니다. 컴퓨팅 격리는 환경의 애플리케이션 복제본이 노드를 다른 환경과 공유하는지 여부를 제어합니다. 둘 중 하나를 구성하지 않고 구성할 수 있습니다.

격리 경계 선택

환경은 사용자가 할당한 서브넷을 통해 선택되고 기존 환경의 서브넷을 변경할 수 없으므로 환경을 생성하기 전에 얼마나 강력한 경계가 필요한지 결정합니다. 두 개의 경계를 사용할 수 있으며, 이는 Amazon EKS가 문서화하는 두 개의 다중 테넌시 모델에 해당합니다.

경계 얻는 방법 구분 항목
공유 클러스터(소프트 멀티 테넌시) 동일한 서브넷 세트를 사용하여 환경을 생성합니다. 환경이 VPC 구성을 공유할 때 기본값입니다. 각 환경의 애플리케이션은 기본적으로 차단된 환경 간의 네트워크 트래픽을 사용하여 클러스터의 자체 파티션에서 실행됩니다. 전용 노드를 구성하지 않는 한 환경은 클러스터 자체를 공유하고 노드를 공유합니다.
별도의 클러스터(하드 멀티 테넌시) 서브넷 세트가 서로 다른 환경을 생성합니다. 그런 다음 Elastic Beanstalk는 각 세트에 대해 별도의 클러스터를 생성합니다. 아무것도 공유되지 않습니다. 별도의 클러스터에는 별도의 컨트롤 플레인, 별도의 노드가 있으며 해당 클러스터에서 실행되는 애플리케이션 간에 네트워크 경로가 없습니다.

공유 클러스터는 Elastic Beanstalk가 클러스터에 적용하는 구성에 의해 적용되는 환경 간의 논리적 분리를 제공합니다. 별도의 클러스터는 인프라 분리를 제공합니다. Amazon EKS는 노드에 대한 액세스 권한을 얻은 워크로드가 해당 노드에서 실행되는 다른 모든의 자격 증명과 데이터에 도달할 수 있으므로 클러스터를 강력한 보안 경계를 제공하는 구문으로 문서화합니다. 클러스터 내에서 논리적 분리는 소프트 멀티테넌시이며 각 테넌트의 클러스터는 하드 멀티테넌시입니다. 여기에 반영되는 일반적인 지침은 Amazon EKS 모범 사례 안내서의 테넌트 격리를 참조하세요.

중요

환경에서 인프라를 공유해서는 안 되는 워크로드를 실행할 때는 별도의 서브넷 세트와 따라서 별도의 클러스터를 사용합니다. 예를 들어 비즈니스의 다양한 최종 고객에게 속한 환경, 제어하지 않는 코드를 실행하는 환경, 인프라 분리가 필요한 규정 준수 체제 범위 내의 환경이 있습니다. 이 주제의 나머지 부분에서 설명하는 제어는 공유 클러스터의 환경을 분리하지만 별도의 클러스터와 동등한 공유 클러스터를 만들지는 않습니다.

각 클러스터는 별도로 요금이 청구되고 노드를 클러스터 간에 공유할 수 없으므로 클러스터를 분리하면 비용이 더 많이 들고 용량을 덜 효율적으로 사용할 수 있습니다. 공유 클러스터는 단일 애플리케이션을 구성하는 서비스와 같이 한 팀이 소유하고 함께 운영하는 환경에 적합한 선택입니다. 프로덕션을 개발과 분리하는 것은 필요한 것이 없더라도 서로 다른 서브넷 세트를 사용해야 하는 일반적인 이유입니다. Elastic Beanstalk가 환경을 클러스터로 그룹화하는 방법은 섹션을 참조하세요환경 그룹화. 서브넷 설정 자체는 섹션을 참조하세요Beanstalk 클러스터 환경을 위한 네트워킹 구성.

공유 클러스터의 네트워크 격리

Elastic Beanstalk는 기본적으로 공유 클러스터의 Beanstalk 클러스터 환경 간 네트워크 트래픽을 차단합니다. 이를 가져오는 데 구성이 필요하지 않으며 끄는 옵션도 없습니다. 환경의 애플리케이션 복제본은이 섹션의 옵션 중 하나로 허용하지 않는 한 어떤 포트에서도 다른 환경의 애플리케이션 복사본으로부터 트래픽을 수신할 수 없습니다.

Elastic Beanstalk는 자체 운영 구성 요소가 애플리케이션에 도달하도록 허용하므로 상태 보고, 로그 수집 및 지표 기반 조정이 계속 작동합니다.

로드 밸런서를 통해 환경에 도달하는 트래픽은 영향을 받지 않습니다. 차단은 클러스터 외부에서 도착하는 트래픽이 아니라 한 환경의 애플리케이션 복제본에서 다른 환경의 복제본으로 직접 전송되는 트래픽에 적용됩니다. 다른 환경이 해당 로드 밸런서의 퍼블릭 엔드포인트로 보내는 요청을 포함하여 Application Load Balancer를 통해 애플리케이션에 도달하는 요청은 정상적으로 전달됩니다.

환경의 통신 허용

aws:elasticbeanstalk:eks:environment 네임스페이스의 세 가지 옵션은 공유 클러스터의 환경 간 트래픽을 허용합니다. 각는 쉼표로 구분된 목록을 가져옵니다. 이름은 a-z, A-Z0-9, 및 문자로 제한됩니다. 문자로 시작하고 4~40자여야 -합니다. 이 중 하나를 변경해도 환경이 중단되지 않습니다.

옵션 Effect 다음과 같은 경우에 사용합니다.
ingress-groups 환경을 하나 이상의 명명된 그룹에 조인합니다. 그룹의 모든 환경은 양방향으로 해당 그룹의 다른 모든 환경으로 트래픽을 전송할 수 있습니다. 환경은 둘 이상의 그룹에 속할 수 있습니다. 한 애플리케이션의 서비스와 같은 환경 세트는 모두 서로를 호출해야 합니다.
ingress-allowlist-environments 명명된 환경이이 환경으로 트래픽을 전송하도록 허용합니다. 권한은 한 가지 방법입니다. 여기서 환경 이름을 지정하면이 환경에서 해당 환경을 호출하지 않습니다. 환경은 특정 다른 환경에서 호출하는 내부 API를 제공합니다.
ingress-allowlist-groups 명명된 그룹의 모든 환경이 이러한 그룹에 조인하지 않고 한 방향으로이 환경으로 트래픽을 전송하도록 허용합니다. 환경은 이미 그룹을 공유하는 호출자 집합을 제공하며 그 대가로 해당 호출자에 대한 액세스 권한을 가져서는 안 됩니다.

그룹에 조인하는 ingress-groups 각 환경에 설정합니다. 그룹 멤버십은 한 곳에서 구성되지 않습니다. 그룹에서 ingress-groups 값을 제거하거나 환경을 종료하면 환경이 그룹을 떠납니다. 허용하려는 호출자의 이름을 지정하여 트래픽을 수신하는 환경에서 허용 목록 옵션을 설정합니다.

두 메커니즘이 결합됩니다. 환경은 피어로 작업하는 서비스의 그룹에 가입할 수 있으며, 한 방향으로 연결해야 하는 호출자를 별도로 허용할 수 있습니다. 환경에서 구성 옵션을 설정하는 방법은 단원을 참조하십시오구성 옵션.

트래픽을 허용해도 검색이 구성되지 않습니다. 애플리케이션은 환경 속성을 통해 다른 설정을 제공하는 것과 동일한 방식으로 어떤 주소를 호출할지 알아야 합니다. Elastic Beanstalk는 사용자가 허용하는 환경의 주소를 주입하지 않습니다.

환경을 위한 전용 노드

기본적으로 Elastic Beanstalk는 모든 환경의 애플리케이션 복제본을 클러스터의 공유 노드 용량으로 예약하므로 여러 환경의 복사본이 동일한 노드에서 실행될 수 있습니다. 다른 환경에서 사용하지 않는 노드에 환경의 애플리케이션 복제본을 유지하려면 aws:elasticbeanstalk:eks:environment 네임스페이스의 node-pool 옵션을 원하는 이름으로 설정합니다.

그런 다음 Elastic Beanstalk는 해당 이름에 대한 노드 세트를 예약하고 node-pool 값이 동일한 환경에서 애플리케이션 복제본만 예약합니다. 값을 설정하지 않거나 다른 값을 설정하는 환경은 해당 노드에 배치할 수 없습니다.

중요

node-pool 값을 공유하는 환경은 노드를 서로 공유합니다. 다른 어떤 것도 사용하지 않는 단일 환경 노드를 제공하려면 다른 환경에서 사용하지 않는 값을 제공합니다.

를 변경하면 Elastic Beanstalk가 올바른 노드로 다시 예약할 수 있도록 환경의 애플리케이션 복제본이 node-pool 다시 시작됩니다. 또한 전용 노드는 환경이 더 이상 동일한 노드의 CPU 및 메모리와 경쟁하지 않기 때문에 한 환경의 리소스 사용이 다른 환경에 미치는 영향을 줄입니다. 전용 노드는 네트워크 격리와 무관합니다. 환경은 별도의 노드에서 실행될 수 있으며 여전히 통신하거나 노드를 공유하고 통신이 차단될 수 있습니다.

특히 노드 용량에 대한 요구 사항을 node-pool 위해를 예약합니다. 서로 환경을 분리하는 것이 목표인 경우 서로 다른 서브넷을 제공하는 것이 더 간단하고 클러스터와 노드를 분리합니다.

공유 클러스터가 분리하지 않는 항목

동일한 클러스터에 서로 다른 보안 또는 규정 준수 요구 사항이 있는 환경을 배치하기 전에 이러한 제한을 이해합니다. 각 서브넷은 클러스터를 공유하는 환경의 결과이며, 각 서브넷은 Elastic Beanstalk가 별도의 클러스터를 생성하도록 환경에 서로 다른 서브넷을 제공하여 제거됩니다.

  • 아웃바운드 트래픽은 제한되지 않습니다. 기본 분리는 환경에 도착하는 트래픽을 차단합니다. 환경의 애플리케이션이 트래픽을 전송할 수 있는 위치를 제한하지 않습니다. 애플리케이션은 인터넷 및 기타 AWS 서비스를 포함하여 네트워크 구성 및 IAM 권한이 허용하는 모든 대상에 도달할 수 있습니다. Beanstalk 클러스터 환경의 아웃바운드 트래픽을 제한하는 옵션은 없습니다.

  • 클러스터의 컨트롤 플레인이 공유됩니다. 클러스터의 모든 환경은 하나의 Amazon EKS 컨트롤 플레인에서 제공되며 Kubernetes 버전은 클러스터 수명 동안 고정됩니다. Elastic Beanstalk는 컨트롤 플레인을 작동하고 구성하지는 않지만 환경별로 복제되지 않습니다.

  • 전용 노드를 구성하지 않는 한 노드가 공유됩니다. node-pool를 사용하지 않으면 서로 다른 환경의 애플리케이션 복제본이 동일한 노드에서 실행되고 동일한 CPU 및 메모리에서 사용됩니다. Elastic Beanstalk는 환경당 노드 용량을 예약하지 않습니다.

  • 클러스터 전체 장애는 클러스터의 모든 환경에 영향을 미칩니다. 인프라가 더 이상 예상 구성과 일치하지 않아 Elastic Beanstalk가 클러스터 관리를 중지하면 드리프트가 해결될 때까지 해당 클러스터의 모든 환경에 대한 업데이트가 실패합니다. 복구는 환경이 아닌 클러스터별로 이루어집니다. 복구의 원인이 된 변경 사항을 되돌리면 Elastic Beanstalk가 클러스터와 모든 환경 관리를 재개합니다. 클러스터 구성 드리프트을(를) 참조하세요.

어느 경계에서든 애플리케이션 수준 보호는 사용자의 책임입니다. 환경 간 네트워크 분리는 호출자를 인증하거나, 환경 간 트래픽을 암호화하거나, 애플리케이션이 보유한 자격 증명으로 수행하는 작업을 제한하지 않습니다. AWS 권한이 범위로 지정되도록 각 환경에 고유한 애플리케이션 역할을 부여하고 애플리케이션이 여전히 권한을 부여해야 하는 트래픽으로 환경 간에 허용되는 트래픽을 처리합니다. 애플리케이션 권한을(를) 참조하세요.

요구 사항을 제어와 일치

요구 사항 컨트롤
환경은 인프라를 공유해서는 안 됩니다. Elastic Beanstalk가 각각에 대해 별도의 클러스터를 생성하도록 서로 다른 서브넷 세트로 생성합니다. 환경을 생성하기 전에 이를 결정하십시오. 나중에 서브넷을 변경할 수 없습니다.
환경을 네트워크를 통해 서로 연결해서는 안 됩니다. 구성이 없습니다. 공유 클러스터의 기본값입니다.
환경 세트는 서로를 호출해야 합니다. 각각ingress-groups에서 동일한 그룹 이름으로 설정합니다.
한 환경은 특정 다른 환경의 호출을 수락해야 하지만 반대의 호출은 수락하지 않아야 합니다. 트래픽을 수신하는 ingress-allowlist-groups환경에서 ingress-allowlist-environments또는를 설정합니다.
환경의 애플리케이션 복제본은 노드를 다른 환경과 공유해서는 안 됩니다. 다른 환경에서 사용하지 않는 node-pool 값으로 설정합니다.
환경의 아웃바운드 트래픽은 제한되어야 합니다. 구성 옵션을 통해 사용할 수 없습니다. 애플리케이션에서 또는 환경에 할당한 서브넷의 네트워크 구성을 통해 제한합니다.