

# Amazon ECS Linux 태스크에 대해 Docker의 가상 네트워크 사용
<a name="networking-networkmode-bridge"></a>

`bridge` 네트워크 모드는 Amazon EC2 인스턴스에서 호스팅되는 Amazon ECS 작업에만 지원됩니다.

`bridge` 모드를 사용하면 가상 네트워크 브리지를 사용하여 호스트와 컨테이너 네트워킹 사이에 계층을 생성합니다. 이렇게 하면 호스트 포트를 컨테이너 포트에 다시 매핑하는 포트 매핑을 생성할 수 있습니다. 매핑은 정적이거나 동적일 수 있습니다.

![정적 포트 매핑이 있는 브리지 네트워크 모드를 사용하는 네트워크 아키텍처를 보여주는 다이어그램.](http://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/images/networkmode-bridge.png)


정적 포트 매핑을 사용하면 컨테이너 포트에 매핑하려는 호스트 포트를 명시적으로 정의할 수 있습니다. 위 예제를 사용하면 호스트의 포트 `80`가 컨테이너의 포트 `3000`에 매핑됩니다. 컨테이너화된 애플리케이션과 통신하려면 Amazon EC2 인스턴스의 IP 주소로 포트 `80`을 통해 트래픽을 전송합니다. 컨테이너화된 애플리케이션의 관점에서 보면 인바운드 트래픽이 포트 `3000`을 통해 전달된다고 볼 수 있습니다.

트래픽 포트만 변경하려는 경우에는 정적 포트 매핑이 적합합니다. 하지만 여전히 `host` 네트워크 모드를 사용할 때와 같은 단점이 있습니다. 각 호스트에서 작업의 인스턴스화를 두 번 이상 실행할 수 없습니다. 정적 포트 매핑에서는 단일 컨테이너만 포트 80에 매핑할 수 있기 때문입니다.

이 문제를 해결하려면 다음 다이어그램과 같은 동적 포트 매핑과 함께 `bridge` 네트워크 모드를 사용하는 것이 좋습니다.

![동적 포트 매핑이 있는 브리지 네트워크 모드를 사용하는 네트워크 아키텍처를 보여주는 다이어그램.](http://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/images/networkmode-bridge-dynamic.png)


포트 매핑에서 호스트 포트를 지정하지 않고 Docker에서 임시 포트 범위에서 사용되지 않는 임의의 포트를 선택하여 컨테이너의 공용 호스트 포트로 할당하도록 할 수 있습니다. 예를 들어 컨테이너의 포트 `3000`에서 수신 대기하는 Node.js 애플리케이션에는 Amazon EC2 호스트의 `47760`과 같이 높은 번호의 임의 포트가 할당될 수 있습니다. 이렇게 하면 호스트에서 해당 컨테이너의 여러 복사본을 실행할 수 있습니다. 또한 호스트에서 각 컨테이너에 자체 포트를 할당할 수 있습니다. 컨테이너의 각 복사본은 포트 `3000`에서 트래픽을 수신합니다. 하지만 이러한 컨테이너로 트래픽을 보내는 클라이언트는 임의로 할당된 호스트 포트를 사용합니다.

Amazon ECS를 사용하면 각 작업에 임의로 할당된 포트를 추적할 수 있습니다. 이렇게 하려면 작업 IP 주소 및 포트 목록을 포함하도록 로드 밸런서 대상 그룹 및 AWS Cloud Map 서비스 검색을 자동으로 업데이트합니다. 따라서 동적 포트가 있는 `bridge` 모드를 사용하여 운영되는 서비스를 더 쉽게 사용할 수 있습니다.

그러나 `bridge` 네트워크 모드를 사용할 때의 한 가지 단점은 서비스 간 통신을 차단하기가 어렵다는 것입니다. 서비스는 사용되지 않는 임의의 포트에 할당될 수 있으므로 호스트 간에 넓은 포트 범위를 열어야 합니다. 하지만 특정 서비스가 다른 특정 서비스 하나와만 통신할 수 있도록 특정 규칙을 만드는 것은 쉽지 않습니다. 서비스에는 보안 그룹 네트워킹 규칙에 사용할 특정 포트가 없습니다.

## IPv6 전용 워크로드에 대한 브리지 네트워킹 모드 구성
<a name="networking-networkmode-bridge-ipv6-only"></a>

IPv6에서의 통신을 위해 `bridge` 모드를 구성하려면 Docker 대몬 설정을 업데이트해야 합니다. 다음으로 `/etc/docker/daemon.json`을 업데이트합니다.

```
{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64",
  "ip6tables": true,
  "experimental": true
}
```

Docker 대몬 설정을 업데이트한 후 대몬을 다시 시작해야 합니다.

**참고**  
대몬을 업데이트하고 다시 시작하면 Docker는 인스턴스에서 IPv6 전달을 활성화합니다. 이 경우 Amazon Linux 2 AMI를 사용하는 인스턴스에서 기본 경로가 손실될 수 있습니다. 이를 방지하려면 다음 명령을 사용하여 서브넷의 IPv6 게이트웨이를 통해 기본 경로를 추가합니다.  

```
ip route add default via FE80:EC2::1 dev eth0 metric 100
```