5. EKS Service

Update : 2022-10-27 / 1H 30min

Kubernetest에서 서비스를 제공하기 위해 ClusterIP, NodePort, LoadBlancer, Ingress 등의 서비스를 제공합니다.이러한 서비스들을 이해하기 위해 직접 랩을 통해 구성해 봅니다.

Cluster IP 기반 배포

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에 등록합니다.

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

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

container에서 IP와 DNS주소를 확인해 봅니다. VPC CIDR 주소와 Core DNS Service를 확인할 수 있습니다.

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을 통해서 확인해 봅니다.

k9s에서 Container 1개에 접속해서, Service Record로 접속해 봅니다.

CLB Loadbalancer 서비스 기반 구성

4.CLB 기반 ServiceType

Service Type 필드를 LoadBalancer로 설정하여 프로브저닝합니다. Cloud Service Provider의 기본 로드밸런서 타입을 사용하게 되며, AWS의 경우에는 CLB를 사용합니다. CLB는 내부 또는 외부 로드밸런서로 지정이 가능합니다.

5. CLB Service Type 트래픽 흐름

Traffic 흐름은 다음과 같습니다.

  • 외부 사용자는 CLB DNS A Record:Port로 접근

  • CLB는 NodePort로 LB 처리 (NodePort는 임의로 할당 됩니다.)

  • NodePort는 ClusterIP로 Forwarding되고 IPTable에 의해 분산 처리 됩니다.

6. CLB Service 시험

CLB Loadbalance Service Type 을 시험하기 위해 아래와 같이 namespace와 pod,service를 배포합니다.

정상적으로 배포되었는지 아래 Command로 확인합니다

다음과 같은 결과를 얻을 수 있습니다

아래와 같이 구성됩니다 . nodeport는 별도의 지정이 없으면 생성할때 자동으로 지정됩니다.

아래와 같이 배포된 pod에 접속을 편리하게 하기 위해 Cloud9 IDE terminal Shell에 등록 합니다. (Option)

ClbTestPod01에 접속해서 아래와 같이 확인해 봅니다. K9s에서 접속해도 됩니다.

Cloud9 IDE Terminal에서 CLB External IP:8080 으로 접속합니다.

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

CLB에서는 아래와 같은 다양한 Annotation을 추가하여 CLB의 속성 또는 AWS 자원을 연결해서 사용할 수 있습니다

7.CLB Application 배포

CLB 로드밸런서를 사용하는 간단한 게임 앱을 배포해 봅니다.

정상적으로 배포되었는지 확인해 봅니다.

아래와 같이 배포된 것을 확인 할 수 있습니다.

실제 deployment에 사용된 YAML 을 확인해 봅니다.

아래 명령을 통해서 게임앱 URL을 확인하고에 브라우저를 통해 접속해 봅니다.

3~4분 뒤에 웹 브라우저를 통해 위 명령에서 실행된 URL을 접속하면 , CLB를 통해서 아래와 같이 게임이 실행됩니다.

  • "s" - 게임시작

  • 방향키로 각 스테이지 이동

  • "s" - 점프

  • 방향키 - 마리오 이동

8. Loadbalancer 확인.

이제 서비스 타입을 확인하기 위해서 EC2 대시보드에서 Loadbalancer를 확인합니다.

NLB Loadbalancer 서비스 기반 구성

9. NLB 기반 Service Type

Service Type 필드를 LoadBalancer로 설정하여 프로브저닝합니다. CLB와 다르게 반드시 annotation을 통해 NLB를 지정해야 합니다. NLB도 내부 또는 외부 로드밸런서로 지정이 가능합니다. 또한 NLB는 외부의 IP를 PoD까지 그대로 전달 할 수 있습니다

  • NLB Annotation

10.NLB Service Type 트래픽 흐름

Traffic 흐름은 다음과 같습니다.

  • 외부 사용자는 NLB DNS A Record:Port로 접근합니다.

  • NLB는 NodePort로 LB 처리 (NodePort는 임의로 할당 됩니다.)

  • NodePort는 ClusterIP로 Forwarding되고 IPTable에 의해 분산 처리 됩니다.

11. NLB Service 시험

NLB Loadbalance Service Type 을 시험하기 위해 아래와 같이 namespace와 pod,service를 배포합니다.

정상적으로 배포되었는지 아래 Command로 확인합니다.

다음과 같은 결과를 얻을 수 있습니다.

아래와 같이 구성됩니다 . nodeport는 별도의 지정이 없으면 생성할때 자동으로 지정됩니다.

아래와 같이 배포된 pod에 접속을 편리하게 하기 위해 Cloud9 IDE terminal Shell에 등록 합니다.

앞서 생성된 NLB 주소로 접속을 시도해 봅니다.Cloud9 IDE Terminal에서 NLB External IP:8080 으로 접속합니다.

NlbTestPod01에 접속해서 아래와 같이 확인해 봅니다.

12.NLB Application 배포

NLB 로드밸런서를 사용하는 간단한 게임 앱을 배포해 봅니다.

정상적으로 배포되었는지 확인해 봅니다.

아래와 같이 배포된 것을 확인 할 수 있습니다.

실제 deployment에 사용된 YAML 을 확인해 봅니다.

아래 명령을 통해서 게임앱 URL을 확인하고에 브라우저를 통해 접속해 봅니다.

브라우저를 통해 접속하면 아래와 같이 게임이 실행됩니다.

NLB는 배포시간이 5분 정도 소요 됩니다.

Last updated