▪︎ Service(서비스)란?
- 파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법
▪ ServiceTypes(서비스 퍼블리싱)
- ClusterIP : 서비스를 클러스터-내부 IP에 노출시킨다. (ServiceTypes → default value)
- NodePort : 고정 포트(NodePort)로 각 노드의 IP에 서비스를 노출시킨다.
- LoadBalancer : 클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다.
- ExternalName : 해당 DNS Name에 대한 CNAME 레코드 반환
▪ ClusterIP
- 클러스터 내부의 파드가 클러스터 내부의 다른 파드에 통신할 수 있는 서비스 제공
- 외부에서의 접근 불가능
- 모든 노드에 iptables rule 설정
- 파드에서 접속 시 해당 노드에 존재하는 iptables rule에 의해서 분산 접속
- Rule 생성
- 서비스(Type : ClusterIP) 생성→ API server → kube-proxy → iptables
- Traffic (내부→내부)
- Source : Source Resource 보존
- Destination : DNAT
• sessionAffinity: ClientIP (Option)
- 클라이언트가 접속하고자 하는 목적지(파드)에 고정적인 접속
• ClusterIP 결론
- 헬스 체크 기능 x
- 외부에서 접속 x
→ → - 서비스 디버깅 용도
- 내부 트래픽 허용, 내부 대시보드 표시 등에 대한 목적
▪ NodePort
- 외부 트래픽을 직접 서비스로 가져오는 원시적인 방법
- 모든 노드에서 특정 포트를 열고 있으며 특정 포트로 전송되는 모든 트래픽이 서비스로 전달
💡 특정 포트(nodePort) : 외부 사용자가 애플리케이션에 접근하기 위한 포트번호
- 모든 노드에 iptables rule 설정
- 파드에서 접속 시 해당 노드에 존재하는 iptables rule에 의해서 분산 접속
- Traffic (외부→내부)
- Source : (Node-IP 로) SNAT
- Destination : DNAT
• externalTrafficPolicy: Local (Option)
- NodePort로 접속 시 해당 노드에 배치된 파드로만 고정적인 접속
- SNAT 되지 않아 Source IP(External Client IP) 보존
• NodePort 결론
- 헬스 체크 기능 x
- 내부 노드 자원 노출로 보안 취약
- 하나의 포트에 하나의 서비스만 지원
- 노드/VM IP 주소 변경시 고려
→ → - 일시적인 서비스 / 적은 비용이 필요한 서비스 목적
- 데모 앱 / 임시 앱 서비스 목적
▪ LoadBalancer
- 클러스터의 서비스를 클라우드 제공자 측(AWS, Azure, Openstack..)의 로드밸런서로 노출
- 외부의 로드 밸런서를 통해 들어온 트래픽이 서비스의 설정값을 따라 해당되는 파드들로 연결
- 로드밸런서가 부하분산하여 파드가 존재하는 노드들에게 전달
- 로드밸런서의 헬스 체크 기능으로 문제가 있는 노드에 외부 요청 트래픽을 전달하지 않는다.
- Traffic (외부→로드밸런서→내부)
- Source : Source Resource 보존 (externalTrafficPolicy: local이므로..)
- Destination : DNAT + DNAT
• LoadBalancer 결론
- 제일 권장하는 서비스 노출 타입
- HTTP, TCP, UDP 등과 같은 거의 모든 종류의 트래픽을 전송 가능
- 외부에 노출되는 것은 로드밸런서 자원 뿐이라 보안성 향상
- 노출되는 서비스당 LoadBalancer에 대한 비용에 대한 부담
Ref.
Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what?
'Kubernetes' 카테고리의 다른 글
컨테이너에서 JVM은 왜 메모리 먹는 하마였을까? (1) | 2022.11.10 |
---|---|
리소스의 메모리와 CPU 자원 관리 (0) | 2022.11.10 |
Pod의 우선 순위 (0) | 2022.11.10 |
Pod 안전하게 생성/배포 및 QoS 정책 설정 (0) | 2022.11.10 |
K8S Service Network - 실습 (0) | 2022.11.10 |