일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- redis-cli
- gitlab 잔디옮기기
- 잔디이전
- 패스트캠퍼스후기
- ERR unknown command 'JSON.GET'
- Window redis-cli
- vscode
- 환급챌린지
- 패스트캠퍼스
- 캐시백챌린지
- elastic cache
- Avast 구독취소
- Redis
- 패캠챌린지
- redis cli
- AWS S3 계정이동
- 직장인인강
- RedisJSON
- aws
- putty Inactive
- nodemailer
- 한 번에 끝내는 AWS 인프라 구축과 DevOps 운영 초격차 패키지 Online
- AWS S3 migration
- 직장인자기계발
- ERR unknown command 'JSON.SET'
- 캐시백
- aws s3
- Avast Security
- AWS S3 버킷 삭제
- Ngrinder Docker
- Today
- Total
Developing
패스트캠퍼스 캐시백 챌린지 62일차 본문
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을 통해 해당 서비스로 접근을 할 수 있다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
* 본 포스팅은 패스트캠퍼스 환급 챌린지를 위해 작성되었습니다.
'Devops > Fastcampus 캐시백 챌린지' 카테고리의 다른 글
패스트캠퍼스 캐시백 챌린지 64일차 (0) | 2022.06.20 |
---|---|
패스트캠퍼스 캐시백 챌린지 63일차 (0) | 2022.06.19 |
패스트캠퍼스 캐시백 챌린지 61일차 (0) | 2022.06.17 |
패스트캠퍼스 캐시백 챌린지 60일차 (0) | 2022.06.16 |
패스트캠퍼스 캐시백 챌린지 59일차 (0) | 2022.06.15 |