본문 바로가기
Docker

[Docker] ceth, veth 각각 연결 vs 페어 연결

by Yoon_estar 2024. 10. 1.
728x90
반응형

개요

네트워크 인터페이스를 구성할 때 "각각 연결하는 것"과 "veth 페어 설정" 간에는 개념적 및 동작 방식에서 큰 차이점이 있습니다. 각각의 방법은 특정 상황에 따라 적합한 용도가 있으며, 네트워크 격리 및 연결을 어떻게 관리할지에 따라 선택이 달라질 수 있습니다.

이미지와 같은 설정에서는 veth 인터페이스가 네임스페이스(ns) 내부의 ceth 인터페이스와 Docker 네트워크 브리지(DevOpsDB) 간의 통신을 연결하는 중계 역할을 합니다. 이를 통해 네임스페이스와 Docker 브리지 네트워크 및 그 안에 있는 컨테이너들 간의 통신을 가능하게 해줍니다.

 

1. 네트워크 구성 설명

1.1 네임스페이스 내부 인터페이스(ceth0, ceth1)

  • ceth0과 ceth1은 네임스페이스(ns) 내부에 생성된 가상 네트워크 인터페이스입니다.
  • 각각의 ceth 인터페이스는 veth 페어를 통해 외부 네트워크(즉, 호스트 네임스페이스 및 Docker 브리지)와 연결됩니다.
  • 네임스페이스 내부에서 독립적인 IP 주소와 라우팅 테이블을 가집니다.

1.2 veth 페어

  • veth 페어는 한쪽 인터페이스가 네임스페이스 내부(ceth0, ceth1)와 연결되고, 다른 쪽은 호스트 네트워크 브리지(DevOps 브리지, DB 브리지)와 연결됩니다.
  • veth의 한쪽 끝은 네임스페이스 내부 인터페이스(ceth0, ceth1)로 연결되고, 다른 쪽은 Docker 브리지와 연결되므로, 네임스페이스와 Docker 네트워크 간의 연결 통로 역할을 합니다.

1.3 Docker network bridge(devops, db)

  • 각 Docker 네트워크 브리지는 독립적인 네트워크 세그먼트로 구성됩니다. 예를 들어:
    • DevOps 브리지: 192.168.1.0/24
    • DB 브리지: 192.168.2.0/24
  • DevOps 브리지에 속한 Docker 컨테이너(DevOps01, DevOps02)와 DB 브리지에 속한 컨테이너(DB01, DB02)는 같은 브리지 네트워크 내에서 서로 통신이 가능합니다.

1.4 veth 역할

  • 각 veth 인터페이스는 두 네트워크 인터페이스 간의 연결을 위한 가상 네트워크 케이블과 같은 역할을 합니다.
  • 예를 들어:
    • veth0은 네임스페이스의 ceth0과 DevOps 브리지에 연결되어, 네임스페이스가 DevOps 브리지 및 그 안에 있는 컨테이너들과 통신할 수 있도록 합니다.
    • veth1은 네임스페이스의 ceth1과 DB 브리지에 연결되어, 네임스페이스가 DB 브리지 및 그 안에 있는 컨테이너들과 통신할 수 있도록 합니다.

1.5 네트워크 흐름 예시

  • 네임스페이스(ns) 내 ceth0에서 DevOps01 컨테이너로 통신
    • 네임스페이스 내부에서 ceth0 인터페이스를 통해 패킷이 전달되면, 이 패킷은 veth0을 통해 DevOps 브리지로 전달됩니다.
    • DevOps 브리지에 속한 DevOps01 또는 DevOps02 컨테이너가 해당 패킷을 수신하고 응답할 수 있습니다.
  • DB01 컨테이너에서 ceth1로 통신
    • DB01 컨테이너에서 네임스페이스로 패킷을 보내려면, 패킷이 DB 브리지로 전송되고, veth1을 통해 ceth1 인터페이스로 전달됩니다.
    • ceth1 인터페이스가 네임스페이스의 라우팅 설정에 따라 패킷을 처리하게 됩니다.

2. 각각 연결하는 것

각각의 네트워크 인터페이스를 별도의 네트워크에 연결하는 경우는 네트워크 인터페이스를 독립적으로 관리하고, 각각의 네트워크 환경에서 통신을 별도로 구성할 때 사용하는 방식입니다.

