2020. 4. 8. 23:45ㆍ[정리] 기능별 개념 정리/Kubernetes
도커 컨테이너의 네트워킹
일반적인 도커 컨테이너 네트워크는 브리지 타입 네트워크 구조로 되어있다.
브리지 타입 네트워크 구조는 아래와같다.
- 호스트는 호스트 네트워크 네임스페이스를 가진다. 그리고 여기에 docker0 라는 브리지를 만든다.
- 컨테이너는 컨테이너 네트워크 네임스페이스를 가진다. 그리고 여기에 컨테이너를 만든다.
- 컨테이너 네트워크 네임스페이스에는 가상 이더넷(베스)을 가지고 있다.
- 도커는 docker0에 베스들을 연결하여 통신한다.
네트워크 네임스페이스는 서로 연결되기 전까지 독립적으로 동작한다.
네트워크 네임스페이스는 별도의 ARP, 라우팅, iptable 을 가진다.
도커 컨테이너의 네트워크 타입
- 브리지 : 호스트에 브리지를 만들고 컨테이너와 호스트는 가상 이더넷(베스)을 이용해 연결한다.
- 오버레이 : 호스트들 각각에 있는 컨테이너 네트워크를 오버레이 네트워크로 연결한다. (도커 스웜이 기본으로 사용하는 타입이다.)
- 맥브이렌 : 하나의 이더넷 장치에 여러개의 가상 MAC 주소를 할당하는 기술
- 호스트 : 컨테이너 네트워크 네임스페이스를 사용하지 않고 호스트 네트워크 네임스페이스를 직접 사용한다.
- 링크 : 컨테이너 네트워크 네임스페이스를 사용하지 않고 이미 생성되어 있는 네트워크 네임스페이스를 사용한다.
보그의 네트워킹
쿠버네티스의 전신인 보그에서는 파드마다 IP 를 할당하지 않고 노드의 포트를 다르게 해서 파드로 접근했다.
하지만 파드의 포트를 관리하는 것은 너무 힘든일이고 쿠버네티스의 개발에와서는 파드에 IP 를 할당하게 됬다.
쿠버네티스 파드의 네트워크
쿠버네티스는 도커와 달리 기본 도커 네트워크 타입이 링크 타입이다.
쿠버네티스는 도커와 달리 파드 단위로 컨테이너를 관리한다.
파드 하나에 속한 컨테이너는 veth0 를 공유한다.
파드 하나에 속한 컨테이너는 같은 IP를 가진다. (Pause 컨테이너 네트워크 네임스페이스의 IP)
파드 안 컨테이너의 Network 모드를 보면 bridge, host 가 아닌 container 다.
즉 컨테이너가 pause 컨테이너의 네트워크를 공유한다는 의다.
파드 안 컨테이너 사이의 구분은 포트로 한다.
다른 노드에 있는 파드와 통신
파드는 각각 고유한 IP 를 갖게 되므로 노드들 사이에 연관 관계가 없다면 호스트는 다른데 IP는 같은 파드가 생기게 된다.
쿠버네티스 서비스 네트워킹
쿠버네티스 컴포넌트 간의 통신은 단순히 파드들만의 통신이 아니다. 서비스와이 통신이 대부분이다.
쿠버네티스의 CIDR 은 크게 두개로 나뉘어 지정된다. (CIDR : Classless Inter Domain Routing, 클래스가 없는 도메인 사이의 라우팅 기법)
- 파드용 CIDR (—cluster-cidr 옵션)
- 서비스용 CIDR (—service-cluster-ip-range 옵션)
옵션이 다른만큼 서로 다른 IP 대역을 사용한다.
kube-proxy
서비스용 IP 연결은 NAT 테이블을 이용해 파드의 IP 로 연결해주는데 이 기능을 kube-proxy 가 해준다.
NAT 영역 설정도 kube-proxy 가한다.
kube-proxy 는 kube-apiserver 를 지켜보다 파드의 변경사항이 발생하면 서비스에 해당하는 NAT 규칙을 업데이트한다.
이러한 연유로 모든 클러스터 노드는 kube-proxy 가 설치되어있다.
쿠버네티스 네트워크 플러그인
플라넬 : 쿠버네티스 위에 레이어 3 네트워크를 구성하는 가장 쉬운 방법, 파드 IP 를 관리하는데 별동의 데이터베이스를 필요로하지 않는다.
칼리코 : 쿠버네티스 클러스터 네트워크를 직접 구성할 때 가장 기본으로 선택하는 플러그인, 사실상 최선의 선택
실리엄 : 최근 각광받는 플러그인. 커널 수준에서 네트워크 경로를 조정하므로 (다 하위 레이어인 네트워크 카드까지 가지도 않는다.) 같은 노드 안의 컨테이너라면 통신 성능이 좋아진다.
'[정리] 기능별 개념 정리 > Kubernetes' 카테고리의 다른 글
쿠버네티스 입문 - 11 - 로깅과 모니터링 (0) | 2020.04.08 |
---|---|
쿠버네티스 입문 - 10 - 쿠버네티스 DNS (0) | 2020.04.08 |
쿠버네티스 입문 - 08 - 볼륨 (0) | 2020.04.08 |
쿠버네티스 입문 - 07 - 파드 스케줄링 (0) | 2020.04.05 |
쿠버네티스 입문 - 06 - 컨피그맵, 시크릿 (0) | 2020.04.04 |