본문 바로가기
INFRA/DevOps

[K8S] Service

by BTC_하동녹차 2023. 8. 1.

베하~! BTC_녹차공원 팀의 하동녹차 입니다.

Kubernetes Service에 대해 알아보겠습니다!

 

쿠버네티스 서비스(Service)

 

쿠버네티스 서비스(Service)는 쿠버네티스 클러스터 내에서 실행 중인 파드에 접근하기 위한 추상화된 리소스입니다. 

파드는 유동적으로 생성되고 삭제되며 IP 주소가 변경될 수 있기 때문에, 직접 파드의 IP 주소로 접근하는 것은 번거로운 작업입니다. 

서비스는 이러한 문제를 해결하여 파드에 고정된 가상 IP 주소를 제공하고, 그 IP 주소를 통해 파드에 접근할 수 있도록 합니다. 이를 통해 클라이언트나 다른 파드가 서비스를 통해 파드와 통신할 수 있습니다.

 

 

 

 

 

쿠버네티스 서비스(Service) 기능과 특징


1. 클러스터 내부 서비스: 기본적으로 서비스는 클러스터 내부에서만 접근할 수 있도록 합니다. 즉, 같은 쿠버네티스 클러스터에 속한 다른 파드들이 해당 서비스를 사용하여 통신할 수 있습니다.

2.서비스는 다양한 유형이 있습니다.
ClusterIP: 기본적인 서비스 유형으로, 클러스터 내부에 가상 IP 주소를 할당합니다.
NodePort: 외부에서 접근이 가능한 포트를 노드에 열고, 해당 포트를 통해 서비스에 접근할 수 있도록 합니다.
LoadBalancer: 클라우드 제공업체에서 제공하는 로드 밸런서를 이용하여 외부 트래픽을 서비스로 전달합니다.
ExternalName: 외부 서비스를 쿠버네티스 내부에서 CNAME으로 사용할 수 있도록 합니다.


3.서비스 디스커버리(Service Discovery): 서비스를 생성하면 해당 서비스에 연결된 파드들의 IP 주소와 포트 정보를 DNS(Domain Name System) 서버에 등록합니다. 이를 통해 서비스를 사용하는 클라이언트나 다른 파드가 DNS 이름을 통해 서비스에 접근할 수 있습니다.

4.로드 밸런싱: 여러 개의 파드가 동일한 서비스를 제공하는 경우, 서비스는 로드 밸런싱을 수행하여 트래픽을 각각의 파드에 균등하게 분배합니다. 이를 통해 서비스의 안정성과 성능을 향상시킵니다.

5.서비스 부하 분산(Service Load Balancing): 서비스는 같은 서비스명과 선택기준(Selector)에 맞는 파드들을 그룹화하여 파드들을 대상으로 하는 L4 (Transport Layer) 로드 밸런싱을 수행합니다.

6.서비스 부하 분배(Service Proxy): 각 노드에 kube-proxy가 실행되어, 서비스의 가상 IP 주소로 오는 트래픽을 실제 파드의 IP 주소로 포워딩합니다.

쿠버네티스 서비스는 마이크로서비스 아키텍처와 같이 여러 개의 컨테이너로 구성된 애플리케이션을 관리하고 효율적으로 서비스하며, 애플리케이션의 유지 보수 및 확장성을 쉽게 처리하는 데 중요한 역할을 수행합니다.

 

 

 

 

 

Service 실습

실습 사이트 주소 입니다.

https://killercoda.com/

 

Killercoda Interactive Environments

Learn DevOps Linux Kubernetes CKS CKA CKAD Git Cassandra etc | Katacoda compatible

Service 를 사용하는 간단한 실습을 해보겠습니다.


우선 front-web 이라는 이름의 Deployment 를 생성하고,

해당 deployment 는 nginx 이미지를 사용하여 실행 시켜줍니다.

 

deployment 가 잘 생성 되었는지 확인 합니다.

 

front-web 이라는 이름의 디플로이먼트(Deployment)의 설정을 수정 합니다.
포트 80으로 들어오는 HTTP 트래픽을 처리하도록 만들어 보겠습니다.

 

front-web 이름의 디플로이먼트(Deployment)를 NodePort 타입의 서비스로 노출하며,

포트 80으로 들어오는 요청을 처리하는 서비스를 생성하는 dongha-svc.yaml 파일로 생성 해보겠습니다.

 

yaml 파일이 생성 되었으면,

이제 yaml 파일에 name: http 를 추가 해줍니다

 

추가가 되었으면, 이제 서비스를 생성해보겠습니다.

이렇게 구성을 하게되면 서비스를 완성 시킬 수 있습니다.

 

 

 

이번 Service 실습을 통해 새로운 서비스를 구성하여, 각각의 파드(Pod)도 노드의 NodePort를 통해 노출하도록 설정하여. 즉, 클러스터 내 각 노드들이 해당 파드에 직접 접근할 수 있도록 하는 실습을 진행 해보았는데요.

1. front-web 디플로이먼트를 구성하고,

2. nginx 컨테이너의 80번 포트를 노출하는 http라는 이름의 포트를 추가
3. dongha-svc 라는 이름의 새로운 서비스를 생성하고, 이 서비스는 http 포트를 노출

이렇게 설정하면,  front-web 디플로이먼트가 80번 포트를 사용하는 http 포트를 추가하고,

해당 포트를 dongha-svc라는 이름의 서비스로 노출시킵니다.

또한, 노드들이 파드에 직접 접근할 수 있는 NodePort를 설정하여 특정 노드의 IP 주소와 포트로 해당 파드에 접근할 수 있게 됩니다.

 

 

 

이번주는 Kubernetes Service 에 대해 알아보았습니다.

다음번에는 더욱 재밌는 주제로 찾아오겠습니다.

이상 BTC_녹차공원 팀이였습니다!

베빠~!

'INFRA > DevOps' 카테고리의 다른 글

[K8S] Ingress  (0) 2023.08.19
[DevOps] CI/CD 개념 및 도구 설명  (0) 2023.08.18
[K8S] NetworkPolicy  (0) 2023.08.01
[K8S] Node Upgrade  (0) 2023.07.20
[K8S] Node Schedule  (0) 2023.07.06

댓글