2.1 특징

  • 독립적인 네트워크 인터페이스 관리: 각 인터페이스는 자체 네트워크 환경을 가지며, 다른 인터페이스와 직접적인 연결이 없을 수 있습니다.
  • 각기 다른 네트워크 세그먼트에 연결 가능: 하나의 인터페이스가 192.168.1.0/24 네트워크에, 다른 인터페이스가 192.168.2.0/24에 연결되어 있을 수 있습니다.
  • 컨테이너, 호스트 네트워크 등과의 연결: 독립적으로 다른 Docker 네트워크나 호스트 네트워크에 연결될 수 있습니다.
  • 네트워크 간 직접 통신이 불가능: 기본적으로는 네트워크 인터페이스 간에 직접적인 통신이 불가능하므로, 다른 네트워크 인터페이스로부터 패킷을 받거나 전달하려면 라우팅 설정이나 브리지 연결이 필요합니다.

2.2 실습

docker network create --driver bridge net1
docker network create --driver bridge net2

docker run -d --name container1 --network net1 ubuntu
docker run -d --name container2 --network net2 ubuntu

 

이 방법은 격리된 네트워크 환경이 필요할 때 유용합니다. 예를 들어, 네트워크 테스트, 독립적인 서브넷 관리, 또는 보안적으로 구분된 네트워크를 설정할 때 사용됩니다.

 

3. veth 페어 설정

veth (virtual Ethernet) 페어는 네트워크 네임스페이스 또는 컨테이너 간의 통신을 위해 사용하는 가상 네트워크 인터페이스의 한 쌍입니다. veth 는 한쪽 인터페이스에서 입력된 데이터가 다른 쪽 인터페이스로 직접 전달되는 구조를 가지고 있어, 네트워크 네임스페이스 간의 연결이나 컨테이너 간의 직접적인 통신을 설정할 때 유용합니다.

3.1 특징

  • 가상 네트워크 인터페이스의 한 쌍: veth는 두 개의 인터페이스가 쌍으로 연결되며, 하나의 veth 인터페이스에서 들어온 패킷이 자동으로 다른 쪽 veth 인터페이스로 전달됩니다.
  • 네트워크 네임스페이스 간 통신: veth는 서로 다른 네임스페이스 간에 연결될 수 있습니다. 예를 들어, ns1에 있는 veth0과 ns2에 있는 veth1이 연결되어 있다면, 두 네임스페이스가 서로 통신할 수 있게 됩니다.
  • 브리지 네트워크 구성에 사용: veth를 호스트의 브리지 네트워크와 연결하여 다수의 네트워크 네임스페이스 또는 컨테이너를 브리지 네트워크와 통합할 수 있습니다.
  • 직접적인 패킷 전달: 두 인터페이스는 한 쌍으로 연결되어 있어, 라우팅이나 추가적인 네트워크 설정이 없어도 서로 패킷을 주고받을 수 있습니다.

3.2 실습

# 네트워크 네임스페이스 간 veth 페어 생성 및 연결
ip netns add ns1
ip netns add ns2
ip link add veth0 type veth peer name veth1

# 각 네임스페이스에 veth 페어 연결
ip link set veth0 netns ns1
ip link set veth1 netns ns2

# 네임스페이스 내에서 인터페이스 활성화 및 IP 할당
ip netns exec ns1 ip addr add 192.168.1.1/24 dev veth0
ip netns exec ns2 ip addr add 192.168.1.2/24 dev veth1
ip netns exec ns1 ip link set veth0 up
ip netns exec ns2 ip link set veth1 up

# 네임스페이스 간 ping 테스트
ip netns exec ns1 ping 192.168.1.2

4. 주요 차이점

  • 통신 구조: 각각의 네트워크 연결 방식은 브리지나 호스트 네트워크와 독립적으로 구성되어 라우팅이 필요하지만, veth 페어는 두 인터페이스가 직접적으로 연결되어 있어 별도의 라우팅이나 브리지 설정이 없어도 바로 통신이 가능합니다.
  • 사용 목적: 각각의 네트워크 인터페이스 연결은 보통 다양한 네트워크 세그먼트를 구성하거나, 서로 다른 보안 환경을 구축할 때 사용됩니다. 반면, veth 페어는 네트워크 네임스페이스 간의 연결 및 테스트 용도로 많이 사용됩니다.
  • 유연성: veth 페어는 다양한 네트워크 구성에서 다른 인터페이스와 쉽게 결합할 수 있어 네트워크 테스트 및 다중 네트워크 환경을 구축할 때 유용합니다.
반응형