가상 게이트웨이 - AWS App Mesh

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

가상 게이트웨이

가상 게이트웨이를 사용하면 메시 외부의 리소스가 메시 내부에 있는 리소스와 통신할 수 있습니다. 가상 게이트웨이는 Amazon ECS 서비스, Kubernetes 서비스 또는 Amazon EC2 인스턴스에서 실행되는 Envoy 프록시를 나타냅니다. 애플리케이션과 함께 실행되는 Envoy를 나타내는 가상 노드와 달리 가상 게이트웨이는 자체적으로 배포된 Envoy를 나타냅니다.

외부 리소스는 DNS 이름을 Envoy를 실행하는 서비스 또는 인스턴스에 할당된 IP 주소로 확인할 수 있어야 합니다. 그러면 Envoy는 메시 내에 있는 리소스의 모든 App Mesh 구성에 액세스할 수 있습니다. 가상 게이트웨이에서 들어오는 요청을 처리하기 위한 구성은 게이트웨이 경로를 사용하여 지정됩니다.

중요

HTTP 또는 HTTP2 리스너가 있는 가상 게이트웨이는 들어오는 요청의 호스트 이름을 게이트웨이 경로 대상 가상 서비스의 이름에 다시 쓰고, 게이트웨이 경로의 일치하는 접두사가 기본적으로 /로 다시 작성됩니다. 예를 들어 게이트웨이 경로 일치 접두사를 /chapter로 구성한 경우, 수신 요청이 /chapter/1인 경우 요청이 /1로 다시 작성됩니다. 재작성을 구성하려면 게이트웨이 경로의 게이트웨이 경로 생성 섹션을 참조하세요.

가상 게이트웨이를 생성할 때는 proxyConfigurationuser를 구성하지 않아야 합니다.

전체적인 과정 연습을 완료하려면 인바운드 게이트웨이 구성을 참조하세요.

가상 게이트웨이 생성

참고

가상 게이트웨이를 생성할 때는 게이트웨이 경로를 생성된 가상 게이트웨이에 연결할 네임스페이스 목록을 식별할 수 있도록 레이블이 있는 네임스페이스 선택기를 추가해야 합니다.

