[2] 250909~ 클라우드/[b] 12월 : Terraform + Ansible

[41] ECS fargate 네트워크 아키텍쳐

서버관리자 페페 2026. 2. 11. 11:54

[0]

포인터

이제 ECS 서비스 중 FARGATE 사용하는 것을 "network" 위주로 공부할 건데 task_definition에 보면 1. network_mode = "awsvpc" 2. container definition내부 portmappings = var.container_port (variables.tf에 default 80) 그리고 service에 보면 network_configuration에 1. subnets 2. security group 3. assign_public_ip 있잖아 여기서 질문이 들어간다 service에서 사용하는 network conf는 cluster / task가 깔릴 plate로서 subent과 SG를 지정하는 거고 task definition에서 사용하는 network_mod container_port는 각 container의 엔드포인트를 지정한다는 거야?

 

--------

 

[1]

Service의 Network_conf

이거는 TASK 가 실제로 생성될 네트워크 인프라 좌표

이 TASK ENI를 어디 VPC / SUBNET / SG에 꽃을까?

 

-

 

[2]

Fargate는 TASK마다 ENI 1개 붙음

TASK = network interface = VPC 내부 노드 하나

 

-

 

[3]

Task Definition의 network_mode = "awsvpc"

Fargate에서는 선택이 아닌 필수값

-> container가 Host network가 아니라 ENI 직접 사용

 

* 이전에는 Host IP 공유 / bridge는 Docker NAT 사용

 

-

 

[4]

awsvpc 구조

ENI (10.0.1.15)
   ├─ container A
   └─ container B

컨테이너가 ENI IP 공유

Pod처럼 동작 (k8s 유사)

localhost 통신 가능

SG를 컨테이너 단위처럼 사용 가능

 

그래서 awsvpc = TASK 자체가 하나의 VM처럼 네트워크를 가짐

 

-

 

[5]

containerDefinitions의 portMappings

 

awsvpc모드에서 portMapping의 의미

# 구형 Bridge mode?
Host:32768 → Container:80
// 포트 변환 필요

############################3

# awsvpc?
ENI:80 -> Container:80
// Host 개념 없음
// NAT 없음
// ENI == Container IP

그래서 portMappings는

컨테이너가 어떤 포트를 listen하는지 선언

 

실제 역할

Client → ALB → ENI:80 → Container:80

1 : ALB TARGET 등록 기준 포트

2 : Service discovery 포트

3 : Health Check 포트

4 : SG inbound 설계 기준

 

-

 

[6]

관계도

[ Service ]

subnet = 10.0.1.0/24
sg     = web-sg
public ip = true
        │
        ▼
ENI 생성 (10.0.1.25)
        │
        ▼
[ Task (awsvpc) ]
        │
        ▼
Container :80 listen

# Service network_conf

- TASK ENI 생성 위치

- 네트워크 경계 / 라우팅 / 보안 결정

- 인프라 레벨

 

# Task definition network_mode

- ENI를 컨테이너가 직접 쓸지 결정

- 네트워크 아키텍쳐 레벡

 

# container portMappings

- 컨테이너 리슨 포트

- 트래픽 종착지 포트

- 서비스 엔드포인트 정의