Manger Node
Kubernets Manager Node
Kubernets Manager Node
-
Manager Node는 노드는 클러스터에 대한 요청을 수신하고 분배하는 역할을 하는 로드 밸런서 역할을 하는 서버를 의미합니다.
-
일반적으로 NGINX, HAProxy와 같은 프록시 서버를 사용하며, 여기서는 Nginx로 구성합니다.
-
해당 노드의 주 역할은 아래와 같습니다.
역할 | 설명 | 예시 |
---|---|---|
요청 라우팅 | 클라이언트의 API 요청을 적절한 서비스나 백엔드 노드로 전달합니다. | NGINX가 클라이언트 요청을 받아 특정 서비스로 라우팅합니다. 예를 들어, /api/users 요청은 사용자 서비스로 전달됩니다. |
로드 밸런싱 | 요청을 여러 백엔드 노드에 균등하게 분배하여 성능을 최적화합니다. | HAProxy가 두 개의 인스턴스(예: app-1 , app-2 )로 요청을 분배합니다. 각 인스턴스가 50%의 트래픽을 처리합니다. |
SSL 종료 | HTTPS 요청을 처리하고 SSL 인증서를 관리하여 보안을 강화합니다. | NGINX가 SSL 인증서를 사용하여 클라이언트와의 연결을 암호화합니다. 내부 통신은 HTTP로 유지합니다. |
캐싱 | 정적 콘텐츠를 캐싱하여 반복적인 요청에 대한 응답 속도를 향상시킵니다. | NGINX가 자주 요청되는 이미지 파일을 캐싱하여, 사용자가 이미지를 요청할 때마다 백엔드 서버에 요청하지 않습니다. |
트래픽 관리 | 요청의 수를 제한하거나 특정 요청을 차단하여 트래픽을 관리합니다. | HAProxy가 특정 IP에서의 요청 수를 제한하여 DDoS 공격을 방어합니다. 예를 들어, 100초당 10회 요청으로 제한할 수 있습니다. |
상태 검사 | 백엔드 서비스의 상태를 주기적으로 확인하여, 실패한 서비스에 요청을 보내지 않도록 합니다. | HAProxy가 app-1 인스턴스의 상태를 확인하고, 문제가 발생한 경우 해당 인스턴스에 요청을 보내지 않도록 합니다. |
- 간단하게 기존에 사용하던 Docker engine을 사용하지 않고 ContainerD를 사용 하게된 이유를 정리하자면
-
쿠버네티스는 여러 컨테이너 런타임과 통신할 수 있도록 하는 CRI라는 표준 인터페이스를 설계함.
-
Docker engine은 CRI 인터페이스가 생기기전 존재한 기술로 CRI 인터페이스와 맞지 않았음.
-
이를 해결하기 위해 dockershim이라는 어댑터 컴포넌트를 개발하였음.
-
이 쉼의 존재는 kubelet 자체에 많은 불필요한 복잡성을 도입했고, 일부 통합은 이 쉼 때문에 Docker에 대해 일관성 없게 구현되었으며, 이로 인해 유지 관리 부담이 증가하게 됨.
-

- 이처럼 벤더 특정 코드(특정 제품인 Docker에 종속적인 코드)를 유지 관리하는 것은 쿠버네티스의 오픈 소스 철학에 부합하지 않았고, 2022년 4월 v1.24에서 완전한 제거를 발표하였음.
Kubernets Manager Node Install
# nginx를 설치합니다.
$ apt -y install nginx libnginx-mod-stream
# nginx에 프록시를 세팅합니다.
$ vi /etc/nginx/nginx.conf
stream {
upstream k8s-api {
server 7.7.7.100:6443; # contolplan IP
}
server {
listen 6443;
proxy_pass k8s-api;
}
}
# Nginx의 default 웹을 비활성화합니다.
$ unlink /etc/nginx/sites-enabled/default
$ systemctl restart nginx
# kubectl 레포지터리를 등록하고 설치합니다.
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
$ apt update
$ apt -y install kubectl
# (option) kubectl alias k
$ apt -y install bash-completion
$ source /usr/share/bash-completion/bash_completion
$ kubectl completion bash | tee /etc/bash_completion.d/kubectl > /dev/null
$ echo 'alias k=kubectl' >>~/.bashrc
$ echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
$ exec bash