클라우드,가상화/K8S

k8s - ClusterIP

aiemag 2023. 7. 17. 00:47
반응형

 

ClusterIP ?

ClusterIP 서비스는 쿠버네티스의 가장 기본이 되는 서비스.

ClusterIP 서비스를 생성하면 쿠버네티스 클러스터 내부에서만 통신 가능한, Internal Network에 생성되는 가상 IP가 할당된다. 따라서 ClusterIP라고 불림.

ClusterIP와 통신은 각 노드상에서 실행중인 시스템 구성 요소 kube-proxy가 파드로 전송을 실시.

 

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

기본적으로 쿠버네티스 API에 접속하기 위한 Kubernetes 서비스가 생성되어 있고, ClusterIP가 발급되어 있음.

 

 

ClusterIP 서비스 생성

 

다음의 매니페스트로 ClusterIP 서비스를 생성.

sample-clusterip.yaml 

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

 

기존 디플로이먼트를 사용하여 다시 HTTP 요청을 해보면 ClusterIP로 전송되는 트래픽이 각 파드로 전송되는 것을 확인할 수 있음.

# 일시적으로 파드를 기동하여 ClusterIP로 전송되는 트래픽이 분산되는 것을 확인.

[root@k8s-master service]# k get pods
NAME                                 READY   STATUS    RESTARTS   AGE
sample-deployment-7c67dd9675-mfspv   1/1     Running   0          31s
sample-deployment-7c67dd9675-mn7h2   1/1     Running   0          31s
sample-deployment-7c67dd9675-xck75   1/1     Running   0          31s

[root@k8s-master service]# k run --image=amsy810/tools:v2.0 --restart=Never --rm -i testpod --command -- curl -s 10.110.5.182:8080
Host=10.110.5.182  Path=/  From=sample-deployment-7c67dd9675-mn7h2  ClientIP=192.168.194.84  XFF=
pod "testpod" deleted

[root@k8s-master service]# k run --image=amsy810/tools:v2.0 --restart=Never --rm -i testpod --command -- curl -s 10.110.5.182:8080
Host=10.110.5.182  Path=/  From=sample-deployment-7c67dd9675-mfspv  ClientIP=192.168.194.86  XFF=
pod "testpod" deleted

[root@k8s-master service]# k run --image=amsy810/tools:v2.0 --restart=Never --rm -i testpod --command -- curl -s 10.110.5.182:8080
Host=10.110.5.182  Path=/  From=sample-deployment-7c67dd9675-xck75  ClientIP=192.168.194.91  XFF=
pod "testpod" deleted

 

ClusterIP 가상 IP 정적 지정

애플리케이션에서 데이터베이스 서버를 지정하는 경우 기본적으로 쿠버네티스 서비스에 등록된 클러스터 내부 DNS 레코드를 사용하여 호스트를 지정하는 것이 바람직.

그러나 IP 주소로 지정해야 하는 경우 ClusterIP를 정적으로 지정할 수도 있음.

ClusterIP를 자동 할당이 아닌 수동으로 설정할 경우 spec.clusterIP를 지정.

 

sample-clusterip-vip.yaml

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

 

서비스가 이미 생성된 후에는 ClusterIP를 변경할 수 없음.(apply로 안됨, k8s 특성상 ClusterIP 값 등과 같은 일부 필드는 변경할 수 없음)

ClusterIP를 지정하려면 삭제하고 다시 생성해야 함.

 

[root@k8s-master clusterip]# k apply -f sample-clusterip-vip.yaml
service/sample-clusterip-vip created
[root@k8s-master clusterip]# k get service
NAME                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
kubernetes             ClusterIP   10.96.0.1      <none>        443/TCP    25h
sample-clusterip-vip   ClusterIP   10.110.5.111   <none>        8080/TCP   5s
반응형

'클라우드,가상화 > K8S' 카테고리의 다른 글

k8s - Secret  (0) 2023.12.17
k8s - DemonSet  (1) 2023.10.23
k8s - kubernetes 클러스터 네트워크와 서비스  (0) 2023.07.16
k8s - Deployment  (0) 2023.07.02
k8s - ReplicaSet  (0) 2023.07.02