Developing

패스트캠퍼스 캐시백 챌린지 62일차 본문

Devops/Fastcampus 캐시백 챌린지

패스트캠퍼스 캐시백 챌린지 62일차

DEV_BLOG 2022. 6. 18. 15:28

수강 인증샷

 

Service API Resource와 관련된 내용의 클립을 수강하는식으로 챌린지를 진행하였다. 이전에 devops관련 내용을 보다보면 항상 service가 언급되었고 혼란스러웠었는데, 이제 조금은 알 수 있을 것 같다. 서비스의 여러 종류들과 특성들에 대해서 알 수 있었다. 다음 포스팅으로는 configmap API Resource와 관련된 내용을 포스팅할 예정이다.

 

 

 

 

서비스

  • 여러 파드에 대해 클러스터 내에서 사용 가능한 고유 도메인 부여
  • 여러 파드에 대한 요청을 분산하는 로드 밸런서(L4: IP/Port 기반) 기능 수행
  • 파드의 IP는 항상 변할 수 있음에 유의
  • 일반적으로 ClusterIP 타입의 Service와 함께 Ingress를 사용하여 외부 트래픽을 처리한다.

 

서비스의 종류

  • ClusterIP(기본값)

⇒ 외부 트래픽 받는 능력은 없음

⇒ 클러스터 내부에서 서비스를 관리하는 Pod들에 노드를 분산시키는 역할 수행

 

  • NodePort

⇒ 외부로부터의 트래픽 주입이 가능

⇒ 클러스터IP의 모든 기능 사용 가능

⇒ 클러스터를 구성하는 각각의 노드에 동일한 포트를 열고 통해서 트래픽을 받으며, 그 트래픽을 클러스터 IP를 통해서 다시 분산하는 방식

 

  • LoadBalancer

⇒ 클러스터IP의 모든 기능 사용 가능

⇒ 외부에 존재하는 로드 밸런서를 동적으로 관리

⇒ Cloud Provider와 함께 사용하여 외부 트래픽을 받는 역할을 함

 

  • ExternalName

⇒ 외부로 가는 트래픽을 변환하기 위한 용도

 

ClusterIP와 서비스 디스커버리

  • ClusterIP

⇒ Service API 리소스의 가장 기본적인 타입

⇒ 쿠버네티스 클러스터는 Pod에 부여되는 Pod IP를 위한 CIDR 대역과 Service에 부여되는 Cluster IP CIDR 대역이 독립적으로 존재

⇒ Label Selector를 통해 서비스와 연결할 파드 목록 관리

⇒ Cluster IP로 들어오는 요청에 대하여 파드에 L4 레벨의 로드밸런싱

⇒ Cluster IP 뿐만아니라 내부 DNS를 통해 서비스 이름을 이용한 통신 가능

 

  • 서비스의 Cluster IP CIDR 대역 확인
kubectl cluster-info dump | grep -m 1 service-cluster-ip-range

ClusterIP 타입의 Service는 쿠버네티스 클러스터 내부 통신 목적으로만 사용 가능하다.

 

  • 서비스 네트워크 IP / Port 정보

spec.clusterIp:spec.ports[*].port

 

 

(실습링크는 하단의 링크에 해당한다.)

https://github.com/tedilabs/fastcampus-devops/tree/main/3-docker-kubernetes/9-k8s-service

 

clusterIP는 클러스터 내에서 통신이 가능하기에 노드에 들어간뒤에 접속시도가 가능한 것을 확인할 수 있다.

 

 

NordPort로 외부에 노출하기

  • NodePort

⇒ 모든 쿠버네티스 노드의 동일 포트를 개방하여 서비스에 접근하는 방식

⇒ NordPort는 ClusterIP 타입 서비스를 한 번 더 감싸서 만들어진 것

     - NodePort 서비스도 ClusterIP 사용 가능

     - NodePort로 들어온 요청은 실제로 ClusterIP로 전달되어 Pod로 포워딩

 

  • 서비스 네트워크 IP / Port 정보

<NodeIP>:spec.ports[*].nodePort

spec.clusterIp:spec.ports[*].port

⇒ Cluster IP와 마찬가지로 노출이 되어있는 상태에서 Node Ip의 Node Port에 한번 더 오픈한다.

 

 

port가 8080이고, nodeport가 32618인 것을 확인할 수 있다.

 

 

cluster 외부에서 트래픽을 노드 포트를 통해 받을 수 있게 되었다.

 

 

또한 마찬가지로 노드 내부에서 통신이 가능하다.

 

 

LoadBalancer로 클라우드 프로바이더의 로드밸런서 연동

  • LoadBalancer

⇒ 클라우드 프로바이더에서 제공하는 로드밸런서를 동적으로 생성하는 방식

⇒ LoadBalancer 타입 서비스는 NodePort 타입 서비스를 한 번 더 감싸서 만들어진 것

    - LoadBalancer 서비스도 ClusterIP 사용가능

    - LoadBalancer 서비스를 통해 만들어진 로드밸런서는 NodePort를 타겟 그룹으로 생성

    - NodePort로 들어온 요청은 실제로 ClusterIP로 전달되어 Pod로 포워딩

AWS / GCP 등과 같은 클라우드 환경이 아니라면 기본적으로는 해당 기능 이용이 불가

MetalL와 같은 기술 등을 사용하여 온프레미스 환경에서도 LoadBalancer 타입 사용 가능

  • 서비스 네트워크 IP /Port 정보

spec.loadBalancerIp:spec.ports[*].port

<NodeIP>:spec.ports[*].nodePort

spec.clusterIp:spec.ports[*].port

 

minikube에서는 loadbalancer 기능을 지원하지는 않는다. 따라서 type이 loadbalancer로 변경이 되었기는 하지만 pending 상태이다.

 

 

ExternalName으로 외부로 요청 전달

  • ExternalName

⇒ 서비스가 파드를 가리키는 것이 아닌 외부 도메인을 가리키도록 구성 가능

⇒ DNS의 CNAME 레코드와 동일한 역할 수행

⇒ 클러스터의 외부에 존재하는 레거시 시스템을 쿠버네티스로 마이그레이션하는 과정에 활용 가능

ExternalName 타입의 서비스는 앞서 다룬 세 서비스 타입과 비교해 많이 사용되지는 않는다.

 

 

external ip로 설정이 되어있음을 확인할 수 있다.

 

 

$ kubectl get service

NAME                       READY   STATUS    RESTARTS      AGE
test                       1/1     Running   0             48m

$ kubectl exec -it test bash
$ curl httpbin/get

 

지정해준 서비스 name을 통해 해당 서비스로 접근을 할 수 있다.

 

 

 

 

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지를 위해 작성되었습니다.