Kubernetes 기초 (10) - Service

이것저것 개발자·2023년 4월 3일
0

kubernetes 기초

목록 보기
10/16
post-custom-banner

Pod 한계점

클라이언트가 Pod UP 목록을 최신 상태로 관리해야 한다.

  • Pod 는 생성될 때 마다 새로운 IP를 할당받음

Pod을 외부로 노출 시킬 수 없다.

  • Pod IP는 클러스터 내부에서만 접근할 수 있다.

Service 개념

  • 파드 집합에 대한 단일 엔드포인트 생성

Service: 파드 추상화 = 파트들의 단일 엔드포인트 + 로드밸런싱

  • 파트 클라이언트는 Service IP:Port를 이용해서 파드와 통신할 수 있다.
  • Service는 Selector에 의해 선택된 파드 집합 중 임의의 파드로 트래픽을 전달한다.
apiVersion: v1
kind: Service
metatdata:
	name: order                 # 서비스의 이름
    namespace: {namespace}
    labels:
    	app: order
    spec:
    	selector:
        	app: order          # 유입될 트래픽을 전달한 파드들의 집합
        ports:
        - port: 80              # 노출할 서비스 포트
          targetPort: 8080      # 서비스 포트와 연결할 컨테이너 포트,
                                  `containerPort와 일치해야함`

Endpoints:Service가 노출하는 Pod IP와 Port의 최신 목록

  • Service 리소스를 생성하면 Service와 같은 이름으로 Endpoints 리소스가 생성됨.
  • Service에 선언한 Selector의 파드 집합이 변경될때 Endpoints 목록도 업데이트 됨
  • Service가 받은 트래픽을 Endpoints 중의 하나로 리다이렉트

Service와 통신하는 방법

  • 컨테이너 환경변수에 설정된 Service IP와 Port를 이용
    1. Pod 생성시 컨테이너 환경변수에 모든 ServiceIP와 Port를 추가한다.
       ex) OOO_SERVICE_HOST, OOO_SERVICE_PORT
    
    주의 1) Service를 Pod보다 먼저 생성되어있어야 한다.
        2) 다른 네임스페이스에 있는 Servcie 환경변수는 설정되지 않는다.
  • Service 이름으로 DNS 서버에 질의하여 Service IP를 알아내는 방법
	1. 쿠버네티스가 DNS서버 IP주소를 컨테이너의 `/etc/resolve.conf`파일에 등록
    2. Service 이름으로 요청을 실행하면 DNS 서버로부터 Service IP를 조회

Service의 타입

  • Cluster IP
  • NodePort
  • LoadBalancer

    LoadBalancer > NodePort > ClusterIP

ClusterIP

  • 기본 Service 타입, PodIP 처럼 외부에서는 접근할 수 없는 IP를 할당 받음
  • Service IP는 클러스터 내부 통신용으로 사용

NodePort

  • 외부에서 접근할 수 있는 External IP가 아니라 NodePort를 할당 받는다.
  • 할당받은 NodePort를 통해 들어온 트래픽을 파드 집합으로 포워딩한다.

NodePort의 한계점

  • 노드의 상태에 따라 영향을 받음

LoadBalancer

  • 클라우드 서비스의 Load Balancer를 프로비저닝하고 External IP를 할당 받는다.
  • 클라이언트는 Load Balancer IP를 통해 특정 서비스로 외부 트래픽을 포워딩할 수 있다.

Pod 안에서는 Service 이름과 네임스페이스 이름을 이용해서 다른 Pod과 통신할 수 있다.
   - Pod:<service-name>:<service-port>
   - Pod:<service-name>:<service-port>.<namespace>
profile
조호영, Developing something
post-custom-banner

0개의 댓글