Amazon ECS의 Service Connect 문제를 해결하려면 어떻게 해야 합니까?
내 Amazon Elastic Container Service(Amazon ECS) 서비스를 다른 서비스에 연결할 수 없습니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
잘못된 구성 또는 네트워킹 문제로 인해 서비스 간 통신 문제가 발생합니다. 이러한 문제를 해결하려면 다음 문제 해결 작업을 수행하십시오.
Service Connect 구성 확인
Service Connect 활성화 확인
전제 조건: Amazon ECS Service Connect를 사용하려면 Service Connect 요구 사항을 충족해야 합니다.
Amazon ECS 서비스에 대해 Service Connect를 활성화했는지 확인하려면 다음 describe-services AWS CLI 명령을 실행합니다.
aws ecs describe-services --cluster cluster-name --services service-name
참고: cluster-name을 클러스터 이름으로, service-name을 서비스 이름으로 바꾸십시오.
출력 예시:
"serviceConnectConfiguration": { "enabled": true,
참고: Amazon ECS 서비스가 다른 서비스의 네트워크 트래픽을 허용해야 하는 경우 Service Connect 구성을 클라이언트-서버 서비스로 설정해야 합니다. 이 구성을 확인하려면 **"serviceConnectionConfiguration"**에서 **"services"**에 대한 명령 출력을 검토하십시오.
서비스의 네임스페이스 확인
Service Connect를 사용하려면 동일한 네임스페이스에서 Amazon ECS 서비스를 구성해야 합니다. 또한 클라이언트 서비스와 클라이언트-서버 서비스가 같은 네임스페이스에 있어야 합니다. 서비스의 네임스페이스를 확인하려면 다음 describe-services 명령을 실행합니다.
aws ecs describe-services --cluster cluster-name --services service-name | grep namespace
참고: cluster-name을 클러스터 이름으로, service-name을 서비스 이름으로 바꾸십시오.
출력에서 namespace 값을 확인합니다. 서비스의 네임스페이스를 업데이트하려면 Amazon ECS 콘솔을 사용하여 Service Connect 구성 설정을 업데이트합니다. 또는 update-service 명령을 실행합니다.
aws ecs update-service --cluster cluster-name --service service-name --service-connect-configuration enabled=true,namespace=Namespace-name --force-new-deployment
참고: cluster-name을 클러스터 이름으로, service-name을 서비스 이름으로, Namespace-name을 네임스페이스로 바꾸십시오.
클라이언트 서비스가 클라이언트-서버 서비스 DNS를 확인할 수 없는 경우 다음 오류 메시지 중 하나가 표시됩니다.
- "server can't find DNS: NXDOMAIN"
- "server can't find example.core.staging.local: NXDOMAIN"
이 문제를 해결하려면 다음 get-namespace 명령을 실행하여 AWS Cloud Map에 네임스페이스를 등록했는지 확인합니다.
aws servicediscovery get-namespace --id namespace
참고: namespace를 네임스페이스 ID로 바꾸십시오.
명령의 출력을 확인하여 AWS 계정 및 AWS 리전에서 사용 가능한 네임스페이스를 확인합니다.
인스턴스 네임스페이스에 작업을 등록했는지 확인하려면 다음 단계를 완료하십시오.
-
네임스페이스 ID를 가져오려면 다음 list-namespaces 명령을 실행합니다.
aws servicediscovery list-namespaces -
서비스의 등록된 인스턴스를 보려면 다음 list-instances 명령을 실행합니다.
aws servicediscovery list-instances --service-id srv-serviceID참고: serviceID를 서비스 ID로 바꾸십시오.
-
인스턴스를 등록하지 않은 경우 다음 update-service 명령을 실행하여 작업을 재배포합니다.
aws ecs update-service --cluster cluster-name --service service-name --region region-name --force-new-deployment참고: cluster-name을 클러스터 이름으로, service-name을 서비스 이름으로, region-name을 리전으로 바꾸십시오.
또는 Amazon ECS 콘솔을 사용하여 서비스를 업데이트하고 새 배포 강제 적용을 선택합니다.
포트 매핑 이름 확인
작업 정의에서 포트 매핑 이름을 설정하지 않은 경우 다음 오류 메시지가 표시됩니다.
"No port aliases found. Select a different task definition family and revision that has port mappings configured to use client and server mode."
이 문제를 해결하려면 작업 정의를 업데이트하고 portMappings에서 name 파라미터의 값을 추가하십시오.
작업 정의 예시:
"portMappings": [ { "name": "portmappingnameexample", "containerPort": 3000, "hostPort": 3000, "protocol": "tcp" }
네트워크 ACL 및 보안 그룹 설정 확인
네트워크 액세스 제어 목록(ACL) 및 보안 그룹이 다음 구성을 사용해야 합니다.
- 클라이언트 서비스가 클라이언트-서버 서비스 보안 그룹의 포트로의 아웃바운드 트래픽을 허용합니다.
- 클라이언트-서버 서비스 보안 그룹이 클라이언트 서비스 포트에서 인바운드 트래픽을 허용합니다.
- 가상 프라이빗 네트워크(VPC) 네트워크 ACL이 containerPort 및 ingressPortOverride 포트에서 트래픽을 허용합니다.
- 서비스 작업이 서로 다른 VPC에서 실행되는 경우 VPC 피어링 연결 또는 전송 게이트웨이가 VPC 간 트래픽을 허용해야 합니다.
서비스 작업 간의 연결성 확인
다음 단계를 완료하십시오.
-
AWS Fargate에서 작업을 실행하는 경우 ECS Exec을 활성화합니다. Amazon Elastic Compute Cloud(Amazon EC2)에서 작업을 실행하는 경우 3단계로 진행하십시오.
-
다음 execute-command 명령을 실행하여 컨테이너에 원격으로 연결합니다.
aws ecs execute-command --cluster cluster-name \ --task task-id \ --container container-name \ --interactive \ --command "/bin/sh"참고: cluster-name을 클러스터 이름으로, task-id를 작업 ID로, container-name을 컨테이너 인스턴스로 바꾸십시오.
-
연결에서 Service Connect 프록시를 사용하는지 확인하려면 다음 명령을 실행합니다.
curl -I http://$IPaddress:portnumber/healthcheck참고: IPaddress를 작업의 프라이빗 IP 주소로, portnumber를 컨테이너 인스턴스 포트로, healthcheck를 컨테이너 상태 확인 경로로 바꾸십시오.
명령 출력에서 server: envoy 헤더를 확인하여 연결에서 프록시를 사용하는지 확인합니다. 연결에서 프록시를 사용하지 않는 경우 Service Connect 구성이 올바른지 확인하십시오.
-
/etc/hosts 파일을 열려면 다음 명령을 실행합니다.
cat /etc/hosts명령의 출력을 확인하여 다른 서비스의 엔드포인트를 볼 수 있는지 확인합니다. 서비스 엔드포인트가 보이지 않는 경우 Service Connect 구성이 올바른지 확인하십시오.
-
Service Connect 구성을 변경하는 경우 다음 update-service 명령을 실행하여 작업을 재배포하십시오.
aws ecs update-service --cluster cluster-name --service service-name --region region-name --force-new-deployment참고: cluster-name을 클러스터 이름으로, service-name을 서비스 이름으로, region-name을 리전으로 바꾸십시오.
또는 Amazon ECS 콘솔을 사용하여 서비스를 업데이트하고 새 배포 강제 적용을 선택합니다.
클라이언트 서비스 작업 재배포
“Could not resolve host” 오류 메시지가 표시되면 작업에서 서비스 엔드포인트를 확인할 수 없습니다. 대신 "ping: bad address 'DNS'" 오류 메시지가 표시될 수 있습니다.
이러한 문제를 해결하려면 기존 클라이언트 서비스 작업을 재배포하십시오.
애플리케이션 로그 검토
애플리케이션 로그에서 연결 또는 런타임 오류를 확인합니다. Amazon ECS는 로그 드라이버를 기반으로 로그를 다른 대상으로 내보냅니다. awlogs 드라이버를 사용하는 경우 Amazon ECS는 로그를 Amazon CloudWatch로 내보냅니다.
관련 정보
- 언어
- 한국어

관련 콘텐츠
- 질문됨 일 년 전
AWS 공식업데이트됨 일 년 전