
AWS에 Fargate 클러스터를 설정했습니다. 내 클러스터에는 다음이 있습니다서비스:
- 서버-A(포트 3000)
- 서버-B(포트 4000)
각 서비스는 동일한 VPC에 있으며 동일한 보안 그룹(모든 포트, 소스, 대상)을 갖습니다. VPC는 인터넷에서 격리되어 있습니다.
이제 서버 A가 서버 B에 http 쿼리를 보내길 원합니다. Docker swarm과 마찬가지로 서비스 이름을 개인 IP에 매핑하는 개인 DNS가 있다고 가정하고 쿼리를 다음으로 보내는 것만 큼 간단합니다.http://서버-B:4000. 그러나 서버 A는 시간 초과를 받게 되며 이는 서버 B에 연결할 수 없음을 의미합니다.
문서에서 2개의 컨테이너를 동일한 서비스에 넣을 수 있다는 내용을 읽었습니다. 각 컨테이너는 서로 다른 포트에서 수신 대기하므로 루프백 인터페이스 덕분에 서버 A에서 쿼리할 수 있습니다.http://127.0.0.1:4000서버 B가 응답하고 그 반대도 마찬가지입니다.
하지만 서버 A와 서버 B를 확장할 수 있기를 원합니다.독립적으로, 따라서 2개의 서비스를 보유하여 각 서버를 서로 독립적으로 유지하는 것이 합리적이라고 생각합니다.
2개의 작업이 서로 통신하려면 로드 밸런서를 설정해야 한다는 내용을 읽었습니다. Docker Swarm의 세계에서는 서비스 이름으로 서비스를 쿼리하는 것이 매우 쉬웠으며, 그 뒤에서 요청은 해당 서비스의 컨테이너 중 하나로 전달되었습니다. 하지만 AWS Fargate에서는 그렇게 작동하지 않는 것 같습니다.
질문:
- 서버 A가 서버 B와 어떻게 대화할 수 있나요?
- 서비스가 재배치되는 경우가 있기 때문에 개인 IP가 변경되므로 IP로 쿼리하는 것은 의미가 없으며 호스트 이름으로 쿼리하는 것이 가장 자연스러운 방법인 것 같습니다.
- 어떤 종류의 내부 DNS도 설정해야 합니까?
도움을 주셔서 감사합니다. 이 간단한 설정을 수행하는 데 정말 정신이 없었습니다.
답변1
검색해보니 서비스 생성 과정에서 "서비스 검색"을 활성화하지 않아서 프라이빗 DNS가 생성되지 않았기 때문이라는 것을 알게 되었습니다. 다음은 단계를 정확하게 설명하는 몇 가지 추가 문서입니다.
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html