2025. 1. 14. 17:56ㆍ쿠버네티스
1. 네트워크의 기본 개념
- 네트워크란?
- 두 컴퓨터(예: A와 B)가 서로 통신하려면 네트워크가 필요합니다.
- 네트워크를 구성하려면 스위치(Switch)를 사용하며, 각 컴퓨터는 네트워크 인터페이스(물리적 또는 가상)를 통해 스위치와 연결됩니다.
- 스위칭(Switching)
- 스위치는 동일한 네트워크 내에서 데이터를 전달합니다.
- 예: A와 B가 같은 네트워크(192.168.1.0)에 있을 때, 스위치를 통해 서로 통신 가능.
- 라우팅(Routing)
- 라우터는 서로 다른 네트워크를 연결합니다.
- 예: 네트워크 192.168.1.0과 192.168.2.0 사이에서 데이터를 전달하려면 라우터가 필요합니다.
- 라우터는 두 네트워크에 각각 IP 주소를 할당받아야 합니다.
- 게이트웨이(Gateway)
- 게이트웨이는 한 네트워크에서 다른 네트워크로 나가는 "문" 역할을 합니다.
- 각 시스템은 게이트웨이를 통해 다른 네트워크와 통신할 수 있습니다.
2. Linux에서의 기본 명령어
- IP 링크 확인: ip link
- 호스트의 네트워크 인터페이스를 확인합니다.
- IP 주소 확인 및 설정:
- 확인: ip addr
- 설정: ip addr add [IP주소] dev [인터페이스 이름]
- 라우팅 테이블 확인 및 추가:
- 확인: route 또는 ip route
- 추가: ip route add [목적지 네트워크] via [게이트웨이 IP]
3. 라우터 설정 및 패킷 전달
- 라우터 역할을 하는 호스트 구성:
- 두 개의 네트워크에 연결된 호스트(B)를 라우터로 설정하여 A와 C 간 통신 가능하게 만듭니다.
- 패킷 전달 활성화:
- 기본적으로 Linux에서는 보안상의 이유로 패킷 전달이 비활성화되어 있습니다.
- 활성화 방법:
echo 1 > /proc/sys/net/ipv4/ip_forward
(영구 적용하려면 /etc/sysctl.conf 파일 수정 필요)
4. DNS 및 인터넷 연결
- DNS란?
- 도메인 이름(예: www.google.com)을 IP 주소로 변환하는 시스템입니다.
- 기본 게이트웨이 설정:
- 인터넷에 연결하려면 라우터를 인터넷에 연결하고, 기본 게이트웨이를 설정해야 합니다.
- 예: 모든 외부 네트워크 트래픽을 특정 라우터로 보내도록 설정.
쉽게 이해하기 위한 비유
- 스위치: 한 방 안에서 사람들끼리 대화할 수 있도록 돕는 중재자
- 라우터: 서로 다른 방(네트워크)을 연결해주는 문지기
- 게이트웨이: 집 밖으로 나가는 대문
- DNS: 사람 이름을 전화번호로 바꿔주는 전화번호부
DNS(Domain Name System) 이해
DNS란?
- DNS는 사람이 이해하기 쉬운 도메인 이름(예: www.google.com)을 컴퓨터가 이해할 수 있는 IP 주소(예: 172.217.194.0)로 변환하는 시스템입니다.
- 작은 네트워크에서는 /etc/hosts 파일에 이름과 IP 주소를 직접 매핑하여 사용할 수 있습니다.
/etc/hosts 파일 사용
- /etc/hosts 파일에 다음 형식으로 이름과 IP를 추가:
192.168.1.11 db
- 이렇게 하면 db라는 이름으로 해당 IP를 참조할 수 있습니다.
DNS 서버 사용
- 큰 네트워크에서는 중앙에서 관리되는 DNS 서버가 필요합니다.
- DNS 서버 설정:
- /etc/resolv.conf 파일에 다음과 같이 DNS 서버 IP 추가:
nameserver 192.168.1.100
DNS 작동 방식
이름 해석(Name Resolution)
- 호스트가 이름을 IP로 변환하는 과정입니다.
- 순서:
- 먼저 /etc/hosts 파일을 확인
- 없으면 DNS 서버로 요청
도메인 이름 구조
- 도메인 이름은 계층 구조로 구성됩니다:
- 예: www.google.com
- www: 서브도메인
- google: 도메인 이름
- .com: 최상위 도메인(TLD)
- 예: www.google.com
DNS 레코드 유형
- A 레코드: IPv4 주소와 이름 매핑
- AAAA 레코드: IPv6 주소와 이름 매핑
- CNAME 레코드: 별칭(다른 이름) 매핑
실습 예제
작은 네트워크에서의 설정
- 두 컴퓨터 A(192.168.1.10)와 B(192.168.1.11)가 같은 네트워크에 연결되어 있다고 가정.
- B의 이름을 db로 설정하려면 A의 /etc/hosts 파일에 다음 추가:
192.168.1.11 db
- A에서 ping db 명령어 실행 시 B로 연결 가능.
DNS 서버 설정
- 내부 DNS 서버를 사용하려면 모든 호스트의 /etc/resolv.conf 파일에 다음 추가:
nameserver 192.168.1.100
외부 인터넷 사이트(예: www.facebook.com)를 접근하려면 공용 DNS 서버(예: Google의 8.8.8.8)를 추가:
nameserver 8.8.8.8
고급 설정 및 관리
nsswitch.conf 파일
- 호스트가 이름 해석 시 우선순위를 결정:
- 기본값: /etc/hosts → DNS 순서로 확인
- /etc/nsswitch.conf에서 수정 가능:
hosts: files dns
캐싱(Caching)
- 자주 조회되는 도메인의 IP는 캐싱되어 성능 향상.
명령어 | 설명 |
ip link | 네트워크 인터페이스 확인 |
ip addr | IP 주소 확인 |
ip addr add | IP 주소 추가 |
route 또는 ip route | 라우팅 테이블 확인 및 수정 |
nslookup | 특정 도메인의 DNS 조회 |
dig | 상세한 DNS 정보 조회 |
리눅스 네트워크 네임스페이스란?
네임스페이스는 리눅스 시스템에서 프로세스를 격리하기 위해 사용되는 기술입니다. 특히 네트워크 네임스페이스는 컨테이너(예: Docker)에서 네트워크 격리를 구현하는 데 사용됩니다.네임스페이스를 쉽게 이해하기 위해, 이를 집과 방으로 비유할 수 있습니다:
- 호스트 시스템은 집 전체에 해당합니다.
- 네임스페이스는 집 안의 방에 해당하며, 각 방은 독립적인 공간을 제공합니다.
- 각 방(네임스페이스)에 있는 사람(프로세스)은 자기 방 안에서만 활동을 볼 수 있고, 다른 방의 활동은 보이지 않습니다.
- 부모(호스트)는 모든 방을 관찰하고 관리할 수 있습니다.
네트워크 네임스페이스는 이러한 개념을 네트워크에 적용하여 컨테이너가 호스트의 네트워크 정보를 보거나 접근하지 못하도록 격리합니다.
네트워크 네임스페이스 생성 및 관리
1. 네트워크 네임스페이스 생성
리눅스에서 새로운 네트워크 네임스페이스를 생성하려면 다음 명령어를 사용합니다:
ip netns add <네임스페이스_이름>
ip netns add red
ip netns add blue
2. 네임스페이스 내 인터페이스 확인
네임스페이스 내부에서 명령어를 실행하려면 ip netns exec 명령어를 사용합니다:
ip netns exec <네임스페이스_이름> <명령어>
ip netns exec red ip link
이 명령은 해당 네임스페이스 내에서 활성화된 인터페이스만 표시합니다.
네트워크 연결 설정
1. 가상 이더넷 페어(Virtual Ethernet Pair)
두 네임스페이스 간 연결을 설정하려면 가상 이더넷 페어(Virtual Ethernet Pair)를 생성합니다. 이는 물리적 케이블처럼 작동하며, 두 끝단이 각각 다른 네임스페이스에 연결됩니다.명령어 예시:
ip link add veth-red type veth peer name veth-blue
위 명령은 veth-red와 veth-blue라는 두 인터페이스를 생성합니다.각 인터페이스를 특정 네임스페이스에 연결하려면 다음 명령을 사용합니다:
ip link set veth-red netns red
ip link set veth-blue netns blue
2. IP 주소 할당 및 활성화
각 인터페이스에 IP 주소를 할당하고 활성화해야 합니다. 예를 들어:
ip netns exec red ip addr add 192.168.15.1/24 dev veth-red
ip netns exec blue ip addr add 192.168.15.2/24 dev veth-blue
ip netns exec red ip link set veth-red up
ip netns exec blue ip link set veth-blue up
3. 핑 테스트
두 네임스페이스 간 연결을 확인하려면 핑 테스트를 수행할 수 있습니다:
ip netns exec red ping 192.168.15.2
가상 브리지(Virtual Bridge) 설정
다수의 네임스페이스가 서로 통신하도록 하려면 가상 브리지(예: Linux Bridge)를 생성해야 합니다.
1. 브리지 생성
다음 명령어로 브리지를 생성합니다:
ip link add name br0 type bridge
ip link set br0 up
2. 브리지와 네임스페이스 연결
가상 이더넷 페어의 한쪽 끝을 브리지에 연결합니다:
ip link set veth-red-br master br0
ip link set veth-blue-br master br0
ip link set veth-red-br up
ip link set veth-blue-br up
외부와의 연결
1. NAT 설정
네임스페이스 내부에서 외부 네트워크(예: 인터넷)에 접근하려면 NAT(Network Address Translation)를 설정해야 합니다. 이는 iptables 명령어로 수행됩니다:
iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -o eth0 -j MASQUERADE
2. 기본 게이트웨이 추가
각 네임스페이스의 라우팅 테이블에 기본 게이트웨이를 추가하여 외부로 나가는 트래픽을 호스트로 전달합니다:
ip netns exec red ip route add default via 192.168.15.5
외부에서 내부로의 접근
외부 호스트가 특정 네임스페이스에 접근하도록 하려면 포트 포워딩을 설정해야 합니다:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.15.2:80
iptables -A FORWARD -p tcp -d 192.168.15.2 --dport 80 -j ACCEPT
이 설정은 호스트의 포트 8080으로 들어오는 요청을 blue 네임스페이스의 포트 80으로 전달합니다. 위 과정을 통해 리눅스 시스템에서 네트워크 격리를 구현하고, 컨테이너 또는 가상 환경 간 통신 및 외부 연결을 설정할 수 있습니다.
While testing the Network Namespaces, if you come across issues where you can't ping one namespace from the other, make sure you set the NETMASK while setting IP Address. ie: 192.168.1.10/24
ip -n red addr add 192.168.1.10/24 dev veth-red
Another thing to check is FirewallD/IP Table rules. Either add rules to IP Tables to allow traffic from one namespace to another. Or disable IP Tables all together (Only in a learning environment).
네트워크 네임스페이스를 테스트하는 동안 한 네임스페이스에서 다른 네임스페이스로 **핑(ping)**이 작동하지 않는 문제가 발생할 경우, 다음 사항들을 확인해야 합니다:
- 넷마스크 설정 확인
IP 주소를 설정할 때 반드시 넷마스크를 포함해야 합니다. 예를 들어, 아래 명령어처럼 /24와 같은 넷마스크를 추가하세요:
ip -n red addr add 192.168.1.10/24 dev veth-red
- 넷마스크가 없으면 네임스페이스 간 통신이 제대로 이루어지지 않을 수 있습니다.
- FirewallD 또는 IP 테이블(IP Tables) 규칙 확인
네임스페이스 간의 트래픽을 허용하려면 방화벽 규칙을 설정하거나, 학습 환경에서만 방화벽을 비활성화할 수 있습니다:- IP 테이블 규칙 추가: 네임스페이스 간 트래픽을 허용하는 규칙을 추가합니다.
- IP 테이블 비활성화: 학습 환경에서는 IP 테이블을 완전히 비활성화하여 문제를 해결할 수 있습니다.
1. 환경 준비
- 리눅스 기반 가상 머신을 준비합니다 (예: Ubuntu, CentOS 등).
- iproute2 패키지가 설치되어 있는지 확인하세요 (ip 명령어 사용).
- 관리자 권한 (sudo)으로 작업을 진행합니다.
2. 네트워크 네임스페이스 생성
새로운 네임스페이스를 생성합니다:
ip netns add red
ip netns add blue
ip netns list
#각 인터페이스를 네임스페이스에 ㅇ녀결
ip link set veth-red netns red
ip link set veth-blue netns blue
4. IP 주소 할당 및 인터페이스 활성화
각 네임스페이스 내에서 IP 주소를 설정하고 인터페이스를 활성화합니다:
Red 네임스페이스
ip netns exec red ip addr add 192.168.15.1/24 dev veth-red
ip netns exec red ip link set veth-red up
ip netns exec red ip link set lo up
Blue 네임스페이스
ip netns exec blue ip addr add 192.168.15.2/24 dev veth-blue
ip netns exec blue ip link set veth-blue up
ip netns exec blue ip link set lo up
5. 연결 테스트
red 네임스페이스에서 blue 네임스페이스로 핑 테스트를 수행합니다:
ip netns exec red ping 192.168.15.2
다수의 네임스페이스 연결 (가상 브리지 사용)
여러 네임스페이스 간 통신을 위해 가상 브리지를 설정합니다.
가상 브리지 생성
ip link add name br0 type bridge
ip link set br0 up
브리지와 네임스페이스 연결
각 네임스페이스에 새로운 가상 이더넷 페어를 생성하고, 한쪽 끝을 브리지에 연결합니다.
Red 네임스페이스:
ip link add veth-red-br type veth peer name veth-red-vr
ip link set veth-red-br netns red
ip link set veth-red-vr master br0
ip link set veth-red-vr up
ip netns exec red ip addr add 192.168.15.1/24 dev veth-red-br
ip netns exec red ip link set veth-red-br up
Blue 네임스페이스:
ip link add veth-blue-br type veth peer name veth-blue-vr
ip link set veth-blue-br netns blue
ip link set veth-blue-vr master br0
ip link set veth-blue-vr up
ip netns exec blue ip addr add 192.168.15.2/24 dev veth-blue-br
ip netns exec blue ip link set veth-blue-br up
외부 네트워크와의 연결 (NAT 설정)
네임스페이스가 외부 인터넷에 접근하려면 NAT(Network Address Translation)를 설정해야 합니다.
IP 테이블 NAT 규칙 추가
호스트에서 다음 명령어를 실행하여 NAT를 활성화합니다:
iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -o eth0 -j MASQUERADE
기본 게이트웨이 설정
각 네임스페이스에 기본 게이트웨이를 추가합니다 (호스트의 브리지 IP 사용):
ip netns exec red ip route add default via 192.168.15.5
ip netns exec blue ip route add default via 192.168.15.5
외부에서 내부로의 접근 (포트 포워딩)
외부에서 특정 네임스페이스로 접근하려면 포트 포워딩을 설정합니다:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.15.2:80
iptables -A FORWARD -p tcp -d 192.168.15.2 --dport 80 -j ACCEPT
이 설정은 호스트의 포트 8080으로 들어오는 요청을 blue 네임스페이스의 포트 80으로 전달
'쿠버네티스' 카테고리의 다른 글
Docker VS Containerd (0) | 2024.12.11 |
---|---|
컨테이너-컨테이너 오케스트레이션 시스템-쿠버네티스 (0) | 2024.01.10 |
kubectl _get_comp_words_by_ref: command not found 자동완성 에러 (0) | 2024.01.10 |
마이크로서비스와 컨테이너-1 (0) | 2023.08.05 |
컨테이너 인프라 환경을 지원하는 도구 (0) | 2023.07.22 |