1. 탬플릿 작성

  • 서비스에 연결 할 파드 생성을 위해 deployment 탬플릿 작성
  • app-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-for-svc
  labels:
    app: nginx-for-svc
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-for-svc
  template:
    metadata:
      labels:
        app: nginx-for-svc
    spec:
      containers:
      - name: nginx-for-service
        image: nginx
        ports:
        - containerPort: 80
  • ClusterIP 유형의 서비스 생성을 위한 탬플릿 작성
  • clusterip.yaml
apiVersion: v1
kind: Service
metadata:
  name: clusterip-service
spec:
  type: ClusterIP          ------- 1. 서비스 타입 지정
  selector:
    app: nginx-for-svc     ------- 2. 서비스와 연결할 파드 .labels 필드 값
  ports:                   
  - protocol: TCP
    port: 80               ------- 3. 파드 접근 포트
    targetPort: 80         ------- 4. 파드 내부 포트 

2. 서비스 구조

  • 탬플릿을 통해 ClusterIP 타입의 서비스를 생성하면 서비스는 nginx-for-svc 라는 .labels 속성값을 갖는 파드에 연결
  • 쿠버네티스 클러스터 내부에 있는 파드에서 서비스를 통해 파드와 통신

KUB54001

3. 파드 생성

  • app-nginx.yml로 파드 생성
kubectl apply -f app-nginx.yaml 
deployment.apps/nginx-for-svc created 

kubectl get pods -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
nginx-for-svc-7487c987cf-j6kwm   1/1     Running   0          22s   10.233.117.20   instance-2   <none>           <none>
nginx-for-svc-7487c987cf-x5srj   1/1     Running   0          22s   10.233.66.17    instance-3   <none>           <none>

4. 서비스 생성

  • 템플릿에 작성한 내용으로 서비스 생성
kubectl apply -f clusterip.yaml 
service/clusterip-service created

kubectl get svc
NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
clusterip-service   ClusterIP   10.233.59.116   <none>        80/TCP    5s

4. 정보 확인

  • 서비스에 대한 자세한 정보 확인
kubectl describe service clusterip-service
  • 현재 실행 중인 파드들의 IP 확인
kubectl get pods -o wide

5. 접근 테스트

  • 서비스에 접근할 파드 생성
kubectl run -it --image nicolaka/netshoot testnet bash
  • 생성된 파드 내부에서 curl 명령어로 서비스 접속
bash# curl http://10.233.59.116
  • 실습 후 exit 명령어로 컨테이너에서 나옴

6. 전체 프로세스

7. 이슈사항

  • testnet pod에서 clusterIP 타입의 서비스 통신 테스트 결과 Instance-2에 생성된 pod와 통신이 가능하지만 Instance-3에 생성된 pod로 통신이 안 됨
  • 해결책은 오버레이 네트워크 방식을 활용해야 하고 해당 내용은 나중에 다룰 예정

KUB54001

댓글남기기