[패스트캠퍼스]namespace - Network 네임스페이스 - 보충 설명
실무 초밀착 리눅스 : 클라우드 환경 운영부터 성능분석까지
https://fastcampus.co.kr/dev_online_linuxcloud
강의 목차 : 12. (실습) namespace - Network 네임스페이스
Q1>
ns0 -> ns1 로 연결 시 packet error 가 발생
A1>
# sysctl net.ipv4.ip_forward
1 의 경우 네임스페이스와 외부 네트워크 간의 통신에 필요한 서로 다른 네트워크 인터페이스 간에 패킷을 전달할 수 있음.
참조>
net.ipv4.ip_forward가 0(비활성화)으로 설정되면 시스템은 인터페이스 간에 패킷을 전달하지 않는 기본 구성으로 작동합니다.
이것은 일반적으로 라우팅이나 네트워크 포워딩을 수행하지 않는 독립 실행형 호스트의 경우입니다.
그러나 net.ipv4.ip_forward가 1(활성화됨)로 설정되면 시스템이 인터페이스 간에 IP 패킷을 전달하도록 구성되어 라우터 또는 네트워크 게이트웨이 역할을 할 수 있습니다.
이를 통해 시스템은 서로 다른 네트워크 또는 서브넷 간에 패킷을 라우팅할 수 있습니다.
방화벽을 임시로 해제하여 확인
#sudo ufw disable
정상적으로 연결 테스트 완료
참조>
방화벽이 켜져 있으면 ping 명령이 사용하는 ICMP(Internet Control Message Protocol) 패킷을 차단할 수 있습니다.
ICMP는 ping 유틸리티를 포함하여 네트워크 문제 해결 및 진단에 사용되는 프로토콜입니다.
방화벽 규칙이 ICMP 트래픽을 차단하도록 구성된 경우 'ping' 명령이 차단되어 패킷이 손실되고 응답이 없습니다.
Q2>
AWS Server 재부팅 후 기존 설정한 network namespace가 초기화 되는데 맞는 건지?
A2>
네트워크 네임스페이스 및 관련 네트워크 구성이 서버 재부팅 후 기본 상태로 재설정되는 것은 정상입니다.
서버가 다시 시작되면 모든 네트워크 네임스페이스, 인터페이스, IP 주소 및 라우팅 테이블이 일반적으로 초기 구성으로 재설정됩니다.
네트워크 네임스페이스는 필요에 따라 생성, 수정 및 삭제할 수 있는 격리된 네트워크 환경을 제공하도록 설계되었습니다.
서버가 다시 시작되면 깨끗한 상태로 시작되며 이전에 생성된 네트워크 네임스페이스와 해당 구성은 자동으로 보존되지 않습니다.
재부팅 시 영구 네트워크 네임스페이스 및 해당 구성이 필요한 경우 시작 스크립트 생성 또는 Docker 또는 Kubernetes와 같은 컨테이너화 기술 사용과 같은 사용자 지정 솔루션을 구현해야 합니다.
Q3>
ping 이 실행될 때 ns0 과 ns1 사이의 ICMP 패킷 흐름을 보여줘
A3>
+---------------------------------------------------------+
| Host Namespace |
| |
| +---------------------+ |
| | br0 | |
| | 192.168.2.1/24 | |
| +--------+------------+ |
| UP | UP |
| | |
| +------+-------+ |
| | veth0 | <--- Connected to |
| |192.168.2.2 | <--- ceth0 in ns0 |
| UP +------+-------+ |
| | UP |
| | |
| | |
| | |
| UP | UP |
| +-------------+ <--- Connected to |
| | veth1 | <--- ceth1 in ns1 |
| |192.168.2.3 | |
| +-------------+ |
| |
+---------------------------------------------------------+
| |
| |
| ICMP Request (Echo) |
+---------------------------->|
| |
| |
| ICMP Reply (Echo Reply) |
|<----------------------------+
| |
"UP"은 인터페이스가 작동 중 / 화살표는 인터페이스 간의 연결 방향 이다.
veth0과 ceth0 사이의 연결과 veth1과 ceth1 사이의 연결은 "연결됨"으로 표시되어 이들 사이의 연결을 나타냄
Q4>
Network Namespace 를 사용하는 이유를 알려줘
A4>
네트워크 네임스페이스를 사용하면 단일 호스트 내에서 격리된 네트워크 환경을 만들 수 있습니다.
각 네임스페이스는 고유한 네트워크 인터페이스 세트, IP 주소, 라우팅 테이블 및 네트워크 스택을 사용하여 독립적으로 작동합니다.
이러한 격리상태는 한 네임스페이스 내에서 실행되는 프로세스나 애플리케이션이 다른 네임스페이스의 네트워크 구성을 직접 방해하거나 액세스할 수 없도록 합니다.
네트워크 요구 사항이 충돌하는 여러 응용 프로그램을 테스트, 개발 또는 실행하기 위해 격리된 환경을 만드는 데 특히 유용합니다.
컨테이너 또는 가상 머신과 같은 가상화 기술에서 자주 사용됩니다.
각 컨테이너 또는 가상 머신은 자체 네트워크 네임스페이스를 가질 수 있으므로 별도의 네트워크 스택 및 네트워크 구성을 가질 수 있습니다.
이를 통해 여러 컨테이너 또는 가상 머신이 각각 고유한 네트워킹 환경을 갖춘 단일 호스트에서 실행되어 더 나은 리소스 활용 및 보안을 제공할 수 있습니다.
Q5>
시나리오 하나를 작성해서 알려줘
A5>
마이크로서비스 기반 애플리케이션의 개발 및 테스트입니다.
이 시나리오에서는 네트워크를 통해 서로 통신하는 여러 마이크로 서비스로 구성된 애플리케이션을 고려해 보겠습니다.
각 마이크로 서비스는 별도의 프로세스로 실행되며 특정 IP 주소, 포트 및 네트워크 구성과 같은 고유한 네트워크 요구 사항이 있습니다.
네트워크 네임스페이스를 활용하면 각 마이크로서비스에 대해 별도의 네임스페이스를 만들어 네트워크 환경을 효과적으로 격리할 수 있습니다.
설정 방법은 다음과 같습니다.
- 각 마이크로서비스에 대한 네트워크 네임스페이스 생성
# ip netns add service1
# ip netns add service2
ip netns add 명령을 사용하여 각 마이크로서비스에 대한 전용 네임스페이스를 생성합니다.
예를 들어 첫 번째 마이크로서비스의 경우 'ip netns add service1', 두 번째 마이크로서비스의 경우 'ip netns add service2' 등입니다.
- 각 네임스페이스 내에서 네트워크 인터페이스 구성
# ip netns exec service1 ip link set lo up
# ip netns exec service2 ip link set lo up
# ip netns exec service1 ip addr add 192.168.1.1/24 dev eth0
# ip netns exec service2 ip addr add 192.168.1.2/24 dev eth0
# ip netns exec service1 ip route add default via 192.168.1.1
# ip netns exec service2 ip route add default via 192.168.1.2
각 네임스페이스 내에서 네트워크 인터페이스('veth' 쌍)를 설정하고 IP 주소를 할당하고 라우팅 테이블을 구성하고 해당 마이크로 서비스에 필요한 네트워크 서비스를 활성화합니다.
이렇게 하면 각 마이크로 서비스가 자체적으로 격리된 네트워크 스택을 갖게 됩니다.
- 가상 네트워크 인터페이스를 사용하여 마이크로서비스 연결
# ip link add veth1 type veth peer name veth2
# ip link set veth1 netns service1
# ip link set veth2 netns service2
# ip netns exec service1 ip link set veth1 up
# ip netns exec service2 ip link set veth2 up
# ip netns exec service1 ip addr add 10.0.0.1/24 dev veth1
# ip netns exec service2 ip addr add 10.0.0.2/24 dev veth2
가상 네트워크 인터페이스 쌍('veth' 쌍)을 생성하고 한쪽 끝을 각 마이크로서비스의 해당 네임스페이스에 연결하여 마이크로서비스를 연결합니다.
이를 통해 마이크로서비스는 해당 네임스페이스 내에서 여전히 격리된 상태에서 이러한 가상 인터페이스를 통해 서로 통신할 수 있습니다.
애플리케이션 테스트 및 디버그: 네트워크 네임스페이스가 설정되었으므로 이제 애플리케이션을 테스트하고 디버그할 수 있습니다.
각 마이크로서비스는 자체 격리된 네트워크 환경에서 작동하며 프로덕션 설정을 모방합니다.
이를 통해 개발자는 다른 마이크로 서비스나 호스트 시스템에 영향을 주지 않고 마이크로 서비스 간의 통신을 확인하고,
네트워크 트래픽을 모니터링하고, 네트워킹 문제를 진단 및 수정할 수 있습니다.
마이크로서비스 기반 애플리케이션의 개발 및 테스트에 네트워크 네임스페이스를 사용함으로써 개발자는 적절한 격리를 보장하고 실제 네트워크 환경을 시뮬레이션하며 네트워크 관련 문제를 쉽게 식별하고 해결할 수 있습니다.
이는 보다 정확하고 제어된 테스트 환경을 촉진하여 프로덕션에서 보다 강력하고 안정적인 애플리케이션으로 이어집니다.