DevOps/CKA Test 준비

09.CKA-service_type_NodePort 초안

치킨맛코드 2023. 2. 8. 08:39

9.CKA-service_type_NodePort

NodePort
ClusterIP의 기능을 포함한, 외부에서 접속 가능한 port를 사용할 수 있는 port이다.
지정한 worker nodes의 nic card에 30000~32767번 사이의 random port를 부여해 준다.(해당 port는 같은 port를 사용한다.ex. worker node1의 port가 33333번 이 열렸으면 worker node2도 33333번) 해당 prot는 kube-porxy가 listening만 한다. 이 후 IP tables의 rule에 의해 배포해준다


apiVersion: v1
kind: Service
metadata:
    name: nodeport-service
spec:
    type: NodePort
==> 타입을 nodeport로 지정한다ㅣ
    clusterIP: 10.100.100.200
==> clusterip를 할당해 내부 ip를 지정해 준다.
    selector:
      app: webui
    ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30200
==> nodePort를 30200번으로 개방할 것이다. 설정하지 않을 경우 렌덤으로 지정해 준다.


<문제>
front-end라는 deployment의 nginx container에 exporse 하는 front-end-nodesvc라는 새 service를 만드십시오.

작업 클러스터 : k8s
nodeport : 30200

1. 작업 클러스터로 먼저 이동한다
==> kubectl config use-context k8s

2. workernode가 연결되어 있는것을 확인한다
==> kubectl get nodes

3. front-end라는 deployment와 pod가 있는지 확인한다. 이 후 labels값과 port값을 확인한다.
==> kubectl get deployments front-end
==> kubetcl get pods | grep -i front-end
==> kubectl describe deployemnets.apps front-end-"podname" | grep -i -e port -e labels

4.service를 사용하기 위한 yaml을 생성한다. 이때 nodeport는 yaml에서 수정한다.
==> kubectl expose deployment front-end-nodesvc --port=80 --target-port=80 --type NodePort --dry-run=client -o yaml > front-end-nodesvc.yaml


apiVersion: v1
kind: Service
metadata:
    creattionTimestamp: null
    name: front-end-nodesvc
spce:
    ports:
    - port:
      protocal: TCP
      targetPort: 80
      nodePort: 3020
==> nodePort를 고정값으로 지정한다.
    selector:
      run: nginx
    type: NodePort
status:
    loadBalncer: {}


5.k8s를 실행시키기
==> kubectl apply -f front-end-nodesvc.yaml