Kubernetes

서비스 API 카테고리(ClusterIP)

jih0ssang 2024. 1. 20. 14:45


작성중...

 

서비스 API 카테고리

컨테이너를 외부에 공개하는 엔드포인트를 제공하는 리소스

- 서비스

   - ClusterIP

   - ExternalIP  (ClusterIP의 한 종류)

   - NodePort

   - LoadBalancer

   - Headless (None)

   - ExternalName

   - None-Selector

- 인그레스

 

쿠버네티스 클러스터 네트워크와 서비스

파드

# 쿠버네티스 API에 접속할 수 있도록 쿠버네티스 서비스가 생성됨
$ kbuectl get services
NAME		 TYPE		CLUSTER-IP	EXTERNAL-IP	PORT(S)	 AGE
kubernetes	 ClusterIP	10.3.240.1      <none>		443/TCP	 5d10h
sample-clusterip ClusterIP      10.3.251.192    <none>          8080/TCP 76m

 

ClusterIP 서비스 생성

ClusterIP는 쿠버네티스 클러스터 외부(노드)에서 트래픽을 수신할 필요가 없는 환경에서 클러스터 내부 로드밸런서를 사용한다.

기본적으로 ClusterIP가 발급되어 있다.

 

외부 네트워크(노드)에서 파드로 트래픽을 수신하는 순서

1. ClusterIP 서비스(클러스터 내부 로드밸런서) (10.3.251.192.8080)

2. 파드 (10.0.2.124:80)

 

apiVersion: v1
kind: Service
metadata:
  name: sample-clusterip
spec:
  type: ClusterIP
  ports:
  - name: "http-port"
    protocol: "TCP"
    port: 8080
    targetPort: 80
  selector:
    app: sample-app

port : 파드(내부 로드밸런서, ClusterIP 서비스)가 수신할 포트 번호

targetPort: 컨테이너가 수신할 포트 번호

설정 항목 개요
spec.ports[].port ClusterIP에서 수신할 포트 번호
spec.ports[].targetPort 목적지 컨테이너 포트 번호

 

 

# 일시적으로 파드를 기동하여 ClusterIP로 전송되는 트래픽이 분산되는 것을 확인
$ kubectl run --image=amsy810/tools:v2.0 --restart=Never --rm -i testpod \
--command -- curl -s http://sample-clusterip:8080
Host=sample-clusterip Path=/ From=sample-deployment-7c6d ClientIP=10.0.2.168 XFF=
pod "testpod" deleted

(여러 번 실행하면 비슷한 빈도로 세 개의 파드명이 표시된다.)
Host=sample-clusterip Path=/ From=sample-deployment-7c87 ClientIP=10.0.2.169 XFF=
pod "testpod" deleted

Host=sample-clusterip Path=/ From=sample-deployment-7c64 ClientIP=10.0.2.170 XFF=
pod "testpod" deleted

 

 

ClusterIP 가상 IP 정적 지정

apiVersion: v1
kind: Service
metadata:
  name: sample-clusterip-vip
spec:
  type: ClusterIP
  clusterIP: 10.3.251.194      # 실습 환경에 맞춰 IP를 변경
  ports:
  - name: "http-port"
    protocol: "TCP"
    port: 8080
    targetPort: 80
  selector:
    app: sample-app

 

# 메니페스트에 작성된 ClusterIP 변경
$ sed -i -e 's|10.3.251.194|10.3.251.195|g' sample-clusterip-vip.yaml

# 이미 할당된 clusterIP 주소를 변경하려는 경우
$ kubectl apply -f sample-clusterip-vip.yaml
The Service "sample-clusterip-vip" is invalid: spec.clusterIP: Invalid value:
"10.3.251.195": field is immutalbe