

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

# Beanstalk 클러스터 환경을 위한 네트워킹 구성
<a name="configuring-cluster-networking"></a>

Beanstalk 클러스터는 Amazon EKS 클러스터에서 환경을 실행합니다. 선택한 서브넷은 클러스터의 노드가 실행되는 위치를 결정하고 환경을 실행하는 클러스터를 결정하는 두 가지 작업을 수행합니다. 서브넷을 선택하지 않으면 Elastic Beanstalk는 기본 VPC의 퍼블릭 서브넷을 사용합니다.

이 주제에서는 환경의 서브넷, 클러스터 외부에서 트래픽이 애플리케이션에 도달하는 방법, 환경이 클러스터 내에서 서로를 처리하는 방법을 다룹니다.

## 환경 서브넷
<a name="configuring-cluster-networking-subnets"></a>

`aws:elasticbeanstalk:eks:environment` 네임스페이스의 `subnets` 옵션을 쉼표로 구분된 서브넷 IDs 목록으로 설정합니다.

서브넷은 클러스터를 선택하므로 환경을 생성할 때 설정합니다.

```
$ aws elasticbeanstalk create-environment \
    --application-name {{my-app}} \
    --environment-name {{my-cluster-env}} \
    --option-settings '[{"Namespace":"aws:elasticbeanstalk:eks:environment","OptionName":"subnets","Value":"{{subnet-abc123,subnet-def456}}"}]'
```

서브넷 목록에는 필드 간 구분 기호로 취급되는 쉼표가 AWS CLI 포함되어 있으므로 설정은 JSON으로 작성됩니다. 에서 AWS CLI 허용하는 양식은 [의 간편 구문 사용을 참조하세요 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-shorthand.html).

