<클라우드융합> Service Deployment

박서연·2023년 4월 16일

Cloud

목록 보기
4/13

📌 Service

1. Service

1) pod의 논리적 집합

🔸 pod 집합에 접근할 수 있는 정책을 정의하는 추상적 개념
🔸 label, selector를 이용하여 pod 집합 결정

2) 서비스를 통해 클러스터 내/외부에서 pod로 접근 가능

2. Label

1) 쿠버네티스 오브젝트(pod, deployment,...)에 붙는 key/value 값

2) 주로 오브젝트를 묶거나 선택하기 위해 사용

3) 의미있고 관련성 높은 특징으로 식별하기 위한 일종의 태그 역할

3. Selector

1) 어떤 오브젝트를 선택할지 표현하는 방법

2) 특정 label을 선택하여 해당하는 오브젝트만 선택

📌 Service type

1. ClusterIP (default)

1) 서비스를 클러스터 내부 IP에 노출시킴

2) 클러스터 내부에서만 접근 가능

2. NodePort

1) 각 노드 IP 주소의 특정 port에 서비스를 노출시킴

2) 포트 당 하나의 서비스를 사용하며, 3000~32767 범위 내의 포트 사용

3) <Node IP 주소>:<NodePort>를 요청하여 클러스터 외부에서 접근할 수 있음

3. LoadBalancer

1) 클라우드 공급자의 로드밸런서를 사용하여 서비스를 클러스터 외부에 노출

Ex. AWS, GCP, Azure 등

📌 Port 종류

📌 clusterIP_Service Deployment 실습

0. nginx html 수정

  1. yaml apply

kubectl apply -f nginx-deployment-service.yaml


2. pod1 nginx 코드 수정

kubectl exec -it nginx-pod-77f84768c4-c9hdx -- bash

=> container 안으로 들어왔음
🔸 apt update
🔸 apt install vim -y
🔸 => container 안에 vim 설치되지 않았기 때문에 설치

cd /usr/share/nginx/html

ls => index.html 존재

vim index.html

💡 index.html이 nginx의 기본 html
🔸 코드 수정 후 저장(:wq)

exit

=> 빠져나옴


3. pod2 nginx 코드 수정

kubectl exec -it nginx-pod-77f84768c4-c9hdx -- bash

(container 안으로 들어왔음)
🔸 apt update
🔸 apt install vim -y
🔸 => container 안에 vim 설치되지 않았기 때문에 설치

cd /usr/share/nginx/html

ls => index.html 존재

vim index.html

💡 index.html이 nginx의 기본 html
🔸 코드 수정 후 저장(:wq)

exit

🔸 빠져나옴

1. yaml 파일을 이용한 clusterIP service 생성

kubectl apply -f nginx-service.yaml

kubectl get svc -o wide

: service 확인

kubectl get pods -o wide

: pod의 IP 주소 확인

kubectl get endpoints nginx-service

: 이어진 pod의 IP 주소들 나타남

2. Expose 명령어를 이용한 clusterIP service 생성

kube get deployment

: pod가 deployment 형태로 있으므로 이름 확인

kubectl expose deployment nginx-pod --name=nginx-service-2 --type=ClusterIP --port=8080 --target-port=80

kubectl get pods -o wide

kubectl get endpoints nginx-service-2


kubectl get svc -o wide

3. 서비스가 잘 생성되었는지 확인

🔸 cluster 내부에서 접근 가능한지

curl [서비스 ip 주소:포트번호]


💡 클러스터 내부에서 접근 kubectl get svc -o wide에서 나온 IP, port 사용

4. 서비스 삭제

kubectl delete svc nginx-service

📌 NodePort_Service Deployment 실습

1. yaml 파일을 이용한 nodePort service 생성

kubectl apply -f nginx-service-nodeport.yaml

kubectl get svc

kubectl describe service nginx-service-nodeport

curl [cluster IP: port number]

💡 클러스터 내부에서 접근. kubectl get svc -o wide에서 나온 IP, port 사용

curl [node ip 주소: nodeport 번호]

💡 클러스터 외부에서 접근. ip address로 node ip 확인
nodeport는 describe에 있음

2. Expose 명령어를 이용한 nodePort service 생성

🔸 kubectl get deployment로 현재 deployment 확인

kubectl expose deployment nginx-pod --name=nginx-service-nodeport-2 --type=NodePort --port=8080 --target-port=80

kubectl get svc -o wide

kubectl describe service nginx-service-nodeport-2

3. cluster 내부와 외부에서 모두 접속이 가능한지 확인

curl [서비스 IP 주소]:[포트넘버]

🔸 get service -o wide에 있음

curl [node IP 주소]:[node port 번호]

🔸 ip address에 node ip, describe service에 node port 번호 있음

웹서버에도 [node IP 주소]:[node port 번호]

0개의 댓글