[Kubernetes] Service

Service

 

Service 리소스

  • POD가 재생성되면 IP가 바뀌기때문에 직접 연결하는 데 문제가 생길 수 있음
  • 그래서 서비스 리소스를 이용
  • 한 번 할당받은 뒤에 바뀌지 않는 cluster IP 갖고 있음
  • Service 리소스가 cluster IP 할당받고, 사용자는 그 IP에 리퀘스트 요청
    • POD의 레이블(Selector)을 이용해서 서비스가 POD에 리퀘스트 전달
  • POD 앞단에서 사용자의 트래픽 Load Balancing하는 역할

 

Service 종류

  • ClusterIP
    • 디폴트 서비스타입. 클러스터 내부에서 접속 가능 
  • NodePort
    • 각 Node의 지정된 port 할당하는 방식. 클러스터 내/외부 모두 접속 가능
  • LoadBalancer
    • 로드밸런서의 IP 이용하여 클러스터 외부에서 접근 가능

 

 

 Service 상세 조회

 

app=guestbook이라는 label을 가진 pod에 요청 전송

endpoints들에 해당하는 것이 대상 pod의 IP와 port

 

 

 

sessionAffinity 속성

 

MSA: stateless하게 개발 (session을 사용하지 않음)

sessionAffinity: ClientIP 옵션을 사용하면 들어오는 요청을 매번 같은 POD로 리다이렉트

 

 

Multi-Port

 

Service 리소스 1개로 멀티 포트 지원 가능

각 포트에 반드시 이름 지정해야 함

 

 

TargetPort 별로 Endpoint 생성됨

 

 

+ 레이블 셀렉터는 각 포트에 개별적으로 설정 불가

+ port에 이름 지정할 경우 Service 스펙 변경 없이 POD의 컨테이너 port 변경 가능

 

 

Service discovery

 

1. 환경 변수

  •  POD 생성 전에 서비스 생성 시 POD는 환경변수를 조사해서 서비스의 IP 주소와 port 번호 알 수 있다.
    • pod와 service의 생성 시점에 따라 정보를 알 수도, 모를 수도 있음

 

2. DNS

  • 서비스 이름을 알고 있는 경우 환경 변수 대신 FQDN(Qualified Domain Name, 정규화된 도메인 이름)을 통해 액세스 가능
  • pod 내부에서 사용할 때만 의미가 있고, 여전히 환경변수로부터 port 번호를 알 수 있어야 함
  • 요청한 url의 호스트 이름을 사용하듯이 서비스 이름을 통해 서비스에 액세스 가능
  • 각 pod 컨테이너의 dns resolver 구성 방식에 따라 네임스페이스 및 svc.cluster.local 접미어 생략 가능

 

외부 클라이언트에 서비스 노출

 

1. NodePort 서비스 타입으로 설정

 

  • 서비스 액세스 가능 주소
    • <ClusterIP>:<ClusterIP>
    • <NodeIP>:<NodePort>
    • <MasterIp>:<NodePort>

 

 

 

2. LoadBalancer 서비스 타입으로 설정 (NodePort 타입 확장형)

 

 

 

3. Ingress 리소스 이용

 

  • Layer 7에서의 요청 처리 가능
  • HTTP 요청을 인그레스에 보냈을 때 호스트와 요청상의 경로는 요청이 포워드될 서비스 결정
  • 인그레스 컨트롤러
    • 인그레스 리소스 작동 위해서는 클러스터에서 인그레스 컨트롤러 실행해야 함
    • 쿠버네티스 공식 지원 구현체: GKE, NGINX Ingress Controller

 

 

Service Health Check

 

1. Liveness probe

  • 컨테이너가 살아있는지 아닌지를 체크하는 방법
  • 실패 시 컨테이너 다시 시작

 

2. Readiness probe

  • 컨테이너가 서비스가 가능한 상태인지를 체크하는 방법
  • 실패 시 서비스에서 제외

 

'TIL > etc' 카테고리의 다른 글

[이산수학] 집합론  (1) 2024.04.22
jupyter notebook 설치 명령어  (0) 2024.03.27
[Kubernetes] Deployment  (0) 2024.01.14
[Kubernetes] POD / POD Generator  (1) 2024.01.12
[Kubernetes] Kubernetes 개요  (0) 2024.01.11