Elastic Beanstalk는이 서브넷 세트를 기준으로 환경을 클러스터에 그룹화하므로 동일한 서브넷을 사용하는 동일한 계정의 환경은 동일한 클러스터에서 실행되고 다른 세트를 사용하는 환경은 다른 클러스터에서 실행됩니다. 서브넷의 순서는 중요하지 않습니다. 그룹화 규칙 및 클러스터 할당을 보고하는 이벤트는 섹션을 참조하세요[환경 그룹화](beanstalk-cluster-concepts.md#beanstalk-cluster-clusters-sharing).

## 트래픽이 애플리케이션에 도달하는 방법
<a name="configuring-cluster-networking-lb-type"></a>

`aws:elasticbeanstalk:eks:environment` 네임스페이스의 `load-balancer-type` 옵션은 트래픽이 애플리케이션에 도달하는 방식을 선택합니다. 다음 두 가지 값을 허용합니다.
+ `ALB`, 기본값입니다. Elastic Beanstalk는 환경에 대한 Application Load Balancer를 생성하고 운영합니다. `aws:elasticbeanstalk:eks:alb` 네임스페이스를 통해 구성하거나 이미 소유한 Application Load Balancer를 제공할 수 있습니다.
+ `None`. Elastic Beanstalk는 로드 밸런서를 생성하지 않으며 Elastic Beanstalk를 통해 클러스터 외부에서 환경에 연결할 수 없습니다. 동일한 클러스터의 다른 환경은 여전히 클러스터 내 주소로 연결할 수 있습니다.

## 로드 밸런서 네트워크 설정
<a name="configuring-cluster-networking-alb"></a>

환경의 Application Load Balancer에는 `aws:elasticbeanstalk:eks:alb` 네임스페이스에 자체 네트워크 설정이 있습니다.


| 옵션 | 기본값 | 설명 | 
| --- | --- | --- | 
| subnets | 없음 | 로드 밸런서에 대해 쉼표로 구분된 서브넷 목록입니다. | 
| scheme | 서브넷에서 파생됨 | 인터넷에서 로드 밸런서에 연결할 수 있는지 여부, internet-facing 또는 internal. 설정하지 않으면 Elastic Beanstalk는 선택한 서브넷에서 이를 파생합니다. 퍼블릭 서브넷은 인터넷 경계 로드 밸런서를 제공하고 프라이빗 서브넷은 내부 서브넷을 제공합니다. | 
| security-groups | 없음 | 로드 밸런서에 대한 쉼표로 구분된 보안 그룹 목록입니다. | 
| manage-backend-security-group-rules | true | Elastic Beanstalk가 로드 밸런서와 애플리케이션 간의 보안 그룹 규칙을 관리하는지 여부입니다. | 

## 리스너 및 HTTPS
<a name="configuring-cluster-networking-listeners"></a>

`aws:elasticbeanstalk:eks:alb` 네임스페이스의 `listen-ports` 옵션은 로드 밸런서의 리스너를와 같은 포트에 각 프로토콜을 매핑하는 JSON 배열로 나열합니다`[{"HTTPS":443},{"HTTP":80}]`.

Elastic Beanstalk는 로드 밸런서가 HTTPS를 종료하도록 합니다.
+ 를 설정하지 않으면 `listen-ports`Elastic Beanstalk가 포트 443에서 HTTPS 리스너를 구성합니다.
+ `listen-ports`를 설정하고 모든 포트에 HTTPS 리스너가 이미 포함되어 있는 경우 Elastic Beanstalk는 구성을 변경하지 않고 사용합니다.
+ HTTPS 리스너 `listen-ports` 없이를 설정하면 Elastic Beanstalk가 포트 443에 리스너를 추가합니다. 다른 프로토콜을 사용하는 리스너가 포트 443을 이미 가져온 경우 요청이 실패하고 오류로 인해 포트 443을 해제하거나 다른 포트에 명시적 HTTPS 리스너를 추가하라는 메시지가 표시됩니다.

로드 밸런서는 구성된 리스너만 엽니다. 기본 구성인 포트 443에서는 HTTPS이고 포트 80에서는 HTTPS가 없으므로에 대한 요청은 연결되지 `http://` 않고 시간 초과될 때까지 대기합니다. 환경의 URL `https://` 뒤에 환경의 CNAME이 옵니다.는 체계 없이 CNAME을 `DescribeEnvironments` 반환하므로 열 `https://` 때를 추가합니다.

이를 위해 인증서를 제공하지 않습니다. Elastic Beanstalk는 환경 자체 도메인에 대한 AWS Certificate Manager (ACM) 인증서를 생성하여 HTTPS 리스너에 연결하고 갱신하므로 브라우저는 구성 없이 환경의 CNAME을 신뢰합니다. Elastic Beanstalk는 각 환경에 대해 하나의 인증서를 생성하고 환경을 종료할 때 인증서를 삭제합니다.

자체 도메인에서 환경을 제공하려면 인증서의 ARN을 `certificate-arn` 옵션에 입력합니다. 그런 다음 로드 밸런서는 Elastic Beanstalk가 생성한 인증서 외에 인증서를 전달하며 사용자는 인증서를 갱신하고 삭제할 책임이 있습니다.

HTTP 요청도 수락하려면 HTTP 리스너를에 추가`listen-ports`하고 `ssl-redirect`를 HTTPS 리스너의 포트로 설정합니다. Elastic Beanstalk는 HTTP 리스너의 요청을 HTTPS 리스너로 리디렉션합니다. HTTP 리스너는 애플리케이션 트래픽을 직접 제공하지 않습니다.는 리디렉션 대상의 HTTPS 포트를 `ssl-redirect` 선택하며, 설정하지 않으면 Elastic Beanstalk는 HTTPS 리스너의 포트를 사용합니다. `listen-ports` 값은 그 자체로 JSON 문서이므로 명령줄에 설정을 쓰지 않고 파일에 전달합니다.

```
$ cat listeners.json
[
  {
    "Namespace": "aws:elasticbeanstalk:eks:alb",
    "OptionName": "listen-ports",
    "Value": "[{\"HTTPS\":443},{\"HTTP\":80}]"
  },
  {
    "Namespace": "aws:elasticbeanstalk:eks:alb",
    "OptionName": "ssl-redirect",
    "Value": "443"
  }
]
$ aws elasticbeanstalk update-environment \
    --environment-name {{my-cluster-env}} \
    --option-settings file://listeners.json
```

를 `load-balancer-type`로 설정`None`하거나 자체 로드 밸런서에를 제공할 때 Elastic Beanstalk는 HTTPS 리스너를 추가하지 않습니다`arn`. 환경에서는 로드 `None` 밸런서가 전혀 없으므로 리스너가 없습니다. 자체 로드 밸런서를 제공할 때 리스너 구성은 관리할 사용자입니다.

## 소유한 로드 밸런서 사용
<a name="configuring-cluster-networking-byo-alb"></a>

기존 로드 밸런서를 환경 앞에 배치하려면 `aws:elasticbeanstalk:eks:alb` 네임스페이스의 `arn` 옵션을 해당 ARN으로 설정합니다. 값은 Application Load Balancer여야 합니다. Elastic Beanstalk는 Network Load Balancer의 ARN을 거부합니다.

로드 밸런서를 제공하면 리스너, TLS 인증서 및 스키마와 같은 구성이 소유됩니다. Elastic Beanstalk는 애플리케이션을 대상으로 등록하고 로드 밸런서를 환경의 로드 밸런서로 보고하므로는 Elastic Beanstalk가 생성한 로드 밸런서가 아닌 사용자가 제공한 로드 밸런서를 `DescribeEnvironmentResources` 반환합니다.

## 로드 밸런서가 없는 환경
<a name="configuring-cluster-networking-no-lb"></a>

`load-balancer-type`를 로 설정하면 `None`Elastic Beanstalk는 환경에 대한 로드 밸런서를 생성하지 않으며 로드 밸런서를 `DescribeEnvironmentResources` 보고하지 않습니다. 내부 API 또는 호출자가 직접 연결하는 작업자와 같이 동일한 클러스터의 다른 환경만 제공하는 환경에 사용합니다.

계획해야 할 두 가지 결과:
+ 요청 속도, 오류 속도 또는 지연 시간을 보고할 로드 밸런서가 없으므로 로드 밸런서 상태 신호가 적용되지 않습니다. 컨테이너 프로브와 관찰성 백엔드를 사용하여 애플리케이션이 작동하는지 판단합니다. [Beanstalk 클러스터 환경 모니터링](monitoring-cluster-environments.md)을(를) 참조하세요.
+ 발신자는 다음 섹션에 설명된 클러스터 내 주소로 환경에 도달합니다.

## 한 환경에서 다른 환경으로 처리
<a name="configuring-cluster-networking-service-discovery"></a>

각 Beanstalk 클러스터 환경은 환경 이름으로 구축된 예측 가능한 주소로 클러스터 내에서 연결할 수 있습니다.

```
service-{{environment-name}}.eb-{{environment-name}}.svc.cluster.local:{{service-port}}
```

포트는 환경의 입니다`service-port`. Elastic Beanstalk는 주소의 두 번째 레이블인 환경 이름 `eb-` 뒤에 라는 Kubernetes 네임스페이스에서 각 환경을 실행합니다. `aws:elasticbeanstalk:eks:environment` 네임스페이스의 `env-variables` 옵션을 사용하여 애플리케이션에 필요한 주소를 환경 변수로 전달합니다.

의 값은 `env-variables` 자체 JSON 문서이므로 명령줄이 아닌 파일에 옵션 설정을 전달합니다. 다음을 `options.json`으로 저장합니다.

```
[
  {
    "Namespace": "aws:elasticbeanstalk:eks:environment",
    "OptionName": "env-variables",
    "Value": "{\"NOTIFIER_URL\":\"http://service-{{my-notifier}}.eb-{{my-notifier}}.svc.cluster.local:8080\"}"
  }
]
```

그런 다음 다음과 같이 적용합니다.

```
$ aws elasticbeanstalk update-environment \
    --environment-name {{my-frontend}} \
    --option-settings file://options.json
```

이 주소 지정은 동일한 클러스터에서 실행되는 환경 사이에서만 작동합니다. 즉, 동일한 서브넷을 사용하는 환경입니다. 주소 확인은 연결 허용과 동일하지 않습니다. Beanstalk 클러스터는 기본적으로 공유 클러스터의 환경 간 트래픽을 차단하므로 이름은 확인되고 연결을 허용할 때까지 연결이 계속 실패합니다. [환경의 통신 허용](beanstalk-cluster-multi-tenancy.md#beanstalk-cluster-multi-tenancy-groups)을(를) 참조하세요.

**참고**  
주소에는 환경 이름이 포함되어 있으므로 다른 환경에서 주소를 지정하려면 먼저 환경 이름을 알아야 합니다. 환경을 생성하기 전에 서로를 호출하는 환경 세트의 이름을 계획합니다.

## 생성 시 선택하는 설정
<a name="configuring-cluster-networking-immutable"></a>

환경의 서브넷은 클러스터를 선택하므로 생성한 후에는 변경할 수 없습니다. 클러스터, 노드 및 관찰성 역할에도 동일하게 적용됩니다. 다른 서브넷에서 애플리케이션을 실행하려면 원하는 서브넷으로 새 환경을 생성한 다음 두 환경 CNAMEs을 교체합니다. [Elastic Beanstalk를 사용한 블루/그린 배포](using-features.CNAMESwap.md)을(를) 참조하세요.