본문 바로가기

kubernetes(cka)

[Kubernetes, cka] 05. Service, Namespaces

* Service 란

pod가 외부와 통신할수 있도록 함.

내부 및 외부 통신 활성화: 애플리케이션 내외부의 다양한 컴포넌트 간 통신을 가능하게 한다.
애플리케이션 연결: 프론트엔드, 백엔드, 외부 데이터 소스 등 다양한 pod 그룹 간 연결을 담당한다.
마이크로서비스 간 느슨한 결합 제공: 서비스를 통해 마이크로서비스 아키텍처 내 컴포넌트들이 서로 독립적으로 운영될 수 있도록 지원한다.

 

* 서비스 유형

NodePort: 노드의 특정 포트를 pod로 포워딩하여 외부에서 접근 가능하게 한다.
ClusterIP: 클러스터 내부에서 서로 통신할 수 있도록 가상 IP를 생성한다.
LoadBalancer: 클라우드 제공자에서 제공하는 로드밸런서를 통해 애플리케이션에 대한 부하를 분산한다.

 


* Node port

포트 관련 용어

  • targetPort: 실제 웹 서버가 실행되는 pod의 포트.
  • port: 서비스 객체 내부의 포트.
  • nodePort: 외부에서 서비스에 접근하기 위해 사용하는 노드의 포트.
  • NodePort 유효 범위는 기본적으로 30000부터 32767 사이이다.

Pod 가 service 랑 묶이는 원리로는 selector에 해당되는 pod들이 묶임

 

pod 가 단일 노드에 있다고 가정하면

위와 같이 pod 와 연결되고

 

동일 selector pod가 여러 노드에 퍼져 있다고 가정하면

위와 같이 어떤 node ip에 연결해도 동일한 service에 연결되어서 pod에 알아서 balancing 되어 네트워크 연결됨.

 


* Cluster IP

목적 : 클러스터 내부에서 서로 다른 서비스간 통신 가능하게 하도록 함에 있음. 예를들어, frontend, backend, db 사이에서 단일 서비스를 두고 통신. 

필요성 : cluster내에서 pod 의 ip는 계속 바뀔수 있기 때문에 cluster ip를 사용해서 고정된 접근 포인트를 통해 통신

이를 통해 다른 서비스 확장이나 변경이 한 서비스의 통신에 영향을 주지않는 마이크로 서비스라 할수 있음


 

* Load Balancer

  • 목적: 클라우드 제공 업체의 네이티브 로드 밸런서를 사용하여 외부 트래픽을 클러스터 내부의 애플리케이션으로 라우팅 -> 외부 사용자에게 단일 URL을 제공해서 접근성을 개선하고 외부 접근은 효율적으로 관리 할수 있음
  • 사용 사례: 외부 사용자가 단일 URL을 통해 애플리케이션에 접근할 수 있도록
  • 특징: 지원되는 클라우드 플랫폼(GCP, AWS, Azure 등)에서 사용 가능하며, 클라우드 제공 업체의 로드 밸런서를 자동으로 설정
  • 설정: 서비스 정의 파일에 type: LoadBalancer로 설정. 지원되지 않는 환경에서는 NodePort와 같은 효과

* Namespaces

- Namespace는 Kubernetes에서 리소스를 분리하고 관리하기 위한 가상의 공간

- 동일한 물리 클러스터 내에서 여러 사용 환경(예: 개발, 테스트, 운영)을 격리하여 사용할 수 있게 해줌
- 기본적으로 default, kube-system, kube-public 등의 네임스페이스가 자동으로 생성된다.

 

네임스페이스의 사용 이유
1. 리소스 관리의 효율성: 서로 다른 프로젝트, 팀 또는 고객 간의 리소스를 격리하여 관리할 수 있다.
2. 접근 제어 및 보안: 네임스페이스별로 사용자 권한을 제어하여 보안을 강화할 수 있다.
3. 리소스 할당: 네임스페이스별로 리소스 할당량(Quota)을 설정하여 리소스 사용을 제한할 수 있다.

 

네임스페이스와 DNS
네임스페이스 내에서 서비스는 간단한 이름(예: dbservice)을 사용하여 서로 통신할 수 있음
다른 네임스페이스의 서비스에 접근할 때는 전체 DNS 이름(예: dbservice.dev.svc.cluster.local)을 사용해야 한다.

'kubernetes(cka)' 카테고리의 다른 글

[Kubernetes, cka] 07. DaemonSets  (0) 2024.04.01
[Kubernetes, cka] 06. Manual Scheduling  (0) 2024.04.01
[Kubernetes, cka] 04. Deployment  (0) 2024.03.24
[Kubernetes, cka] 03. Replica set  (0) 2024.03.24
[Kubernetes, cka] 02. Pod  (2) 2024.03.17