쿠버네티스 서비스에는 NodePort, ClusterIP, Load Balancer가 있다.
NodePort에 대해 알고 싶다면 아래의 글을 참고하세요!
Kubernetes Services 1 - NodePort
https://wooinge.tistory.com/79
ClusterIP
Pod는 기본적으로 IP 주소를 가지고 있다. 하지만 이 IP 주소는 고정되어 있는 것이 아니다. → IP에만 의존할 수 없는 노릇임
그리고 사용자 트래픽에 따라 pod는 언제든지 종료될 수 있고, 새로운 pod가 생성될 수도 있다. 이런 과정에서 IP 주소는 계속 변경될 것이다.
또한, 보통의 풀스택 애플리케이션 환경에서는 여러 개의 pod를 사용하여 고가용성 애플리케이션을 제공하기 때문에 서로 어떤 pod를 연결해야 할지 결정하기 매우 복잡한 상황이다.
여러 개의 pod가 존재할 때 쿠버네티스 서비스를 이용하여 각 pod들을 그룹화하고, 그룹 내의 pod에 접근할 수 있는 단일 인터페이스를 제공한다.
각 서비스는 클러스터 내에서 IP와 이름을 할당받게 되며, 다른 Pod는 해당 IP 또는 이름을 사용하여 서비스에 접근할 수 있는데, 이러한 유형의 서비스를 ClusterIP라고 한다.
NodePort와 다르게 ClusterIP는 외부로 노출할 수 없고, 클러스터 내에서만 생성할 수 있다.
유저가 직접적으로 프론트엔드 ClusterIP 서비스에 접근할 수 없다는 점을 주의해야 한다.
ClusterIP yaml 파일 작성 방법은 NodePort와 거의 유사하다.
type, ports(서비스 포트, pod 포트), selector를 작성해주면 된다.
Load Balancer
여러 노드가 있는 애플리케이션이 있다고 생각해보자.
각 노드마다 IP를 가지고 있으며, 규모가 클 수록 노드의 개수도 많아진다.
사용자가 애플리케이션에 접근하기 위해서는 노드의 IP를 사용할 수 있을텐데, 어떤 노드의 IP를 사용해야 할까?
만약에 여러 노드를 사용할 수 있다면 사용자에게 여러 노드의 IP와 포트를 알려주면 될까?? 이건 너무 번거롭고 효율적이지도 않다.
사용자에게 단일 URL로 접근할 수 있도록 중간 다리를 배치하고, 이곳에 사용자 요청이 들어오면 여러 노드에 분배할 수 있는 기능을 하는 서비스가 있으면 좋을 것 같다.
이렇게 외부에서 들어오는 요청을 각 노드로 전달하여 부하를 분산하는 역할을 하는 쿠버네티스 서비스가 로드 밸런서이다.
예를 들어 사용자가 exam.com에 접근하게 되면 DNS 설정을 통해 이 요청을 로드 밸런서로 전달하고, 로드 밸런서는 다시 요청을 처리할 수 있는 노드로 요청을 전달한다.(라우팅) → 사용자는 늘 동일한 URL로 애플리케이션에 접근할 수 있게 된다.
로드밸런서는 클라우드 플랫폼을 사용하여 적용할 수 있다.
쿠버네티스는 클라우드 플랫폼(AWS, Google Cloud, Azure 등)의 기본 로드 밸런서 기능을 활용하여 자동으로 로드 밸런서를 설정할 수 있다. → 노드에 요청을 전달하도록 자동으로 설정됨
로드 밸런서를 적용하기 위해서는 yaml 파일을 작성해줘야 한다.
작성 방법은 ClusterIP와 동일하며, type을 LoadBalancer로 작성해주면 된다.
작성된 파일을 이용하여 로드 밸런서를 생성하고, 외부 IP를 할당하여 사용자 요청을 쿠버네티스 클러스터의 노드로 전달한다.
※ 로컬 환경의 경우, 수동으로 로드 밸런서를 구성하고 DNS를 설정해야 한다!!!
# loadbalancer-definition.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: myapp
'쿠버네티스' 카테고리의 다른 글
쿠버네티스 - GKE 클러스터 생성 및 배포 실습 (0) | 2024.11.20 |
---|---|
쿠버네티스 마이크로서비스 애플리케이션 이론 (0) | 2024.11.18 |
Kubernetes Services 1 - NodePort (0) | 2024.11.14 |
쿠버네티스의 네트워킹 기본 개념 (0) | 2024.11.14 |
YAML 파일을 쿠버네티스에 적용하기 - Deployments (0) | 2024.11.13 |