AWS Management Console
AWS Management Console을 사용하여 가상 게이트웨이를 생성하려면
  1. https://console.aws.amazon.com/appmesh/에서 App Mesh 콘솔을 엽니다.

  2. 가상 게이트웨이를 생성하려는 메시를 선택합니다. 소유하고 있는 모든 메시와 공유된 모든 메시가 나열됩니다.

  3. 왼쪽 탐색 창에서 가상 게이트웨이를 선택합니다.

  4. 가상 게이트웨이 생성을 선택합니다.

  5. 가상 게이트웨이 이름에 가상 게이트웨이의 이름을 입력합니다.

  6. (선택 사항이지만 권장됨) 클라이언트 정책 기본값을 구성합니다.

    1. (선택 사항) 게이트웨이가 전송 계층 보안(TLS)을 사용하여 가상 서비스와만 통신하도록 하려면 TLS 적용을 선택합니다.

    2. (선택 사항) 포트에는 가상 서비스와의 TLS 통신을 적용하려는 하나 이상의 포트를 지정합니다.

    3. 검증 방법에서 다음 옵션 중 하나를 선택합니다. 지정하는 인증서는 이미 존재하고 특정 요구 사항을 충족해야 합니다. 자세한 내용은 인증서 요구 사항 섹션을 참조하세요.

      • AWS Private Certificate Authority 호스팅 - 기존 인증서를 하나 이상 선택합니다.

      • Envoy 보안 암호 검색 서비스(SDS) 호스팅 - Envoy가 보안 암호 검색 서비스를 사용하여 가져오는 보안 암호의 이름을 입력합니다.

      • 로컬 파일 호스팅 - Envoy가 배포되는 파일 시스템의 인증서 체인 파일 경로를 지정합니다.

    4. (선택 사항) 주체 대체 이름을 입력합니다. SAN을 더 추가하려면 SAN 추가를 선택합니다. SAN은 FQDN 또는 URI 형식이어야 합니다.

    5. (선택 사항) 클라이언트 인증서 제공과 아래 옵션 중 하나를 선택하여 서버가 요청할 때 클라이언트 인증서를 제공하고 상호 TLS 인증을 활성화합니다. 상호 TLS에 대해 자세히 알아보려면 App Mesh 상호 TLS 인증 설명서를 참조하세요.

      • Envoy 보안 암호 검색 서비스(SDS) 호스팅 - Envoy가 보안 암호 검색 서비스를 사용하여 가져오는 보안 암호의 이름을 입력합니다.

      • 로컬 파일 호스팅 - Envoy가 배포되는 파일 시스템의 프라이빗 키 뿐만 아니라 인증서 체인 파일의 경로를 지정합니다. 로컬 파일에 암호화를 사용하여 샘플 애플리케이션으로 메시를 배포하는 과정을 전체적으로 자세히 알아보려면 GitHub에서 파일 제공 TLS 인증서를 사용하여 TLS 구성을 참조하세요.

  7. (선택 사항) 로깅을 구성하려면 로깅을 선택합니다. Envoy에서 사용할 HTTP 액세스 로그 경로를 입력합니다. Docker 로그 드라이버를 사용하여 Envoy 로그를 Amazon CloudWatch Logs와 같은 서비스로 내보낼 수 있도록 /dev/stdout 경로를 사용하는 것이 좋습니다.

    참고

    로그는 계속 애플리케이션의 에이전트에 의해 수집되어 대상으로 전송되어야 합니다. 이 파일 경로는 로그를 보낼 위치만 Envoy에 지시합니다.

  8. 리스너를 구성합니다.

    1. 프로토콜을 선택하고 Envoy가 트래픽을 수신하는 포트를 지정합니다. http 리스너는 웹 소켓으로의 연결 전환을 허용합니다. 리스너 추가를 클릭하여 리스너를 여러 개 추가할 수 있습니다. 제거 버튼을 누르면 해당 리스너가 제거됩니다.

    2. (선택 사항) 연결 풀 활성화

      연결 풀링은 가상 게이트웨이 Envoy가 동시에 설정할 수 있는 연결 수를 제한합니다. 이 작업은 Envoy 인스턴스의 연결 과부하를 방지하고 애플리케이션 요구 사항에 맞게 트래픽 셰이핑을 조정할 수 있도록 하기 위한 것입니다.

      가상 게이트웨이 리스너의 대상 측 연결 풀 설정을 구성할 수 있습니다. App Mesh는 기본적으로 클라이언트 측 연결 풀 설정을 무제한으로 설정하여 메시 구성을 단순화합니다.

      참고

      connectionPoolconnectionPool portMapping 프로토콜은 동일해야 합니다. 리스너 프로토콜이 grpc 또는 http2인 경우 maxRequests만 지정합니다. 리스너 프로토콜이 http인 경우 maxConnectionsmaxPendingRequests를 모두 지정할 수 있습니다.

      • 최대 연결 수에는 최대 아웃바운드 연결 수를 지정합니다.

      • 최대 요청 수에는 가상 게이트웨이 Envoy에 대해 설정할 수 있는 최대 병렬 요청 수를 지정합니다.

      • (선택 사항) 대기 중인 최대 요청 수에는 Envoy가 대기하는 최대 연결 수 이후에 오버플로되는 요청 수를 지정합니다. 기본값은 2147483647입니다.

    3. (선택 사항) 리스너에 대한 상태 확인을 구성하려면 상태 확인 사용을 선택합니다.

      상태 확인 정책은 선택 사항이지만 상태 정책에 대한 값을 지정한 경우 정상 임계 값, 상태 확인 간격, 상태 확인 프로토콜, 제한 시간비정상 임계값에 대해 값을 지정해야 합니다.

      • 상태 확인 프로토콜에 대해 프로토콜을 선택합니다. grpc를 선택한 경우 서비스는 GRPC 상태 확인 프로토콜을 준수해야 합니다.

      • Health check port(상태 확인 포트)에서 상태 확인을 실행해야 할 포트를 지정합니다.

      • Healthy threshold(정상 임계 값)에서 리스너를 정상으로 선언하기 전까지 발생해야 하는 연속적인 상태 확인 성공 횟수를 지정합니다.

      • Health check interval(상태 확인 간격)에서 각 상태 확인 실행 사이의 시간 간격을 밀리초 단위로 지정합니다.

      • Path(경로)에서 상태 확인 요청에 대한 대상 경로를 지정합니다. 이 값은 상태 확인 프로토콜http 또는 http2인 경우에만 사용됩니다. 다른 프로토콜에서는 이 값이 무시됩니다.

      • 제한 시간에서 상태 확인으로부터 응답을 받을 때까지 대기할 시간을 밀리초 단위로 지정합니다.

      • 비정상 임계값에서 리스너를 비정상으로 선언하기 전까지 발생해야 하는 연속적인 상태 확인 실패 횟수를 지정합니다.

    4. (선택 사항) 클라이언트가 TLS를 사용하여 이 가상 게이트웨이와 통신할지 여부를 지정하려면 TLS 종료 활성화를 선택합니다.

      • 모드의 경우 리스너에서 TLS를 구성할 모드를 선택합니다.

      • 인증서 방법에서 다음 옵션 중 하나를 수행합니다. 인증서는 특정 요구 사항을 충족해야 합니다. 자세한 내용은 인증서 요구 사항 섹션을 참조하세요.

        • AWS Certificate Manager 호스팅 - 기존 인증서를 선택합니다.

        • Envoy 보안 암호 검색 서비스(SDS) 호스팅 - Envoy가 보안 암호 검색 서비스를 사용하여 가져오는 보안 암호의 이름을 입력합니다.

        • 로컬 파일 호스팅 - Envoy가 배포된 파일 시스템의 인증서 체인프라이빗 키 파일 경로를 지정합니다.

      • (선택 사항) 클라이언트가 인증서를 제공하는 경우 클라이언트 인증서 필요 및 아래 옵션 중 하나를 선택하여 상호 TLS 인증을 활성화합니다. 상호 TLS에 대해 자세히 알아보려면 App Mesh 상호 TLS 인증 설명서를 참조하세요.

        • Envoy 보안 암호 검색 서비스(SDS) 호스팅 - Envoy가 보안 암호 검색 서비스를 사용하여 가져오는 보안 암호의 이름을 입력합니다.

        • 로컬 파일 호스팅 - Envoy가 배포되는 파일 시스템의 인증서 체인 파일 경로를 지정합니다.

      • (선택 사항) 주체 대체 이름을 입력합니다. SAN을 더 추가하려면 SAN 추가를 선택합니다. SAN은 FQDN 또는 URI 형식이어야 합니다.

  9. 가상 게이트웨이 생성을 선택하여 완료합니다.

