-
Kubernetes 인그레스 요청 흐름DevOps/Kubernetes 2021. 7. 19. 08:36
Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장 및 운영을 자동화하는 오픈소스 플랫폼이다. 그중 Kubernetes 인그레스 요청 흐름에 대해 알아보자. 인그레스는 클러스터 외부에서 내부 서비스로의 HTTP 및 HTTPS 경로를 제공하는 역할을 한다. 이를 통해 도메인 기반의 라우팅이 가능해진다.
1. 요청 시작
사용자가 웹 브라우저나 애플리케이션을 통해 인그레스 주소로 URL을 요청한다. 예를 들어, http://myapp.example.com에 접근하는 경우를 가정해보자. 사용자가 입력한 URL 요청은 인터넷을 통해 Kubernetes 클러스터로 전달된다.
2. 인그레스 컨트롤러
요청은 먼저 Kubernetes 클러스터에 배포된 인그레스 컨트롤러로 전달된다. 인그레스 컨트롤러는 인그레스 리소스를 관리하고 클러스터 외부에서 들어오는 HTTP/HTTPS 트래픽을 라우팅하는 역할을 한다. 대표적인 인그레스 컨트롤러로는 Nginx 등이 있다.
3. 인그레스 리소스
인그레스 컨트롤러는 클러스터 내부에 정의된 인그레스 리소스를 확인한다. 인그레스 리소스는 특정 호스트와 경로에 대한 라우팅 규칙을 정의한 Kubernetes 오브젝트이다. 예를 들어, myapp.example.com에 대한 요청을 특정 서비스로 라우팅하는 규칙을 정의할 수 있다.
4. 서비스
인그레스 리소스에서 정의된 규칙에 따라 요청은 해당 서비스로 라우팅된다. 서비스는 Kubernetes 내에서 포드(pod) 집합에 대한 접근을 제공하는 논리적 집합체이다. 이는 클러스터 내의 동적 IP 주소를 가진 포드들이 안정적인 네트워크 주소로 접근 가능하도록 한다.
5. 포드
마지막으로 서비스는 요청을 실제 애플리케이션이 실행되는 포드로 전달한다. 포드는 Kubernetes에서 가장 작은 배포 단위로, 하나 이상의 컨테이너를 포함하고 있다. 포드는 요청을 처리하고 응답을 반환한다.
인그레스의 종류와 차이점
로드밸런서 타입 인그레스
로드밸런서 타입 인그레스는 클라우드 제공자의 로드밸런서를 사용하여 외부 트래픽을 클러스터로 라우팅한다. 이는 공인 IP 주소를 할당받아 외부 접근이 용이하다. 대표적인 사용 사례로는 공개 웹사이트나 API 서비스가 있다.
노드포트 타입 인그레스
노드포트 타입 인그레스는 클러스터의 각 노드에 포트를 열어 외부 트래픽을 받아들이고 이를 인그레스 컨트롤러로 전달한다. 이는 공인 IP 주소가 아니라 각 노드의 IP 주소와 포트를 알아야 접근이 가능하다. 주로 특정 내부 네트워크에서만 접근 가능한 경우에 사용된다.
접근성 문제
인그레스를 생성해도 바로 접근이 가능하지 않을 수 있는 이유는 다음과 같다:
- DNS 설정: 인그레스 주소를 DNS에 등록해야 한다. 이를 통해 URL이 올바른 IP 주소로 해석된다.
- 네트워크 정책: 클러스터나 네트워크 설정에 따라 특정 IP나 네트워크에서의 접근이 제한될 수 있다.
- SSL/TLS 설정: 인그레스 설정 시 SSL/TLS 인증서를 사용하여 HTTPS를 설정해야 하는 경우가 있다.
- 인그레스 컨트롤러 설정: 인그레스 컨트롤러의 설정 오류나 리소스 배포 문제로 인해 접근이 불가능할 수 있다.
VIP(가상 IP)와 인그레스
인그레스 외부 IP를 VIP로 설정하는 경우도 있다. VIP는 고정된 IP 주소로, 로드밸런싱을 할 때 유동 IP 대신 사용할 수 있다. 이를 통해 여러 서비스나 애플리케이션이 동일한 IP 주소를 사용하면서 내부적으로는 로드밸런싱과 트래픽 관리가 가능하다.
VIP를 사용하는 방법
- 메탈로 LB(MetalLB):
- 메탈로 LB는 Kubernetes 클러스터에서 VIP를 제공하기 위해 사용하는 오픈소스 로드밸런서이다.
- 클러스터의 노드 중 일부 또는 전부가 VIP를 사용하여 외부 트래픽을 수신할 수 있게 설정할 수 있다.
- 클라우드 제공자 LB:
- 일부 클라우드 제공자는 VIP를 지원하는 로드밸런서 서비스를 제공한다.
- 예를 들어, AWS의 Elastic IP, GCP의 Static External IP 등이 있다.
Kubernetes 인그레스는 외부 트래픽을 클러스터 내부의 서비스로 효율적으로 라우팅하는 중요한 역할을 한다. 인그레스 컨트롤러와 리소스를 적절히 설정함으로써 외부 요청이 내부 애플리케이션 파드까지 안전하게 전달될 수 있다. 이를 통해 외부에서 접근 가능한 웹 애플리케이션을 쉽게 배포하고 관리할 수 있다.
출처
'DevOps > Kubernetes' 카테고리의 다른 글
Deployment의 파드가 서비스의 대상이 되려면 (0) 2022.03.30 clusterRole, clusterRoleBinding (0) 2021.10.29 kubernetes Tutorials 4. 서비스를 사용해서 App을 공개하기 (0) 2020.05.06 kubernetes Tutorials 3. Pods 와 Nodes (0) 2020.05.01 kubernetes Tutorials 2. kubectl을 사용해서 배포하기 (0) 2020.04.27