CKA 공부 39일차

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

  • 인그레스 컨트롤러 솔루션은 여러가지가 있는데, 가장 많이 쓰는 것은 nginxIstio이다.

  • 인그레스 컨트롤러는 단순한 nginx 서버나 로드밸런서가 아니다.

  • 인그레스 컨틀로러는 k8s 클러스터를 감시하기 위한 부가적인 기능들을 갖고 있다.

  • 인그레스의 기본적인 설정들은 ConfigMap에서 관리가 가능하다.

  • 또한 인그레스 컨트롤러를 위한 서비스를 생성해야한다.

  • 그리고 ingress controller는 단순한 nginx, 로드밸런서 기능을 넘어 부가적인 기능들을 제공해주는데, Service Account를 활용한 Role 관리이다.

ingress resource

  • 인그레스에 특정 Rule을 설정하고 설정들을 적용 하기 위한 리소스에 대해서 공부해보자.

  • 트래픽이 들어왔을 때 Path에 따라 어떤 서비스로 보낼 것인지를 정해야한다.

  • 이를 위해서는 k8s yaml 파일에 정의를 해야한다.

  • 여기에 서비스 명과 포트번호를 명시함으로써 유저의 트래픽이 특정 서비스(애플리케이션)에 도달할 수 있게 인그레스가 이를 조절한다.





© 2022. by minkuk

Powered by minkuk