199-209
네트워크란? 호스트와 호스트를 스위치를 통해연결하는 통로
ip link
ip addr
192.168.1.10 -> 192.168.2.10으로 통신하는 법 -> 라우터 -> 두 네트워크를 연결
192.168.1.1을 가짐
# route
# ip route add 192.168.2.0/24 via 192.168.1.1 -> 모든 시스템에서 설정 해야함
인터넷에 접속을 해야한다면? -> 라우터를 인터넷에 연결 -> 기본 게이트웨이로 사용
ip route add default(0.0.0.0) via 192.168.2.1
라우터 두 개인 경우 (인터넷, 사설)도 있음
리눅스 호스트를 라우터로 설정하는 법
192.168.1.5 <-192.168.1.0 -> (192.168.1.6, 192.168.2.6) <- 192.168.2.0 -> 192.168.2.5
ping 192.168.2.5
--> Network is unreachable
ip route add 192.168.2.0/24 via 192.168.1.6
ip route add 192.168.1.0/24 via 192.168.2.6
패킷은 다음 인터페이스로 전달 되지 않음
cat /proc/sys/net/ipv4/ip_forward
에 의해 통제 됨
디폴트는 0 -> 통신 불가 -> 1로 변경해야함 영구설정을 위해 /etc/sysctl.conf
수정
IP대신 이름으로 기억하기 위해 -> 이름은 서버에서 알 수가 없음 -> /etc/hosts에 추가
host명은 신경쓰지 않음
같은 이름이 두 IP를 가지는 경우 hosts파일 참조
host항목을 중앙에서 관리하기 위해 서버로 옮긴것이 DNS 서버 -> /etc/resolv.conf에 등록하여 서버를 참조하도록 함
/etc/hosts 먼저 참조 -> DNS 참조
/etc/nsswitch.conf에서 순서 변경 가능
files dns 순서로 되어 있음
www.naver.com 과 같은 형태
. (Root) -> .com -> google -> www, maps 서브 도메인
/etc/resolv.conf에 search 도메인 등록해두면 서브도메인으로만으로도 질의 가능
A : Ipv4
AAAA : Ipv6
CNAME : food.web-server -> eat.web-server 도메인을 다른 도메인으로
nslookup www.google.com
dns 서버에 질의하여 도메인에 대한 주소정보를 얻음
https://github.com/kubernetes/dns/blob/master/docs/specification.md
https://coredns.io/plugins/kubernetes/
네트워크 격리 구현을 위해 도커 컨테이너에서 사용
컨테이너 만들때는 격리를 해야함 -> 네임스페이스 사용해서 -> 컨테이너 고유의 인터페이스가 있음
ip netns add red
ip netns exec red ip link
ip -n red link
ARP table도 같은 형태, 라우팅테이블도 같은 형태
네임스페이스는 네트워크 연결이 없고 자체 인터페이스가 없으며 기본 호스트 네트워크를 볼 수 없음
ip link add veth-red type veth peer name veth-blue
ip link set veth-red netns red
ip link set veth-blue netns blue
ip -n red addr add 192.168.21.1 dev veth-red
ip -n blue addr add 192.168.21.1 dev veth-blue
ip -n red link set veth-red up
ip -n blue link set veth-blue up
ip netns exec red ping .. arp
네트워크 만드려면 가상 스위치 생성이 필요함
LINUX BRIDGE, open vSwitch
1.도커 컨테이너가 네트워크에 연결 되어 있지 않는 상태
docker run --network none nginx
2.호스트의 80으로 통신 가능한 형태
docker run --network host nginx
docker run nginx
도커 호스트 설치되면 브릿지라는 사설 네트워크 생성
docker network ls
의 bridge와 docker0는 같음
ip link 시 docker0라는 인터페이스 생성
브릿지와 컨테이너 인터페이스가 각각 존재함
포트 포워팅
docker run -p 8080:80 nginx
어떻게? -? iptables에 rule을 추가하여
iptalbes
-t nat
-A DOCLER
-k DMAT
--dport 8080
--to-destination 1
iptables -nvL -t nat
에서 도커가 만든 rule확인 가능
container network interface
컨테이너 환경에서의 네트워크를 하나의 표준으로 코드화
CNI는 플러그인이 어떻게 개발되어야 하는지, 컨테이너 런타임이 어떻게 플러그인을 호출해야 하는지를 정의
어떠한 플러그인에서도 동작 해야함
도커는 CNI를 만들지 않음 -> CNI 지정불가 docker run시
수동으로 브리지를 생성해야함 -> 쿠버네티스도 같은 방법
시험에서 weabe metwprl addon 생성하라고 하면 아래 링크 참조
https://v1-22.docs.kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/#steps-for-the-first-control-plane-node
쿠버네티스 클러스터 노드 별로 인터베이스가 있어야함, 맥 어드레스도 -> VM 복제시 주의해아함
6443 포트 개방 해야함 apiserver 포트 kubelet은 10250 스케쥴러 10259 컨트롤러 매니저 10257
워커노드 30000-32767
etcd 2379 -> 다중 마스터 2380 오픈 클라이언트끼리 통신을 위해
--> 열려야하는 포트는 쿠버네티스 공식문서에서 확인 가능
https://kubernetes.io/docs/reference/networking/ports-and-protocols/