Service란 무엇인가?
저번 게시물에서는 파드에 대해서 다루었다. Service또한 Pod만큼 중요한 쿠버네티스의 기본 리소스이다.
우리가 전에 생성하고 배포한 Pod는 실행 중인 작업자 Node에서만 액세스 할 수 있다. 그리고 Service를 통해 노출될 때까지 kubernetes Master Node나 다른 Node에서도 액세스 할 수 없다. 각 Pod는 로컬호스트에서만 CNI 플러그인을 통해 IP 주소를 얻기 때문이다.
네트워크를 통해서 애플리케이션에 액세스하려면 위 그림처럼 Kubernetes Service를 사용하여 Pod를 외부 트래픽에 노출하고 여러 Pod에서 트래픽을 로드밸런싱 해야 한다.
외부 접속 설정
외부 접속 설정을 하는 서비스 타입에는 위 그림과 같이 총 4가지가 존재한다.
먼저 Cluster IP이다. ClusterIP는 외부 트래픽이 아닌 서비스를 통한 Cluster 내 내부 통신에만 사용되는 기본 IP이다.
프런트앤드 및 백앤드 서비스와 같은 아키텍쳐를 계획할 때 유용하다. 백엔드 Pod에 대해 이 클러스터 IP를 사용하는 것이 좋다. 외부에 노출되지 않은 Pod와 같기 때문이다.
NodePort 유형은 동일한 대상 포트를 사용하여 pod를 외부 네트워크에 노출하므로 사용자는 작업자 Node IP 및 노출된 포트를 사용하여 액세스할 수 있다. 트래픽은 서비스를 통해 각 Pod로 전송된다.
이 로드밸런서 유형은 클라우드상에서 존재하는 로드밸런서에 연결하고자 할 때 사용하는 서비스 타입이다.
만약 쿠버네티스 클러스터 환경이 구글 클라우드나 AWS와 같은 클라우드 제공자이며, 로드밸런서를 사용한다면 External IP를 얻게 된다.
이 External iP를 사용해 요청을 파드에 전달하고 응용 프로그램에 액세스 할 수 있다. 하지만 요금이 부과된다.
ExternalName은 외부 DNS 이름을 정의하는데 사용된다. 클러스터 외부에 있는 다른 애플리케이션에 액세스해야 하는 프론트엔드 Pod가 클러스터에 있다고 가정하면 이 서비스를 사용할 수 있다. 데이터베이스 서비스가 외부에서 호스트되며 클러스터 내에서 액세스 하려는 경우 사용된다.
실습하기
먼저 namespace를 새로 만들어 준다. 현재 이 가상머신 안에 이미 prometheus가 돌아가고 있기 때문에 혼돈을 줄이기 위해서는 네임스페이스를 새로 생성한 후 논리적으로 분리해야 관리가 편하다.
먼저 Pod 하나를 생성 해 준다.
이를 외부로 노출 시켜 줄 것이 Service이다.
yaml을 작성한 후 서비스를 실행 해 보니 잘 되는 것을 확인 할 수 있다.
마지막으로 포트 포워딩을 진행한다.
포트 포워딩 후 접속해보니 잘 접속이 되는 것을 확인할 수 있다.
참조 문서
Kubernetes Services Explained with Examples (learnitguide.net)
[Kubernetes] 6. 쿠버네티스 Service란? (NodePort, nginx 실습) (tistory.com)
[Kubernetes] Expose App (Service 생성) (chhanz.github.io)
'[Kubernetes]' 카테고리의 다른 글
sample devops end to end project v1- devops project | ci/cd declarative pipeline using devops tools (0) | 2023.07.22 |
---|---|
[마이크로 서비스] 사용하지 않는 경우!! (0) | 2023.07.11 |
[k8s] Deployments란 무엇인가? & Update 방식 (0) | 2022.11.23 |
[k8s] YAML 기본 문법 및 k8s yaml 작성방법 (0) | 2022.11.23 |
[k8s] Helm을 통해 Prometheus, Grafana 적용하기 (0) | 2022.11.22 |
[k8s] 파드란 무엇인가, 파드 만들기(명령어로 생성 및 yaml로 생성) (0) | 2022.11.21 |
[K8s] 쿠버네티스란 무엇인가? (0) | 2022.11.16 |
[k8s] 프로메테우스란 무엇인가? (개념 및 아키텍쳐) (0) | 2022.11.15 |
댓글