728x90
반응형
출처
Cloud Native DevOps with Kubernetes / 쿠버네티스를 활용한 클라우드 네이티브 데브옵스
Certified Kubernetes Administrator (CKA) with Practice Tests(Udemy)
SERVICES
What is Service?
앱 안팎의 다양한 구성 요소 간의 통신을 가능하게 한다.
Pod와 Pod 또는 Pod와 사용자를 연결한다.
사용자가 Pod에 배포된 웹 앱에 접근하는 과정
- 사용자가 웹 브라우저 또는 API를 통해 웹 애플리케이션에 요청을 보낸다.
- 요청이 외부 IP주소를 통해 클러스터의 LB로 전달된다. LB는 요청을 Service로 전달한다.
- LB 또는 NodePort를 통해 전달된 요청은 클러스터 내의 특정 Service로 라우팅 된다. Service는 Label Selector를 사용하여 관련 Pod를 찾는다.
- Service가 연결된 Pod(실제 웹 어플리케이션이 실행되고 있는 컨테이너)에 요청이 전달된다.
- Pod 내에서 실행되는 웹 어플리케이션 컨테이너가 요청을 처리하고, 필요한 응답을 생성한다.
- 컨테이너가 생성한 응답이 Pod->Service->LB->사용자 순으로 전달된다.
Services Types
NodePort
클러스터의 모든 Node에서 지정된 Port를 통해 외부에서 접근할 수 있도록 도와준다.
클러스터의 IP 주소와 함께 특정 Port로 요청하면 해당 서비스에 연결된다.
NodePort yml
#Service yml 구조
[root@]$ vi service-definition.yml
apiVersion: v1
kind: Service
metadata:
name: imfra-service #service의 이름
spec: #실제 Service를 정의
type: NodePort #Service Type
ports:
- targetPort: 80 #Pod내 배포된 App Container의 Port
port: 80 #Service의 Port
nodePort: 30008 #AP서버의 Port (30000-32767)
selector: #Pod yml에 정의한 labels 하위 항목을 그대로 작성
type: rolling-update-test #연결을 원하는 Pod와 일치
#Service 생성
[root@]$ kubectl create -f service-definition.yml
service "imfra-service" created
#Service 확인
[root@]$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.x.x.x <none> 443/TCP 28d
imfra-service NodePort 10.x.x.x <none> 80:30008/TCP 25x
ClusterIP
쿠버네티스 Services를 통해 Pod를 하나로 묶고 하나의 인터페이스를 통해 무작위로 하나의 Pod로 요청을 전달한다.
외부에서 직접 접근할 수 없고, 다른 Pod나 Service에서만 사용된다.
ClusterIP yml
#CluserIP yml 구조
[root@]$ vi service-definition.yml
apiVersion: v1
kind: Service
metadata:
name: imfra-cluserip
spec: #실제 Service를 정의
type: ClusterIP #Service Type
ports:
- targetPort: 80 #Pod내 배포된 App Container의 Port
port: 80 #Service의 Port
selector: #Pod yml에 정의한 labels 하위 항목을 그대로 작성
type: rolling-update-test #연결을 원하는 Pod와 일치
LoadBalancer
클라우드 환경에서 사용되는 Service타입. 외부 LB를 생성하여 클러스터의 Service에 대한 접근을 제공한다.
클라우드 제공업체의 LB를 통해 Service에 대한 요청이 자동으로 분산된다.
LoadBalancer yml
#LoadBalancer yml 구조
[root@]$ vi service-definition.yml
apiVersion: v1
kind: Service
metadata:
name: imfra-lb
spec: #실제 Service를 정의
type: LoadBalancer #Service Type
ports:
- targetPort: 80 #Pod내 배포된 App Container의 Port
port: 80 #Service의 Port
nodePort: 30008 #AP서버의 Port (30000-32767)
728x90
반응형
'클라우드 > 쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 자원 기반 접근법, 명령 기반 접근법 (0) | 2024.11.24 |
---|---|
[쿠버네티스] 네임스페이스 (0) | 2024.11.10 |
[쿠버네티스] ReplicaSet (0) | 2024.10.27 |
[쿠버네티스] ETCD (0) | 2024.09.21 |
[쿠버네티스] Container Runtime Interface (CRI) (0) | 2024.09.16 |
댓글