[CKA] 4주차 Day 4

강아람·2023년 3월 9일
0

CKA

목록 보기
16/22
post-thumbnail

Ingress

Local (kubernetes)

온라인 쇼핑몰을 가진 회사를 위해 Kubernetes에서 애플리케이션을 배포한다고 가정하자.



애플리케이션은 myonlinestore.com이라는 도메인으로 접속할 수 있고, 애플리케이션을 Docker Image로 빌드하여 Kubernetes 클러스터에 Deployment의 Pod로 배포한다.

애플리케이션에는 DB가 필요하므로 MySQL 데이터베이스를 Pod로 배포하고, mysql-service라는 ClusterIP 유형의 service를 생성하여 DB 파드가 애플리케이션 파드에 접근할 수 있도록 한다.




이제 외부에서 애플리케이션에 액세스할 수 있도록 NodePort 유형의 서비스를 만들고, 클러스터 노드의 port로 애플리케이션에 접속할 수 있게 한다.



사용자는 노드의 IP와 port 번호를 이용하여 응용프로그램에 접근할 수 있다.

트래픽이 증가하면 추가 트래픽 처리를 위해 pod의 replicas 수를 증가시키고 파드 간 트래픽을 분배한다.



그러나 사용자가 매번 IP 주소를 입력해야 하는 것은 불편함을 줄 수 있기 때문에 노드의 IP를 가리키도록 DNS 서버를 구성한다.

이제 사용자는 URL인 myonlinestore.com 및 38080번 포트를 사용해 애플리케이션에 접근할 수 있다.



이제 사용자가 포트 번호 없이도 서비스에 접근할 수 있도록 하고싶다.

그러나 서비스의 NodePort는 30000보다 큰 숫자의 포트만 할당할 수 있기 때문에 DNS 서버와 클러스터 사이에 proxy server와 같은 추가 계층이 필요하다.



80번 포트 요청을 NodePort 38080번 포트로 프록시하고 그런다음 DNS를 이 서버로 지정하면 url만으로 애플리케이션에 접근할 수 있다.



여기까지는 응용프로그램이 On-Premise 환경에 호스팅 된 경우이다.


공용 클라우드 환경에서는 어떻게 할 수 있을까?

이때는 NodePort 대신에 LoadBalancer 타입을 사용할 수 있다.

이렇게 하면 구글 클라우드 플랫폼에 이 서비스를 위한 네트워크 부하 분산기를 프로비저닝하도록 요청한다.

GCP가 자동으로 로드밸런서를 배포해준다. 로드밸런서에는 외부 IP가 있어서 이 IP를 사용자가 접속하는 곳으로 사용한다.



0개의 댓글