본문 바로가기
Kubernetes/활용

쿠버네티스 서비스(service) 사용하기 (1)

by lumination 2024. 2. 22.

쿠버네티스 서비스에서는 파드 간 연결을 가리켜 파드를 노출(expose)한다. 라고 표현한다.

 

쿠버네티스 서비스는 동적으로 각 파드 간 연결을 제공한다. = 서비스 디스커버리한다.

 

 

쿠버네티스는 파드의 연결을 제공(Serve)한다는 의미로 서비스라는 용어를 쓴다.

 

클러스터 내부 혹은 외부 연결에 따라 서비스 타입을 다음과 같이 구분한다.

  • 클러스터 내부에서 파드와 파드를 연결: 클러스터IP (Cluster IP), 헤드리스(Headless)
  • 클러스터 외부에서 클러스터 내부의 파드를 연결: 노드포트 (NodePort), 로드밸런서(LoadBalancer)

서비스는 쿠버네티스 리소스의 한 종류

  • 다이나믹하게 종료되고 생성되는 파드를 자동으로 발견(Service Discovery)한다.
  • 변경이 잦은 IP 주소가 아닌 지속 가능한 도메인 레코드(DNS) 기반의 쿠버네티스 서비스 이름을 이용해 통신한다.
  • 노드 내 실행 중인 여러 파드로 부하를 분산하는 로드밸런싱 기능을 자체적으로 지원한다.

1. 클러스터 내부 파드 간 통신

 

클러스터 내부 파드와 파드 간 연결을 이해하기 위해 클러스터IP 타입의 서비스를 생성한다. 서비스에서 기존 파드가 삭제되고 파드가 새로 생성될 때 자동으로 새로운 파드를 인식하는지 확인한다.

그리고 파드 수량을 증가시켜 서비스가 새로운 파드를 자동으로 등록하는지 확인한다.(서비스 디스커버리)

 

1.1. nginx 디플로이먼트를 생성한다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-hello
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx #셀렉터가 연결할 레이블
  template:
    metadata:
      labels:
        app: nginx #파드의 레이블
    spec:
      containers:
      - name: nginx
        image: nginxdemos/hello

레이블이 필요한 이유는 서로 다른 리소스간에 선택을 해야 한다면 셀렉터(Selector, 선택자) 옵션을 사용한다.

내부적으로 레이블을 기준으로 리소스를 선택한다.

 

selector: nginx -> spec.template:metadata.labels: nginx

셀렉터가 레이블 기준으로 연결한다.


nginx-ClusterIP-svc.yml

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:  # 선택해야 할 POD
    app: nginx  # 파드 Label과 동일
  type: ClusterIP
  ports:
  - name: tcp
    port: 80 #서비스로 연결하는 포트
    targetPort: 80 #타깃 파드의 포트

 

kubectl get service

NAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
nginx-svc   ClusterIP   10.99.54.145   <none>        80/TCP    3m31s

클러스터IP 타입의 서비스가 정상적으로 생성되었다.
셀렉터를 이용해 서비스가 생성되면 자동으로 엔드포인트가 만들어진다.
엔드포인트란 쿠버네티스 서비스에서 관리하는 도착 종료 지점(endpoint)이다.

 

kubectl get endpoints

NAME        ENDPOINTS                               AGE
nginx-svc       10.10.180.249:80   65s

 

 

외부 -> 노드포트, 로드밸런서 -> 클러스터 ip -> 파드

엔드포인트: 파드 접근 정보

'Kubernetes > 활용' 카테고리의 다른 글

kube-proxy 부하분산 설정의 이해  (0) 2024.02.23
쿠버네티스 DNS 기능 이해  (0) 2024.02.22
Helm 헬름 활용(3)  (0) 2024.02.19
Helm 헬름 활용(2)  (0) 2024.02.19
Helm 헬름 활용(1)  (0) 2024.02.19