ECS Service Discovery 사용해 보기

10016 단어 ECSAWS

목적



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>

약속



투고 내용은 개인의 의견이며, 소속 기업·부문 견해를 대표하는 것이 아닙니다.

좋은 웹페이지 즐겨찾기