Zero To One

쿠버네티스 서비스타입 본문

컨테이너 오케스트레이션

쿠버네티스 서비스타입

Zero_To_One 2022. 4. 25. 11:51

1. 쿠버네티스가 파드에 직접 접근하지 않도록 하는 이유

  • Decoupling 
    • 모놀리식 아키텍쳐 : 어떤 하나의 서비스가 하나로 응축되어 있는 것
      • 단점 : 하나의 모듈을 바꾸기 위해서 전체를 배포하고 테스트해야하는 강한 의존성에 대한 문제가 발생함 
    • 서비스 간의 강한 의존성을 제거하기 위함
    • 디커플링을 제거하기 위한 방법 : 메세지Queue (어떤 하나의 서비스가 죽어도 메세지는 보관되기 때문에 다른 서비스에게 메세지가 전달 될 수 있게 한다) 
    • 파드를 만들어 놓고 연결하는 것은 직접연결하지 않고 서비스를 이용

2. 서비스

  • 파드를 네트워크 상에 노출시킬 수 있게 만든 리소스
  • 파드 접근 정책을 정의하는 추상적 개념
    • 셀렉터에 의해서 해당 파드를 찾아서 연결시켜줌

3. 서비스 디스커버리 (서비스를 찾는 것)

  • 마이크로서비스 사이에서 서로가 서로를 호출하는 방법 (IPC, Inter-Process Communication)
    • 동기적인 방법 : REST API
    • 비동기적인 방법 : 메세지 큐
  • 수평 확장 되는 서비스IP 호출방법 : 로드밸런서
  • 좋은 서비스 디스커버리?
    • 고가용성 (클러스터 환경을 지원해야됨, 여러대의 수평확장을 지원할 수 있어야 함)
    • 노드는 서비스의 상태를 알 수 있음
    • 부하 분산 (로드밸런서의 기능)
  • 대표적인 방법
    • 1. DNS 이름에 여러 IP를 할당 ( -> www.example.com - 10.0.1.11    )
                                                                                           - 10.0.1.27
                                                                                           - 10.0.1.133
      • ECS의 서비스 디스커버리

amazon-ecs-service-discovery

ECS의 서비스 디스커버리 ENABLE -> Rout53에서 DNS주소와 IP주소 매핑 -> 클라이언트가 Route53을 이용해 접근 -> IP에 따라서 ECS의 서비스 디스커버리 -> 적절한 Fargate로 들어감

 

  • 2. 로드밸런서 사용

1. Service Registry에서 대상그룹 등록

2. Service Request 요청이 LoadBalancer로 들어옴

3. Load Balancer에서 Service Registry에게 Query를 함

4. Healthy한게 있다면 특정 타겟(인스턴스)으로 트래픽을 보냄

 

  • 쿠버네티스의 접근
    • kube-proxy + 셀렉터

 

4. 쿠버네티스의 서비스 타입

 4-1. NodePort

30000 ~ 32767 번대의 포트로 접근하면 파드로 연결한다

만약 30000번대로 접근시, 192.168.1.3:30000 으로 접속한다

 

 4-2. ClusterIP

- 바깥에서 접근하는 서비스 X

- 내부적으로 iptable을 만들어 주는 서비스 (내부용)

- 파드는 프라이빗 DNS를 가지고 있다

- 서비스에 접속하면 파드1 혹은 파드2, 파드 n개 중 하나에 연결

- 파드가 복제 됬을 때, 클러스터 IP로 접근하면 파드1이 죽더라도 파드2로 접속시킬 수 있게 한다 (수평확장했을 때 서비스에 접근)

 

 4-3. LoadBalancer

- 부하분산