CKA 공부 39일차
in Devops on Kubernetes
Ingress
새로운 쇼핑몰 서비스
www.store.com
를 개발한다고 해보자.우리가 만든 애플리케이션을 외부에 노출하기 위해 우리는 어떻게 할 수 있을까?
NodePort 타입의 서비스로 애플리케이션을 노출하면,
High Numbered Port
( 3만번대 )를 사용해야한다.DNS 서버에 node-ip를 도메인으로 연결할 수 있지만, 유저는 매 접속 시 이 포트를 기입해야만 서비스에 접근이 가능하다. (e.q. www.store.com:30800)
이러한 포트 번호를 대체하기 위해 proxy-server를 추가로 만들어서 외부 요청을 프록시 서버로 받고 프록시 서버가 해당 요청을 node-ip:30800으로 넘겨줄 수 있다.
만약 Google Cloud Platform과 같은 퍼블릭 클라우드 서비스를 이용한다면
LoadBalancer
타입의 서비스를 이용할 수 있다.GCP가
LoadBalancer
타입의 서비스를 생성하면 자동으로Load-Balancer
를 생성하여 연결해준다. 이 로드 밸런서는 외부 IP를 가지며, 80포트로 요청을 받아준다.그러면 유저는 이 애플리케이션에 도메인으로 접근이 가능하게 된다.
시간이 지나서 이 서비스가 성장하였고, 비디오 스트리밍 서비스를 한다고 가정해보자.
기존 쇼핑몰은 www.store.com/wear, 새로운 스트리밍 서비스는 www.store.com/video로 접근하게 한다고 해보자.
새로운 애플리케이션을 배포하고, 역시나 서비스를 연결해줄 것이며 로드밸런서 타입으로 생성한다고 해보자
퍼블릭 클라우드에서 이런 로드밸런서가 생성될 때 마다 우리는 돈을 내야만하고, 이러한 여러개의 로드밸런서를 갖는 것은 반대로 클라우드 운영에 독이 된다.
이렇게 로드밸런서가 여러 개가 되면 우리는 트래픽을 분리해서 받기 위해 또 다시 로드밸런서나, 프록시 서버가 해당 로드밸런서로 리다이렉트하게 해야한다. (복잡하다)
매 번 새로운 서비스가 생성될 때 마다 로드밸런서를 다시 설정해줘야만한다.
게다가 HTTPS를 적용하려고 하면 이걸 설정하는 것도 머리가 아프다.
이는 분명히 다른 레벨이며 개발자는 하나만 관리하고 싶을 것이고, 하나만 유지보수하고 싶을 것이다.
새로운 서비스에 방화벽 룰을 설정한다던지, HTTPS를 적용한다던지, 새로운 서비스가 추가되면 설정을 다시 해야한다던지 하는 비용은 꽤 비싸다. (개발자의 시간은 소중하니깐)
이를 위해 k8s에서는
ingress
를 개발했다!
ingress 등장
ingress는 유저가 애플리케이션에 접근하기 위한 여러 가지 설정들을 손쉽고, 유지보수하기 쉽게 도와주는 오브젝트이다.
ingress 7 Layer 로드 밸런서이며 쿠버네티스 근본 오브젝트이다.
인그레스 역시 서비스와 마찬가지로 NodePort나 클라우드 LoadBalancer 타입을 설정할 수 있다.
인그레스는 nginx, HAPROXYH trakefik과 같은 인그레스 컨트롤러를 갖는다.
그리고 인그레스 리소스는 인그레스 설정파일을 의미한다.
인그레스 컨트롤러는 디폴트로 배포되지 않으며 우리가 직접 배포해주어야한다.
ingress controller
인그레스 컨트롤러 솔루션은 여러가지가 있는데, 가장 많이 쓰는 것은
nginx
와Istio
이다.인그레스 컨트롤러는 단순한 nginx 서버나 로드밸런서가 아니다.
인그레스 컨틀로러는 k8s 클러스터를 감시하기 위한 부가적인 기능들을 갖고 있다.
인그레스의 기본적인 설정들은 ConfigMap에서 관리가 가능하다.
또한 인그레스 컨트롤러를 위한 서비스를 생성해야한다.
그리고 ingress controller는 단순한 nginx, 로드밸런서 기능을 넘어 부가적인 기능들을 제공해주는데,
Service Account
를 활용한Role
관리이다.
ingress resource
인그레스에 특정 Rule을 설정하고 설정들을 적용 하기 위한 리소스에 대해서 공부해보자.
트래픽이 들어왔을 때 Path에 따라 어떤 서비스로 보낼 것인지를 정해야한다.
이를 위해서는 k8s yaml 파일에 정의를 해야한다.
여기에 서비스 명과 포트번호를 명시함으로써 유저의 트래픽이 특정 서비스(애플리케이션)에 도달할 수 있게 인그레스가 이를 조절한다.