AWS CLI

AWS CLI를 사용하여 가상 게이트웨이를 생성하려면

다음 명령을 사용하여 가상 게이트웨이를 생성하고 JSON을 입력합니다(빨간색 값을 원하는 값으로 대체).

  1. aws appmesh create-virtual-gateway \ --mesh-name meshName \ --virtual-gateway-name virtualGatewayName \ --cli-input-json file://create-virtual-gateway.json
  2. 예제 create-virtual-gateway.json의 내용은 다음과 같습니다.

    { "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] } }
  3. 출력 예시:

    { "virtualGateway": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:123456789012:mesh/meshName/virtualGateway/virtualGatewayName", "createdAt": "2022-04-06T10:42:42.015000-05:00", "lastUpdatedAt": "2022-04-06T10:42:42.015000-05:00", "meshOwner": "123456789012", "resourceOwner": "123456789012", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] }, "status": { "status": "ACTIVE" }, "virtualGatewayName": "virtualGatewayName" } }

App Mesh용 AWS CLI를 사용하여 가상 게이트웨이를 생성하는 방법에 대한 자세한 내용은 AWS CLI 참조의 create-virtual-gateway 명령을 참조하세요.

가상 게이트웨이 배포

Envoy 컨테이너만 포함하는 Amazon ECS 또는 Kubernetes 서비스를 배포합니다. 또한 Amazon EC2 인스턴스의 Envoy 컨테이너를 배포할 수도 있습니다. 자세한 내용은 App Mesh 및 Amazon EC2 시작하기를 참조하세요. App Mesh 및 Amazon ECS 시작하기 또는 AWS App Mesh 및 Kubernetes 시작하기에서 Amazon ECS에 배포하는 방법에 대한 자세한 내용을 참조하여 Kubernetes에 배포하세요. 프록시의 트래픽이 자체적으로 리디렉션되지 않도록 APPMESH_RESOURCE_ARN 환경 변수를 mesh/mesh-name/virtualGateway/virtual-gateway-name로 설정하고 프록시 구성을 지정하지 않아야 합니다. 기본적으로 App Mesh는 Envoy가 지표 및 트레이스에서 자신을 참조할 때 APPMESH_RESOURCE_ARN에서 지정한 리소스의 이름을 사용합니다. APPMESH_RESOURCE_CLUSTER 환경 변수를 사용자 고유의 이름으로 설정하여 이 동작을 재정의할 수 있습니다.

컨테이너의 여러 인스턴스를 배포하고 인스턴스에 대한 트래픽을 로드 밸런싱하도록 Network Load Balancer를 설정하는 것이 좋습니다. 로드 밸런서의 서비스 검색 이름은 외부 서비스가 메시에 있는 리소스에 액세스하는 데 사용하려는 이름(예: myapp.example.com)입니다. 자세한 내용은 Network Load Balancer 생성(Amazon ECS), 외부 로드 밸런서 생성(Kubernetes) 또는 자습서: Amazon EC2에서 애플리케이션의 가용성 향상을 참조하세요. 또한 App Mesh 예제에서 더 많은 예제와 연습을 찾을 수 있습니다.

Envoy에 대한 프록시 권한 부여를 활성화합니다. 자세한 내용은 Envoy 프록시 권한 부여 섹션을 참조하세요.

가상 게이트웨이 삭제

AWS Management Console
AWS Management Console을 사용하여 가상 게이트웨이를 삭제하려면
  1. https://console.aws.amazon.com/appmesh/에서 App Mesh 콘솔을 엽니다.

  2. 가상 게이트웨이를 삭제하려는 메시를 선택합니다. 소유하고 있는 모든 메시와 공유된 모든 메시가 나열됩니다.

  3. 왼쪽 탐색 창에서 가상 게이트웨이를 선택합니다.

  4. 삭제하려는 가상 게이트웨이를 선택하고 삭제를 선택합니다. 연결된 게이트웨이 경로가 있는 가상 게이트웨이는 삭제할 수 없습니다. 연결된 게이트웨이 경로를 먼저 삭제해야 합니다. 계정이 리소스 소유자로 나열된 경우에만 가상 게이트웨이를 삭제할 수 있습니다.

  5. 확인 상자에 delete를 입력한 다음, 삭제를 선택합니다.

AWS CLI
AWS CLI을 사용하여 가상 게이트웨이를 삭제하려면
  1. 다음 명령을 사용하여 가상 게이트웨이를 삭제합니다(빨간색 값을 원하는 값으로 대체).

    aws appmesh delete-virtual-gateway \ --mesh-name meshName \ --virtual-gateway-name virtualGatewayName
  2. 출력 예시:

    { "virtualGateway": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:123456789012:mesh/meshName/virtualGateway/virtualGatewayName", "createdAt": "2022-04-06T10:42:42.015000-05:00", "lastUpdatedAt": "2022-04-07T10:57:22.638000-05:00", "meshOwner": "123456789012", "resourceOwner": "123456789012", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] }, "status": { "status": "DELETED" }, "virtualGatewayName": "virtualGatewayName" } }

App Mesh용 AWS CLI를 사용하여 가상 게이트웨이를 삭제하는 방법에 대한 자세한 내용은 AWS CLI 참조의 delete-virtual-gateway 명령을 참조하세요.