ECS Service Discovery 사용해 보기
목적
ECS Service Discovery를 제대로 만난 적이 없었기 때문에 움직임을 확인해 보겠습니다.
htps : // 아 ws. 아마존. 코 m / jp / b ぉ gs / 네 ws / 아마 존 - 에 cs - 세 r
htps : // 아 ws. 아마존. 코 m / jp / 아보 t-a ws / u ts- w / 2018/05 / 아마 존 - 에 cs-se r an d ho st - 이런 r /
전제
ECS의 네트워크 모드에 따라 설정할 수 있는 DNS 레코드가 다릅니다.
호스트 모드 : SRV 레코드 만
브리지 모드 : SRV 레코드 전용
awsvcp : SRV 및 A 레코드
서비스 태스크에 지정된 태스크 정의가 awsvpc 네트워크 모드를 사용하는 경우 각 서비스 태스크에서 A 레코드 또는 SRV 레코드를 조합하여 작성할 수 있습니다. SRV 레코드를 사용하는 경우 포트가 필요합니다.
서비스 태스크에 지정된 태스크 정의가 bridge 또는 host 네트워크 모드를 사용하는 경우 SRV 레코드만 지원되는 DNS 레코드 유형입니다. 각 서비스 작업에 대한 SRV 레코드를 만듭니다. SRV 레코드의 컨테이너 이름과 컨테이너 포트의 조합을 작업 정의에서 지정해야 합니다.
브리지 모드에서는 호스트 측 포트가 동적으로 할당되고 컨테이너 포트에 NAT되므로 클라이언트에서 보면 A 레코드에서 IP 주소를 반환하고받는 것만으로는 액세스 할 수 없으며 동적으로 흔들리는 포트 번호도 필요합니다. 따라서 SRV 레코드를 사용하여 호스트 이름과 포트 번호를 클라이언트에 반환합니다.
환경 전제
vpc 설정에서 Private Hosted Zone을 그릴 수 있음
보안 그룹에서 Curl을 실행하는 터미널에서 액세스 허용
보안 그룹은 호스트 및 브리지 모드인 경우 ECS 클러스터를 구성하는 EC2 인스턴스에 부여된 보안 그룹에서 설정합니다. awsvpc의 경우 컨테이너별로 ENI가 부여되므로 ENI에 연결된 보안 그룹에서 권한을 부여합니다.
EC2 타입 + 네트워크 모드 = host
작업 정의
"portMappings": [
{
"hostPort": 80,
"protocol": "tcp",
"containerPort": 80
}
],
"networkMode": "host",
서비스
DNS
이름 확인
$ dig SRV nginx-ec2-host2.local
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> SRV nginx-ec2-host2.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50064
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;nginx-ec2-host2.local. IN SRV
;; ANSWER SECTION:
nginx-ec2-host2.local. 60 IN SRV 1 1 80 1d1f8cdd561c4c6cad23a983062a1016.nginx-ec2-host2.local.
;; Query time: 4 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Wed Nov 21 06:58:55 2018
;; MSG SIZE rcvd: 113
$ dig 1d1f8cdd561c4c6cad23a983062a1016.nginx-ec2-host2.local
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> 1d1f8cdd561c4c6cad23a983062a1016.nginx-ec2-host2.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44042
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;1d1f8cdd561c4c6cad23a983062a1016.nginx-ec2-host2.local. IN A
;; ANSWER SECTION:
1d1f8cdd561c4c6cad23a983062a1016.nginx-ec2-host2.local. 37 IN A 172.31.21.200
;; Query time: 0 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Wed Nov 21 06:59:18 2018
;; MSG SIZE rcvd: 88
EC2의 개인 IP 주소가 반환됩니다.
$ curl 172.31.21.200:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
EC2 타입 + 네트워크 모드 = bridge
작업 정의
"portMappings": [
{
"hostPort": 0,
"protocol": "tcp",
"containerPort": 80
}
],
"networkMode": "bridge",
서비스
DNS 레코드
이름 확인
$ dig SRV nginx_ec2_bridge2.local
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> SRV nginx_ec2_bridge2.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55266
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;nginx_ec2_bridge2.local. IN SRV
;; ANSWER SECTION:
nginx_ec2_bridge2.local. 60 IN SRV 1 1 32901 dcfbf39448a34cc393baa22ae22c2f60.nginx_ec2_bridge2.local.
;; Query time: 2 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Wed Nov 21 07:33:40 2018
;; MSG SIZE rcvd: 117
$ dig dcfbf39448a34cc393baa22ae22c2f60.nginx_ec2_bridge2.local
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> dcfbf39448a34cc393baa22ae22c2f60.nginx_ec2_bridge2.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47884
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;dcfbf39448a34cc393baa22ae22c2f60.nginx_ec2_bridge2.local. IN A
;; ANSWER SECTION:
dcfbf39448a34cc393baa22ae22c2f60.nginx_ec2_bridge2.local. 25 IN A 172.31.21.200
;; Query time: 0 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Wed Nov 21 07:34:15 2018
;; MSG SIZE rcvd: 90
EC2의 개인 IP 주소가 반환됩니다.
$ curl 172.31.21.200:32901
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
EC2 타입 + 네트워크 모드 = awsvpc
작업 정의
"portMappings": [],
"networkMode": "awsvpc",
서비스
awsvpc 모드는 A 레코드와 SRV 레코드를 설정할 수 있습니다.
DNS 레코드
이름 확인
$ dig 94a84b79ebb04a0daf98c303abe3b1bb.nginx_ec2_awsvpc3.local
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> 94a84b79ebb04a0daf98c303abe3b1bb.nginx_ec2_awsvpc3.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14169
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;94a84b79ebb04a0daf98c303abe3b1bb.nginx_ec2_awsvpc3.local. IN A
;; ANSWER SECTION:
94a84b79ebb04a0daf98c303abe3b1bb.nginx_ec2_awsvpc3.local. 60 IN A 172.31.4.11
;; Query time: 2 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Wed Nov 21 09:05:56 2018
;; MSG SIZE rcvd: 90
$ curl 172.31.4.11:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
직접 호스트 이름으로 HTTP 요청할 수도 있습니다.
$ curl nginx_ec2_awsvpc3.local.
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
Fargate 유형 + 네트워크 모드 = awsvpc
작업 정의
"portMappings": [],
"networkMode": "awsvpc",
서비스
awsvpc 모드는 A 레코드와 SRV 레코드를 설정할 수 있습니다.
DNS
이름 확인
$ dig SRV nginx_ec2_awsvpc3.local
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> SRV nginx_ec2_awsvpc3.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24816
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;nginx_ec2_awsvpc3.local. IN SRV
;; ANSWER SECTION:
nginx_ec2_awsvpc3.local. 60 IN SRV 1 1 80 94a84b79ebb04a0daf98c303abe3b1bb.nginx_ec2_awsvpc3.local.
;; Query time: 5 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Wed Nov 21 09:31:02 2018
;; MSG SIZE rcvd: 117
$ dig 94a84b79ebb04a0daf98c303abe3b1bb.nginx_ec2_awsvpc3.local
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.58.amzn1 <<>> 94a84b79ebb04a0daf98c303abe3b1bb.nginx_ec2_awsvpc3.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44240
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;94a84b79ebb04a0daf98c303abe3b1bb.nginx_ec2_awsvpc3.local. IN A
;; ANSWER SECTION:
94a84b79ebb04a0daf98c303abe3b1bb.nginx_ec2_awsvpc3.local. 60 IN A 172.31.4.11
;; Query time: 2 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Wed Nov 21 09:32:47 2018
;; MSG SIZE rcvd: 90
$ curl 172.31.4.11:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
직접 호스트 이름으로 HTTP 요청도 가능합니다.
$ curl nginx_ec2_awsvpc3.local
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
약속
투고 내용은 개인의 의견이며, 소속 기업·부문 견해를 대표하는 것이 아닙니다.
Reference
이 문제에 관하여(ECS Service Discovery 사용해 보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/atsumjp/items/7c4c8640629f9eff4827텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)