DevOps/Kubernetes

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter15. 클러스터 네트워킹 구성

noahkim_ 2021. 7. 22. 02:27

15.1 파드 네트워킹

 

쿠버네티스는 파드에 IP를 할당함.

파드들은 IP를 이용해 서로 통신함.

 

  1. 도커 컨테이너의 네트워킹

도커 브리지 타입 네트워크는 호스트안에 docker() 라는 브리지를 추가해 컨테이너와 호스트 사이를 연결함.

  • docker()는 호스트의 네트워크 네임스페이스라 함. 호스트의 기본 네트워크는 여기서 만들어지고 관리함.
  • container1(veth0)과 container2(veth1)는 컨테이너 네트워크 네임스페이스라고 함.
    컨테이너를 생성할 때마다 만들어지고 컨테이너마다 별도의 네트워크를 사용할 수 있도록 함.

    veth는 한쪽 끝은 컨테이너, 다른 한쪽 끝은 호스트의 브리지(docker() )를 연결하여 호스트 네임스페이스와 컨테이너 네임스페이스
    사이를 통신함.

  • 도커 컨테이너 네트워킹에는 각각의 타입을 두어 사용함

    브리지 타입 : 호스트에 브리지를 만들고 컨테이너와 호스트는 베스를 이용해서 연결함.
    오버레이 타입 : 여러 대 호스트가 있을 때 각 호스트에 있는 컨테이너 네트워크를 오버레이 네트워크(VXLAN)으로 연결시킴
    맥브레이 타입 : 이더넷 장치 하나에서 여러 개 가상 MAC 주소를 할당함
    호스트 타입 : 컨테이너 네트워크 네임스페이스 대신 호스트의 네트워크 네임스페이스를 직접 사용함.
    링크 타입 : 컨테이너별로 네트워크 네임스페이스를 만드는 것이 아니라 이미 생성되어 있는 네트워크 네임스페이스에 컨테이너를 연결함.

    ‘docker network ls’ : 도커 네트워크 타입 확인

    2. 파드 네트워킹 이해하기

 

쿠버네티스는 파드 단위로 컨테이너를 관리함.
파드는 쿠버네티스에서 생성한 pause라는 컨테이너와 사용자가 생성한 컨테이너들의 그룹을 말함.

파드 하나에 속한 컨테이너들은 같은 IP를 가짐.

 

파드에 속한 컨테이너들은 veth0 하나를 공유함. 같은 파드에 속한 컨테이너들은 모두 IP 하나를 가짐.

Pause 컨테이너가 파드의 기반인 인프라 컨테이너이며 쿠버네티스가 생성하고 관리함.

 

파드의 veth0는 pause 컨테이너 네트워크 네임스페이스에 속한 장치.

같은 파드 안 컨테이너는 로컬 IP 주소로 서로 통신 가능.

 

같은 파드 안에 컨테이너는 할당된 IP가 같음.

안에 있는 컨테이너는 네트워크 네임스페이스만 공유하고 나머지 네임스페이스(프로세스, 파일시스템)은 공유하지 않음.

파드 안에서 컨테이너 사이의 구분은 포트를 이용함.

 

<클러스터에 여러 노드가 구성되었을 때>

 

각 호스트의 IP는 다르다 하지만 docker()의 IP는 두 호스트 모두 172.17.0.1로 같음

호스트 각각의 파드의 IP도 같음

 

만약 파드 IP가 같으면 호스트 01과 호스트 02중 어떤 호스트의 파드로 패킷이 갈 지 결정할 수 없음.

 

 

<CNI 기반의 멀티 노드 파드 네트워크>

 

CNI를 사용 시, 파드IP가 호스트별로 다름

이 때, 호스트 네트워크 네임스페이스의 각종 네트워크 기능들을 사용해야 함. 이를 CNI가 맡아서 함.

 

외부 라우터에 각 호스트 사이 라우팅을 정의해둠.

 

 

‘/opt/cni/bin’ : Cni 경로

‘ls /etc/cni/net.d/‘ : 사용하고있는 인터페이스

 

15.2 쿠버네티스 서비스 네트워킹

 

실제 서비스 사용시, 파드들의 통신은 서비스를 거쳐 사용함.

 

 

쿠버네티스는 파드용 CIDR과 서비스용 CIDR을 별도로 지정함.

 

파드용 CIDR는 마스터용 컴포넌트를 실행할 때 —cluster-cidr 옵션을 이용해 설정함

서비스용 CIDR는 마스터용 컴포넌트를 실행할 때 —service-cluster-cidr 옵션을 이용해 설정함

 

파드와 서비스는 서로 다른 IP 대역을 사용함.

 

NodePort 타입의 서비스를 생성하면 서비스 엔드포인트가 있는 NAT테이블이 생성됨.

Kube-proxy가 사용자가 지정한 서비스용 IP 중의 하나를 파드의 IP와 연결시켜줌.

 

호스트 까지는 라우팅을 통해 도달하고 그 다음은 NAT를 이용해 파드로 접근함.

만약 지정된 파드가 해당 호스트에 없다면 지정된 파드가 있는 호스트로 패킷을 전달하려고 DNAT(목적지 주소 바꿈)를 해당 호스트로 바꿈.

 

15.3 네트워크 플러그인

 

클러스터 구성시 네트워크도 직접 구성해야 함.

 

  1. Calico

가장 기본으로 선택하는 플러그인

여러가지 정책 선택가능.

BGP기반의 레이어 3 네트워크 구성 가능.

 

  • 네트워크 폴리시

‘Kubectl get network policy ‘