[Kubernetes] Service 작성

2023. 6. 26. 17:16기술 창고/Kubernetes

728x90
SMALL

이전에 Service 는 어떠한 역할을 수행할 수 있고 어떤 것인지 간단하게 알아보고 작성 방법에 대해서도 간단하게 알아보았습니다.

이제 저만의 Service를 작성하고 연결해보는 과정을 조금 더 세밀하게 알아보겠습니다.

 

 

nano webapp-service.yml 명령어를 입력하여 Service 를 작성할 yml 파일로 들어가줍니다.

파일명은 아무거나 상관없습니다.

 

 

 

- kind: Service 
Service 용도의 yml 파일.

- apiVersion: v1
지원 api 버전은 v1.

- metadata:
    name: fleetman-webapp
Service의 이름을 fleetman-webapp 으로 지정.

- spec:
    ports:
      - name: http
        port: 80
        # targetPort: 80
        nodePort: 30080
    selector:
      app: webapp
    #type: ClusterIP 
    type: NodePort
Service의 스펙을 지정해줍니다.
ports 항목에 Service의 포트 번호를 targetPort 에 Pod 혹은 container의 포트 번호를 넣어줍니다.
selector 항목에 키는 app, 값에는 webapp 을 넣어줍니다.
webapp은 앞서 Pod 를 만들었을 때 Pod 명입니다.

 

type에 ClusterIP를 Service 타입으로 정하게 되면 이 또한 Pod 처럼 쿠버네티스 클러스터 내부에서만 접근 가능하다고 알려주는 상황이 되는 것입니다.
마이크로 서비스 아키텍쳐를 운용하게 되면 이렇게 다른 서비스가 직접적으로 외부에서 접근하지 못하게 하고 각각의 서비스들이 독립적으로 실행되는 환경이 될 것입니다.

 

type에 NodePort를 Service 타입으로 정하게 되면 ClusterIP 와 반대로 외부(브라우저)에 노출되게 됩니다.
NodePort 타입을 정하게 되면 spec의 ports 항목에 nodePort 라는 설정값을 추가해줄 수 있습니다.
이 nodePort가 브라우저를 통해 웹 어플리케이션이 접근할 수 있는 포트가 되는 것입니다.
여기서 nodePort 가 브라우저를 통하니까 80으로 정해야 된다! 라고 생각할 수 있지만 안됩니다.
nodePort 는 기본적으로 30000 번 이상의 포트 번호를 기본으로 합니다.
따라서 위의 코드에서는 30080번 포트가 노출되게 될 것입니다

 

 

.

 

kubectl apply -f webapp-service.yml 명령어를 입력하여 Service 를 생성해줍니다.

 

 

kubectl get all 명령어를 입력하여 현재 생성된 내용들과 실행중인 내용들을 확인해줍니다.

 

 

이제 minikube ip 명령어를 통해 접속할 가상 환경 ip 주소를 확인하고 30080번 포트를 추가하여 요청해봅니다.
그럼 아직까지 연결이 되지 않습니다.
NodePort로 지정해주었으니 외부에 노출이 되었을 텐데 왜 호출해도 연결이 되지 않을까요?

 

 

그 이유는 바로 앞서 정리했던 것처럼 Sevice 의 Selector를 정해주었다면 Pod 쪽의 Label 도 지정해주어야합니다.

nano {Pod yml 파일명} 명령어를 통해 Pod 쪽 yml 파일에 들어가서 labels 항목을 추가하고, Service의 selector 와 동일한 키, 값으로 구성해줍니다.

 

 

kubectl apply -f {pod yml 파일명} 명령어를 통해 수정된 사항을 반영해주고 다시 생성해줍니다.

 

 

이제 다시 minikube ip 주소와 nodePort를 결합하여 요청해보면 정상적으로 페이지가 호출이 됩니다.

무사히 브라우저, Service, Pod 까지 연결이 되었습니다.

 

 


 

+ 추가 상황

추가적으로 다른 특정 상황을 가정해보겠습니다.
예를 들어, image가 새로운 버전이 release 되어 사용할 수 있게되었다는 연락을 받았다고 가정을 해보겠습니다.
이 새로운 버전의 image로 다시 배포해 보겠습니다.

 

nano {pod yml 파일 명} 명령어로 Pod 편집기로 들어갑니다.

 

 

image 항목에 release 버전을 바꿔주면 됩니다.
그리고 나서 저장 후 다시 kubectl apply 명령어를 입력하여 재생성해주면 됩니다.
다만 이 방법은 잘 사용하지 않습니다.

 

 

728x90
반응형
LIST