*유데미에서 진행하는 Kubernetes for the Absolute Beginners - Hands-on 강의를 바탕으로 제작되었습니다.
쿠버네티스 서비스(Service)는 3가지로 구분됩니다. 노드 포트, 클러스터ip, 로드 밸런스 이번 포스팅에서는 2번째인 클러스터ip에 대해 알아보겠습니다.
1. ClusterIP
풀스택 웹 어플리케이션은 어플리케이션의 다른 부분을 호스팅하는 부품을 가지고 있습니다.
예를 들어 front-end, back-end, redis 이렇게 3계층으로 구성되어 있다고 가정했을때, 프론트 엔드를 실행하는 파드들이 있고, 백엔드를 실행하는 파드들이 있고, 레디스를 실행하는 파드들이 있습니다.
웹 프로트엔드는 백엔드와 통신해야 하고, 백엔드 서버는 레디스 같은 데이터베이스와 통신을 해야합니다.
어플리케이션의 계층간 연결을 확립하는 방법으로 클러스터ip가 사용됩니다.
파드는 모두 ip주소를 가지고 있습니다. 하지만 파드가 가진 ip주소는 고정적이지 않습니다. 파드는 deployment에 의해 언제든지 파괴될 수 있고 업데이트 된다면 새로운 파드로 교체될 수 있습니다. 그럴때마다 파드의 ip주소는 변경됩니다. 따라서 어플리케이션의 내부 통신을 ip주소에만 의존할 수는 없습니다.
첫 번째 프론트엔드의 파드가 10.244.0.3일 때 백엔드 파드의 어디로 가야하고 누가 결정을 내리는지 사용자가 직접 지정할 수는 없습니다. 그래서 쿠버네티스 서비스를 통해 파드를 하나로 묶고 하나의 인터페이스를 통해 단체 포트에 접속할 수 있습니다.
예를 들어 백엔드 포드를 위해 만든 서비스는 백엔드 포드를 하나로 묶고 다른 부분이 이 서비스에 액세스하도록 단일 인터페이스를 제공합니다.
같은 방식으로 레디스를 위해 추가 생성한 서비스는 벡엔드 파드가 서비스를 통해 레디스 시스템에 접속할 수 있게 해줍니다.
이렇게 접속을 한 단계 거쳐서 구성하게 되면 각 계층은 필요한 대로 확장 또는 이동할 수 있는 장점이 있고, 다양한 서비스간 통신에 영향을 주지 않으면서 클러스터 내부에서 고유한 ip와 이름을 가질 수 있습니다.
# service-clusterIP-definition.yaml
apiVersion: v1
kind: Service
metadata:
name: back-end
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
selector:
app: myapp
type: back-end
targetPort는 백엔드가 노출되는 포트(여기서는 80), port는 서비스가 노출되는 포트(여기서는 80), selector는 관리하려는 파드들의 식별하기 위한 속성입니다.
앞서 포스팅한 NodePort 정의 파일과 다르게 ports 부분에 nodePort는 없습니다.
spec.type 부분을 ClusterIP로 지정했지만, 쿠버네티스에서 kind: Service로 설정하고 spec.type을 지정하지 않으면 자동으로 type을 클러스터ip로 할당합니다.
클러스터ip 생성
kubectl create -f service-clusterIP-definition.yaml
>>>
service "back-end" created
NodePort와 ClusterIP를 모두 실행한 뒤 kubectl get service를 입력하면 서비스 2개가 출력되는 것을 확인할 수 있습니다.
출력 예시
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
back-end ClusterIP 10.96.XXX.XX <none> 80/TCP 2m
nodeport NodePort 10.97.XXX.XX <none> 80:32501/TCP 1m
ClusterIP에 출력된 PORT(S)는 서비스의 포트이며 정의 파일에서 spec.ports.port를 나타냅니다(여기서는 80) 만일
spec:
type: ClusterIP
ports:
- port: 8080
targetPort: 80
위와 같이 definiton을 정의했다면 8080/TCP가 출력됩니다.
2. NodePort와 ClusterIP의 차이
노드포트는 클러스터 외부에서 내부에 있는 파드 속 응용 프로그램에 접근하기 위해 사용하는 쿠버네티스 서비스이고, 클러스터ip는 클러스터 내부의 다른 파드나 서비스에 접근하기 위한 가상의 ip이며 외부에서 접근이 불가합니다.
'[Cloud] > [Kubernetes]' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 마이크로서비스 어플리케이션(Microservice application) (0) | 2024.05.30 |
---|---|
[Kubernetes] 쿠버네티스 서비스 - 3. 로드밸런서(LoadBalancer) (0) | 2024.05.29 |
[Kubernetes] 쿠버네티스 서비스 - 1. 노드포트(NodePort) (0) | 2024.05.27 |
[Kubenetes] 쿠버네티스 업데이트 & 롤백 2 (0) | 2024.05.25 |
[Kubernetes] 쿠버네티스 업데이트 & 롤백 (0) | 2024.05.24 |