지난 포스팅까지 kubeadm, kubectl, kubelet 구성까지 완료하였다.
이번 포스팅에서는 넷필터 브릿지 설정을 해보겠다.
sudo -i # sudo 권한으로 실행
modprobe br_netfilter # 넷필터 브릿지 모듈 플러그인
echo 1 > /proc/sys/net/ipv4/ip_forward # IP포워딩 활성화
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables # iptables 규칙 활성화
exit
sudo 권한으로 br_netfilter 브릿지 모듈을 플러그인하고 IP포워딩을 활성화하고 iptables 규칙을 활성화하면 넷필터 브릿지 설정이 완료된다.
NetFilter( 넷필터 )
그럼 쿠버네티스에서 넷필터 브릿지 설정이 왜 필요할까?
보통 단말장치의 주목적은 Process(처리)이다.
Server에서 요청패킷이 들어오면 단밀장치는 처리하고 응답패킷을 Server로 전송한다. 한마디로 자신과 관련된 패킷만 관심있다는 의미이다. 그러나 Micro Service Architecture(MSA)에서는 상황이 다르다.
MSA를 구현하는 쿠버네티스 클러스터 구성을 보면, 단말장치인 노드 안에는 파드가 존재하고 파드 안에는 컨테이너가 존재한다. 시스템은 작은 단위로 나누어져 여러 노드의 컨테이너에 분산되어 있다. 그러므로 하나의 노드에 들어온 패킷은 해당 노드에게만 관련되어 있지 않다. 다른 노드 안의 컨테이너와도 관련이 있으므로, 파드와 파드 사이의 패킷이 전달이 가능해야 한다.
파드와 파드 사이에 패킷 전달이 가능하려면 서로 다른 네트워크에 있는 노드 간 통신이 가능해져야 한다. 이를 위해, 넷필터 모듈을 플러그인 해주어야 한다. 넷필터 모듈은 서로 다른 네트워크에 있는 장치 간 브릿지를 만드는 커널 모듈이다. 평소에는 비활성화 되어 있다. 일반적인 노트북이나 PC는 Process(처리)가 목적이다. 노트북으로 들어온 패킷을 다른 네트워크로 포워딩해버리면 보안에 문제가 된다. 시스템이 여러 단말장치에 분산되어 있는 구조에서는 단말장치 간 패킷 공유가 필요하므로 넷필터 모듈을 활성화 해야한다.
쿠버네티스 서비스 (Service)
패킷을 다른 네트워크로 포워딩하려면 네트워크 정보가 필요하다. 각 노드들은 다른 노드가 자신의 네트워크로 포워딩 할 수 있도록 네트워크 정보를 외부로 노출해야 한다. 이와 같이, 네트워크 정보를 외부로 노출하여 외부에서 접근 가능하도록 만드는 작업을 두고 서비스(Service)라 부른다.
IP포워딩 작업을 위한 서비스는 클러스터 내부에서만 네트워크 정보를 노출한다. 클러스터 내부에 네트워크를 노출하는 경우에는 서비스 타입을 ClusterIP로 하여 서비스를 생성한다. 클러스터 외부에 노출하는 서비스인 경우 타입을 Load Balancer로 한다. 이 경우는 클러스터 내부의 노드간 통신을 위한 네트워크 노출이므로 ClusterIP를 타입으로 하여 서비스를 생성한다.
서비스 생성 방법은 다음에 다루어 보겠다.
서비스가 생성되면 서비스와 관련된 컨테이너들의 네트워크 정보가 저장된다. 그리고 이 정보는 각 노드의 Iptables의 규칙으로 적용된다. 넷필터 모듈은 iptables 규칙을 참고하여 서비스와 관련 있는 컨테이너에서 전송된 패킷만 필터링하여 받아들인다. 이로써 여러 노드에 분산되어 있는 시스템은 하나의 클러스터처럼 동작이 가능해진다.
참고자료
'DevOps > K8S' 카테고리의 다른 글
[Kubernetes] 인그레스(Ingress)란 무엇인가? (0) | 2023.10.11 |
---|---|
[Kubernetes] 우분투 환경에서 클러스터 구성하기(4) - 마스터노드, 워커노드 구성하기 (0) | 2023.09.26 |
[Kubernetes] 우분투 환경에서 클러스터 구성하기(2) - kubeadm, kubelet, kubectl (0) | 2023.09.22 |
[Kubernetes] 우분투 환경에서 클러스터 구성하기(1) - 컨테이너D 설치하기 (0) | 2023.09.22 |
[Kubernetes] Google Cloud에서 VM인스턴스 만들기 (0) | 2023.09.21 |