Cluster IP 기반 배포

Update: 2022-06-01 / 30min

개요

Kubernetes에서는 Pod의 전면에서 Pod로 들어오는 트래픽을 전달하는 service 자원이 제공됩니다. 해당 Service 자원은 Pod의 IP 주소와 관계 없이 Pod의 Label Selector를 보고 트래픽을 전달하는 역할을 담당합니다.

Service의 종류는 아래와 같습니다.

  • Cluster IP - Service 자원의 기본 타입이며 Kubernetes 내부에서만 접근 가능

  • NodePort - 로컬 호스트의 특정 포트를 Serivce의 특정 포트와 연결

  • Loadbalancer - AWS CLB, NLB 등과 같은 로드밸런서가 노드 전면에서 처리하는 방식

아래 그림에서 처럼 Service의 기본은 CLUSTER-IP 방식입니다. 외부로 노출되지 않으며, Service에는 Pod Container의 포트를 기술해 줍니다.

CoreDNS와 Service

1.CoreDNS와 Service 역할 확인을 위한 App배포

아래와 같이 새로운 Namespace와 Pod를 생성합니다.

정상적으로 Pods가 생성되었는지 확인합니다.

(Option) shell 연결을 편리하게 접속하기 위해 아래와 같이 cloud9 terminal 의 bash profile에 등록합니다.

K9s로 접속하거나 bash profile에 등록한 컨테이너들로 각각의 Pod로 접속해 봅니다.

앞서 설치한 K9s에서 container에 접속해 봅니다.

ip a 와 /etc/resolve.conf를 조회해 봅니다.

다음과 같이 출력됩니다.

K9s로 접속하거나 bash profile에 등록한 다른 Pod에 더 연결해 보고 동일하게 비교해 봅니다.

AWS VPC CNI 구성은 Pod 생성할 때 마다 ENI를 생성하므로, Pod간 IP 직접 통신이 가능합니다.

ClusterIP Type

2.ClusterType 소개

Kubernetes 에서 Service는 Pod들이 실행 중인 애플리케이션을 네트워크 서비스로 노출하는 추상적인 방법입니다. 다양한 Service 들 중에서 ClusterIP는 Service - Type의 기본 값입니다.

ClusterIP 타입은 내부에서 사용하도록 노출되며 , 외부에 노출되지 않습니다.

  • ClusterIP 타입 종류 - UserSpace Proxy 모드 , iptables Proxy 모드, IPVS Proxy 모드.

3.ClusterIP Server 시험

아래와 같이 ClusterIP 서비스를 배포합니다.

ClusterIP Service에 대한 yaml 파일은 아래와 같습니다.

ClusterIP Service가 정상적으로 배포되었는지 확인합니다.

아래와 같이 출력됩니다.

ClusterIP service의 A Record는

"ClusterIP Metadata.name"."namesapce".svc.cluster.local. 의 형식을 사용하게 됩니다.

ClusterTest01 로 접속후, "cluster-test-01-svc" ClusterIP Service A Record를 확인합니다. curl을 통해서 Loadbalancing이 정상적으로 이뤄지는지 curl을 통해서 확인해 봅니다.

iptable에 설정된 NAT Table, Loadbalancing 구성을 확인해 봅니다.

Last updated

Was this helpful?