안녕하세요, 베스핀글로벌 DevOps실 조정용 님이 작성해 주신 ‘간단하게 신뢰성 높은 ingress 이중화 구성하기’에 대해 알아보겠습니다.
궁금한 부분은 댓글을 남겨주시면 감사하겠습니다:)
들어가며
Kubernetes 환경에서 ingress는 인터넷으로부터 서비스로 인바운드를 허용하고, Layer-7 로드밸런서 역할을 하는 일련의 규칙들의 집합입니다.
또한 트래픽에 대한 처리가 집중되는 지점이므로 높은 신뢰성을 필요로 합니다.
이에 Ingress 이중화 구성을 통하여 성능과 안정성을 확보하기 위한 방안과 절차를 설명합니다.
구성도
위 그림에서럼 Ingress를 위한 전용 노드에 배포를 하고 로드밸런서를 통해 트래픽을 배분하여 각 애플리케이션 POD에 전달하도록 하고 있습니다.
특히 Ingress 배포 노드를 Master 노드가 아닌 별도의 Worker 노드로 구성하여 성능 경합을 피하고 Master 노드의 여러 시스템에 대한 영향도를
최소화할 필요가 있습니다.
구성 절차
다음에 순서에 따라 Ingress 이중화를 구성합니다.
- Ingress 컨트롤러 설치 및 배포 (Nginx, Kong, HAPorxy, …)
- Ingress 복제본 구성
# nginx controller 예시
Kubectl –n kube-system scale -–replicas=3 deployment/nginx-ingress-controller
3. Ingress 컨트롤러 배치를 위한 전용 노드 구성
A. Master 노드가 아닌 Worker 노드 권장
4. 전용 노드로 Ingress 컨트롤러를 배치하기 위한 태그 (lable) 설정 (가용할 노드 갯수만큼 적용)
kubectl label nodes <노드명> node-role.kubernetes.io/ingress="true"
5. 전용 노드로 Ingress 배치를 위한 설정 업데이트
kubectl -n kube-system patch deployment nginx-ingress-controller -
p '{"spec": {"template": {"spec": {"nodeSelector": {"node-
role.kubernetes.io/ingress": "true"}}}}}'
감사합니다.
Written by 조 정용 / Jeongyong Jo
Software Engineer