Openshift는 Red Hat이 만든 Kubernetes platform이다. Kubernetes의 수퍼셋인 만큼 얘만이 갖는 resource들이 있는데 그 중 Networking resource를 살펴보고자 한다.
Kubernetes 공식 문서: 서비스, 로드밸런싱, 네트워킹
쿠버네티스의 네트워크는 방대한 개념이지만 네트워크를 구성하는 가장 기본적인 리소스는 단연 service
와 ingress
일 것이다.
이 글을 읽는 사람은 당연히 두 리소스에 대해서 잘 알 것으로 생각한다. 잘 모르겠다면 공식 문서를 읽어보자.
서비스(service
): 파드의 IP는 동적인데, IP를 몰라도 해당 파드를 찾을 수 있도록 하는 리소스이다. 공식 문서
인그레스(ingress
): 클러스터 내외부에서 도메인 네임을 이용해 서비스에 접근할 수 있도록 하는 리소스이다. 공식 문서
클러스터가 제공하는 마이크로 서비스들을 단번에 파악하는 방법의 하나는 이 클러스터가 갖고 있는 ingress들을 확인하는 것이다. 그런데 처음 오픈쉬프트 클러스터를 열어보았더니 ingress가 텅 비어있었다. 띠용?
쿠버네티스에서는 NGINX operator
와 같은 인그레스 오퍼레이터를 설치하지만, 오픈쉬프트에는 Ingress Operator
라는 이름으로 기본 오퍼레이터가 포함되어 있다.
인그레스 오퍼레이터는 Route
라는 리소스에 정의된 인그레스 트래픽을 관리한다. Route
란 놈은 Kubernetes의 Service와 Ingress를 합쳐 놓은 것처럼 생겼으며, Kubernetes의 Ingress Controller에서 기본으로 제공하지 않는 TLS 관련 기능을 제공한다. 즉, 클러스터가 서비스하는 도메인 네임들을 확인하려면 route
를 보면 된다.
spec.host
: 도메인 네임을 정의한다. 인그레스에 정의하는 host와 같다. to
: 어떤 서비스와 연결할지 정의한다. 인그레스에 정의하는 rules.http.paths.path.backend.service
와 같다. 오픈쉬프트의 route
에서 제공하는 TLS 기능을 정의한다.
여기서 TLS Termination이란 것을 처음 알게 되었다.
TLS를 통해 전달된 암호화된 트래픽을 '끝낸다', 즉 복호화하는 프로세스를 의미한다. 3가지 타입이 있다.
출처: Understanding OpenShift Route
destination CA certificate
를 지정하여 엔드포인트로의 트래픽을 검증한다.SSL Offloading?
암호화된 트래픽을 애플리케이션 서비스가 복호화해야 한다면 부담이 클 것이다. 대신 Load balancer가 미리 트래픽을 복호화하여 (terminating TLS Traffic) 백엔드 서비스는 비즈니스 로직에 충실하도록 도와주는데, 이를 SSL Offloading이라고 한다.