🔧
쿠버네티스(Kubernetes) CKA 모의고사 1.10 - 노드포트(NodePort)타입 서비스(Service) 생성
May 17, 2022
모의고사 1.10 - 노드포트(NodePort)타입 서비스(Service) 생성
1. 문제 요건
Expose the hr-web-app
as service hr-web-app-service
application on port 30082
on the nodes on the cluster.
The web application listens on port 8080
.
- Name: hr-web-app-service
- Type: NodePort
- Endpoints: 2
- Port: 8080
- NodePort: 30082
2. 내 풀이
1. 사전 작업
- kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요).
root@controlplane ~ ➜ source <(kubectl completion bash)
root@controlplane ~ ➜ echo "source <(kubectl completion bash)" >> ~/.bashrc
root@controlplane ~ ➜ alias k=kubectl
root@controlplane ~ ➜ complete -F __start_kubectl k
2. 노드포트(NodePort) 타입의 서비스(Service) 생성
- 노출 대상 애플리케이션이 파드인지 디플로이먼트인지 확인한다.
root@controlplane ~ ➜ k get pods
NAME READY STATUS RESTARTS AGE
hr-web-app-99dfd4c9d-nwvlr 1/1 Running 0 17m
hr-web-app-99dfd4c9d-xfpx5 1/1 Running 0 17m
messaging 1/1 Running 0 32m
nginx-pod 1/1 Running 0 36m
orange 0/1 Init:CrashLoopBackOff 5 3m56s
static-busybox-controlplane 1/1 Running
- 명령문으로 서비스의 매니페스트 파일을 생성한다.
root@controlplane ~ ➜ k expose deployment hr-web-app --name=hr-web-app-service --port=8080 --dry-run=client -o yaml > hr-web-app-service.yaml
- 매니페스트 파일에 잘못된 부분이 없는지 확인하고, NodePort 부분을 추가한다.
root@controlplane ~ ➜ vi hr-web-app-service.yaml
====
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: hr-web-app
name: hr-web-app-service
spec:
type: NodePort
ports:
- port: 8080
protocol: TCP
targetPort: 8080
nodePort: 30082
selector:
app: hr-web-app
status:
- 서비스가 잘 생성되었는지 확인한다.
root@controlplane ~ ➜ k get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
hr-web-app-service NodePort 10.107.107.163 <none> 8080:30082/TCP 26s app=hr-web-app
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 55m <none>
messaging-service ClusterIP 10.102.189.233 <none> 6379/TCP 27m tier=msg
3. 참고 URL
- kubectl cheat sheet: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/
- 서비스(Service): https://kubernetes.io/ko/docs/concepts/services-networking/service/