DevOps/CKA Test 준비

08.CKA-service_type_clusterip

치킨맛코드 2023. 2. 3. 09:03

service type - cluster ip

cluster ip
==> yaml에서 지정하지 않더라도 default값, 파드 그룹에 대한 ip에 대해 단일ip를 지원해 준다. 
service는 seleter를 이용해 lable(key/velue)에 지정된 pod를 묶어 하나의 cluster ip로 묶어준다. 이때 해당 ip는 10.96.0.0/12 범위 안에서 할당된다.
cluster 내부에서만 ip가 동작하기 때문에 외부의 ip대역과는 통신할 수 없다.

pod그룹에 clusterip 생성하기
deployment name : web
image : nginx
port : 80
replicas : 2
service name: web
type : clusterIP
port : 80

1. deployment생성하기
kubectl create deployment web --image=nginx --port=80 --replicas=2 --dry-run=client -o yaml > deployemnt.yaml

2. service 만들기
kubectl expose deployment web --type=ClusertIP --port=80 --target-port=80 --dry-run=client -o -yaml > service.yaml

문제
==> * 3.cka-deployment에서 만든 devops를 사용
k8s cluster에서 운영되고 있는 deployement의 service를 만드세요
namespace: devops
deployment : eshop-order
service name : eshop-order-svc
type : CluseterIP
port : 80

1. deployment가 있는지 먼저 확인
==> kubectl get deployments.apps -n devops -o wide

2. pod 정보를 확인하기
kubectl get pod -n devops -o wide
==> kubectl describe pod --namespace devops "pod name"
port 가 none 일 경우 기본값을 가지고 있다.

3.  service만들기
kubectl expose deployment -n devops eshop-order --type=ClusterIP --port=80 target=80 --name=eshop-order-svc --dry-run=client -o yaml

4.service 정보 확인해 보기
kubectl describe service --n devops eshop-order-svc





문제
pod를 이용한 named service를 구성해라.
미리 배포한 front-end 에 기존의 nginx 컨테이너 port 80/tcp를  expose하는 http라는 이름을 추가하시오. 이 후 front-end-svc라는 service를 만들고 준비된 node의 'NodePort'를 통해 개별 pods가 expose가 되도록 service를 구성 하시오.


작업 클러스터 : k8s

1. 작업 클러스터로 이동하기
==> kubectl config use-context k8s

2. front-end가 구동되고 있는지 확인하기
==> kubectl get deployments.apps front-end -o yaml > front-end.yaml

3. yaml 값 확인 및 수정하기

apiVersion: apps/v1
kind: Deployment
metadata:
    name: front-end
spec:
    replicas: 2
    selector:
      matchLabels:
         run: nginx
      template:
         metadata:
             labels:
               run: nginx
         spec:
            containers:
            - image: nginx
              name: http

              ports:
              - containerPort: 80
                name: http
==> port 이름 설정하기

---
==> 1개의 yaml에 2개 이상의 conatiner를 기록하기 위해서는 "---"를 반드시 추가한다.
apiVersion: v1
kind: Service
metadata:
    name: front-end-svc
==> 문제에서 주어진 service의 name을 지정
spec:
   selector:

      run: nginx
==> 상단에서 만든 container pods를 묶기 위해 labels를 추가한다.

      ports :
      - name: service-name
        protocol: TCP
        port: 80
        targetPort: http
==> 문제에서 지정한 타겟포트를 name으로 지정


4. yaml파일을 실행하기
==> kubectl apply -f front-end.yaml

5. nodeprot 변경하기
==> kubectl edit svc front-end-svc
해당 내용의 spec/type/ 의 내용을 NodePort로 변경
'NodePort'를 통해 개별 pods가 expose