DevOps/Kubernetes

쿠버네티스 클러스터와 네트워크

우드의개발개발 2024. 10. 29. 20:01

쿠버네티스 네트워크가 구성되는 과정 - 브릿지 네트워크 인터페이스로

CNI(Container Network Inteface) 없이 쿠버네티스 클러스터의 네트워크를 설정하기 위해선 어떻게 해야할까? 우선 노드 별로 브릿지 유형의 v-net-0 이름으로 네트워크 인터페이스를 생성한다. 노드 별 브릿지 네트워크를 사용하면 여러 네트워크 인터페이스를 묶어 같은 네트워크 내에서 데이터 패킷을 전달할 수 있도록 해준다.

ip link add v-net-0 type bridge

 

 

인터페이스를 생성한 후 네트워크 인터페이스를 활성화하기 위한 과정이 필요하다. 활성화 해야지 패킷을 송수신 할 수 있는 상태가 된다.

 

ip link set dev v-net-0 up

 

 

네트워크 인터페이스를 활성화 한 후 노드별로 서브넷 마스크를 할당한다. 위 그림을 통해 각 노드에 서로 다른 서브넷 마스크가 할당된 것을 볼 수 있다.

ip addr add {서브넷 주소} dev v-net-0


이후 서로 다른 노드에 있는 파드간 소통하기 위해 파드 간 트래픽을 라우팅 하기 위한 노드 간 경로 설정이 필요하다. 노드1을 기준으로 아래 두 명령어를 통해 노드2의 10.244.2.2의 private ip로 패킷을 보낼 경우 노드2 아이피 주소인 192.168.1.12 경유하여 패킷을 보내라는 추가적인 명령어가 필요하다. 노드2와 노드3에도 필요한 명령어를 적용해야 한다.

ip route add 10.244.2.2 via 192.168.1.12
ip route add 10.244.2.2 via 192.168.1.12

 

다른 IP 주소 대역을 같은 브릿지 인터페이스에 추가하여 여러 네트워크 대역을 사용할 수 있도록 구성한다. 이를 통해 쿠버네티스 클러스터의 노드들이 같은 브릿지 네트워크를 통해 각기 다른 서브넷에 속하더라도 v-net-0을 통해 서로 통신할 수 있게 되는 것이다. 하지만 이렇게 매번 쿠버네티스 클러스터의 네트워크를 수동으로 구성할 수 없기 때문에 등장하게 된 것이 CNI이다.

 

CNI(Container Network Interface)

CNI 플러그인은 각 노드 별 kubelet.service 파일로 설정할 수 있습니다. 

 

kubelet과 관련된 프로세스를 살펴보면 cni와 관련한 옵션이 있는 것을 살펴 볼 수 있습니다. 그 중 /opt/cni/bin 경로에는 지원하는 cni 플러그인들이 있다. /etc/cni/net.d 디렉터리에는 cni 설정 관련 파일이 들어있어 어떤 플러그인을 사용할지 구성되어 있습니다.

CNI를 사용하게 되면 노드 별로 CNI를 구동시키기 위한 agent 인스턴스가 구성된다. 만약 다른 노드에 있는 컨테이너로 패킷을 보내야 할 경우 노드 별 agent가 해당 패킷의 캡슐화를 진행한다. 해당 과정을 통해 새로운 소스와 목적지가 정해지게 된다. 목적지로 패킷이 보내지게 되면 해당 노드에 있는 agent가 이를 디캡슐화 해서 노드에 있는 특정 파드의 특정 컨테이너로 패킷을 보낸다.

대게 agent는 데몬셋 파드로 구성된다. 위 그림에서 kube-system 네임스페이스에 노드 별 파드 형태로 구성된 것을 볼 수 있다.

 

서비스와 파드 도메인

 

서비스 또는 파드를 생성 시 도메인이 생성된다. 도메인 형식은 다음과 같다. 리소스이름.네임스페이스.타입.기본도메인

앞선 네 부분이 모두 결합했을 때 이를 FQDN(Fully Qualified Domain Name)이라고 한다. curl 명령어를 통해 이름으로 접근할 수 있다. 만약 같은 네임스페이스에 서비스 이름과 파드 이름이 같다면 쿠버네티스의 DNS lookup 규칙에 따라 서비스 이름을 우선적으로 조회한다.

curl 명령어를 통해 서비스에 요청을 보내는 예시
curl 명령어를 통해 파드에 요청을 보내는 예시

 

'DevOps > Kubernetes' 카테고리의 다른 글

서비스 메시  (2) 2024.10.30
인그레스 컨트롤러  (0) 2024.10.30
Kubernetes Image  (0) 2024.10.29
Service Account 관련 주요 사항  (0) 2024.10.29
Kubernetes Authorization / 쿠버네티스가 인가를 처리하는 방법  (0) 2024.10.28