Search
Duplicate
📒

[Kubernetes Infra] 03-1. CNI, 네트워킹 정리

상태
완료
수업
Kubernetes Infra
주제
연관 노트
3 more properties
참고

CNI(Container Networking Interface)

NOTE
CNI는 CNCF프로젝트 중 하나인 CNI(Container Network Interface)는 컨테이너 간 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준이다!
여러 플러그인이 준비되어 있고, 써드파티의 플러그인도 사용가능!
1.
네트워크 네임스페이스 생성
2.
브리지 네트워크 인터페이스 생성
3.
vEth 쌍 생성 (파이프, 가상 케이블)
4.
vEth를 이용해서 네임스페이스 - 브리지 연결
5.
IP 주소를 등록하고 인터페이스 활성화
할당된 IP 주소를 가진 인터페이스들을 활성화하여 네트워크 통신이 가능하도록 합니다.
6.
NAT 활성화(아이피 마스커레이드)
네임스페이스 내부에서 사용하는 사설 IP 주소가 외부 네트워크와 통신할 때 사용하는 공인 IP 주소로 변환될 수 있도록 NAT(Network Address Translation)을 설정
위와 같은 절차로 컨테이너들은 연결되며, 도커 뿐만 아니라 rkt, Mesos등의 다른 솔루션도 사용하는 방식이다.
모두가 사용하는 방식인 만큼, 일종의 표준을 만들어 사용하는 것이 편리하므로, 이과정을 하나의 프로그램으로 만든다!

쿠버네티스와 CNI

NOTE
/etc/cni/net.d # 설치된 CNI 확인 /opt/cni/bin # 디렉토리에서 지원하는 플러그인 확인
Bash
복사
CNI가 지원하는 명령어
어떤 CNI인지 등록

쿠버네티스 네트워킹

NOTE
쿠버네티스에서 파드들 끼리 직접적으로 연결되도록 설정하는 일은 거의하지 않는다. ⇒ 대부분 서비스를 사용!
각 컴포넌트의 포트

Kubelet(파드), Kube-proxy(서비스)

NOTE
쿠버네티스의 모든 노드에는 kubelet, kube-proxy이 하나씩 존재한다!
kubelet : kube-apiserver와 통신하며 파드를 노드에 생성한다!
kube-proxy : 쿠버네티스에서 서비스를 만들었을 때 Cluster IP와 Nodeport로 접근할 수 있게 하는 실제 조작을 수행한다.
# 클러스터 내 노드 IP범위 kubectl get nodes -o wide # 내부 IP검색 ip add # 내부 IP를 가신 nic검색 # pod의 IP범위 kubectl get all -A # weave사용 확인 kubectl logs [weave pod] # ipalloc 찾기 # 서비스의 ip범위찾기 cat /etc/kubernetes/manifests/kube-apiserver.yaml # ip 범위 확인하기 kube-api-server --service-cluster-ip-range ipNet ps aux | grep kube-api-server
Bash
복사
서비스는 단순히 가장 객체인데 어떻게 접근이 가능한가?
각 노드의 kube-proxy는 IP:Port 정보가 들어오면, 사전에 정의되어 있는 서비스의 IP:Port 범위에 따라 클러스터 내 특정 노드로 전달한다.
IP:port 트래픽을 특정 노드의 파드로 전달하기 위해서는 iptables, userspace, IPVS가 있다.
Service를 생성했을 때 할당되는 Ip주소는 kube-api-server의 --service-cluster-ip-range 값에 따라 결정된다.
디폴트 범위는 10.96.0.0 ~ 10.111.255.255
cf. pod의 범위는 10.244.0.0 ~ 10.244.255.255
범위가 어떻게 설정되건, 절대 겹치지 않는다는 게 핵심.