📌 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 수정
- 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 번호]
