*유데미에서 진행하는 Kubernetes for the Absolute Beginners - Hands-on 강의를 바탕으로 제작되었습니다.
1. 쿠버네티스 로드밸런서(부하 분산기)
쿠버네티스의 어플리케이션 생성 순서는 다음과 같습니다
1. Deployment 생성
2. 서비스 생성(ClusterIP)
3. 서비스 생성(LoadBalancer)
예시로 투표앱 생성 과정을 보겠습니다.
위의 사진에서 프론트엔드 부분인 voting-app과 result-app 부분만 따로 분리해서 보겠습니다.
위의 사진 처럼 노드마다 파드들이 분리되어 있습니다. voting-app의 경우 2개의 노드에 파드가 1개, 2개 씩 있고, 노드포트(30035)가 포트에서 트래픽을 수신해 각각의 타겟포트로 트래픽을 라우팅하는걸 돕습니다.
30035는 voting-app의 NodePort이고, 31061은 Result-app의 NodePort입니다.
사용자는 노드의ip와 노드포트를 다음과 같이 입력하여 파드에 접속할 수 있습니다.
1. http://192.168.56.70:30035 ✓
2. http://192.168.56.71:30035 ✓
3. http://192.168.56.72:30035 ✘
4. http://192.168.56.73:30035 ✘
5. http://192.168.56.70:31061 ✘
6. http://192.168.56.71:31061 ✘
7. http://192.168.56.72:31061 ✓
8. http://192.168.56.73:31061 ✓
1, 2, 7, 8번만 제대로 접속이 되긴 하지만 이런 방식으로 접근합니다.
하지만 사용자가 원하는 것은 이런 방식이 아닙니다. 어플리케이션을 이용하고 싶은 사용자들이 노드ip와 노드포트를 기억해서 접속하진 않습니다.
로드 밸런서(부하 분산기)용도로 새로운 vm을 생성하고 그 위에 Proxy나 nginx같은 프로그램을 설치하고 구성하는 방법이 있지만 잘 사용되지는 않는 방법이고, aws, gcp, azure 같은 클라우드 플랫폼에서 제공하는 네이티브 로드 밸런서를 사용하는 것이 효율적인 방법입니다.
사용자들은 좀 더 간편한 방식("http://example-vote.com"
, http://example-result.com
)으로 어플리케이션에 접근하길 원합니다
2. 네이티브 로드밸런서
쿠버네티스는 특정 클라우드 제공자의 네이티브 부하 분산 장치와 통합해 어플리케이션 구축을 도와줍니다.
우리가 할 일은 노드포트 대신 부하 분산기를 위한 프론트엔드 서비스를 위해 서비스 유형을 설정해야 합니다
# service-LoadBalancer_definition.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
nodePort: 30008
쿠버네티스에서 서비스를 LoadBalancer로 설정하면 클라우드 제공업체(ex. aws)의 로드 밸런서가 서비스에 대한 외부 액세스를 관리하고 이것은 클러스터 외부에서 서비스에 접근할 수 있는 역할을 수행합니다.
일반적인 클라우드 환경에서 로드 밸런서가 클러스터 외부의 인터넷 트래픽을 받아드리고, 이를 적절한 서비스로 라우팅합니다.
LoadBalancer 유형의 쿠버네티스 서비스를 생성하면 쿠버네티스는 해당 클라우드 제공업체와 통신하여 로드 밸런서를 자동으로 생성하고 구성합니다.
이를 통해 외부에서 서비스에 액세스할 때 클러스터의 각 노드ip와 노드포트를 직접 지정할 필요없이, 단일 주소ip(클라우드 제공업체가 제공하는 로드 밸런서의 엔드포인트) 또는 도메인명을 사용하여 서비스에 접근할 수 있습니다.
클라우드 제공업체의 로드 밸런서는 해당 요청을 적절한 클러스터 내부의 파드로 라우팅하여 서비스를 제공합니다.
'[Cloud] > [Kubernetes]' 카테고리의 다른 글
[Kubernetes] HPA, VPC, CA (0) | 2024.09.03 |
---|---|
[Kubernetes] 쿠버네티스 마이크로서비스 어플리케이션(Microservice application) (0) | 2024.05.30 |
[Kubernetes] 쿠버네티스 서비스 - 2. 클러스터ip(ClusterIP) (0) | 2024.05.28 |
[Kubernetes] 쿠버네티스 서비스 - 1. 노드포트(NodePort) (0) | 2024.05.27 |
[Kubenetes] 쿠버네티스 업데이트 & 롤백 2 (0) | 2024.05.25 |