일부 앱은 클러스터 외부에서 액세스할 수 없어도 유용하지만, 대부분의 앱은 하나 이상의 HTTP 엔드포인트에서 클러스터 외부에서 사용할 수 있어야 합니다. Kf에서 이것이 경로의 역할입니다.
기본적으로 각 앱은 클러스터 내부 앱 주소 app-name.space-name
을 사용하여 클러스터의 다른 프로세스에서 액세스 할 수 있습니다. 이 주소는 서로 통신해야 하는 클러스터에 하나 이상의 앱을 배포할 때 사용할 수 있습니다. 트래픽이 클러스터 외부로 이동하는 대신 한 앱에서 다른 앱으로 직접 이동할 수 있습니다. 이렇게 하면 더 안전하고 빠른 통신이 가능하며, 로컬 클러스터에서의 서비스 이용을 보장합니다.
클러스터 외부에서 앱에 액세스해야 하는 경우 앱에 대한 경로를 만들어야 합니다.
클러스터 내부 도메인
각 앱의 클러스터 내부 도메인에는 몇 가지 특수한 특성이 있습니다.
- 앱에서 이 기능을 사용하면 동-서(지점 간) 라우팅이 가능합니다.
- 전송된 트래픽은 실행 중인 앱 pod 간에 부하가 분산됩니다.
- 내부 도메인을 사용하여 HTTP 이외의 엔드포인트에 연결할 수 있습니다.
경로를 사용하면 클러스터 내부 도메인 위에 가상 URL을 만들 수 있습니다.
앱 부하 분산
트래픽은 라운드 로빈 정책을 사용하여 앱의 정상 인스턴스로 Istio에서 라우팅합니다. 현재 이 정책은 수정할 수 없습니다.
경로 기능
경로는 클러스터의 수신 게이트웨이에 트래픽을 전달할 위치와 지정된 주소에서 사용할 수 있는 앱이 없는 경우 수행할 작업을 알려줍니다. 기본적으로 경로에서 사용할 수 있는 앱이 없고 경로가 요청을 수신하면 HTTP 503 상태 코드가 반환됩니다.
경로는 호스트, 도메인, 경로의 세 부분으로 구성됩니다. 예를 들어 URI payroll.mydatacenter.example.com/login
에서 각 항목은 다음과 같습니다.
- 호스트는
payroll
입니다. - 도메인은
mydatacenter.example.com
입니다. - 경로(pass)는
/login
입니다.
경로에는 호스트와 도메인이 필수로 포함되어야 하며 패스는 선택 사항입니다. 여러 경로가 다른 패스를 지정하는 경우 동일한 호스트 및 도메인을 공유할 수 있습니다. 여러 앱이 동일한 경로를 공유할 수 있으며 트래픽이 앱 사이에 분산됩니다. 이는 기존의 블루-그린 배포를 지원해야 하는 경우에 유용합니다. 여러 앱이 서로 다른 패스에 결합된 경우 우선 순위는 가장 긴 패스부터 가장 짧은 패스 순입니다.
경로 사용
다음 섹션에서는 kf
CLI를 사용하여 경로를 관리하는 방법을 설명합니다.
경로 나열
개발자는 kf routes
명령어를 사용하여 현재 공간의 경로를 나열할 수 있습니다.
$ kf routes
Getting Routes in Space: my-space
Found 2 Routes in Space my-space
HOST DOMAIN PATH APPS
echo example.com / echo
* example.com /login uaa
경로 만들기
개발자는 kf create-route
명령어를 사용하여 경로를 만들 수 있습니다.
# Create a Route in the targeted Space to match traffic for myapp.example.com/*
$ kf create-route example.com --hostname myapp
# Create a Route in the Space myspace to match traffic for myapp.example.com/*
$ kf create-route -n myspace example.com --hostname myapp
# Create a Route in the targeted Space to match traffic for myapp.example.com/mypath*
$ kf create-route example.com --hostname myapp --path /mypath
# You can also supply the Space name as the first parameter if you have
# scripts that rely on the old cf style API.
$ kf create-route myspace example.com --hostname myapp # myapp.example.com
경로가 생성된 후 바인딩된 앱이 없으면 일치하는 요청에 대해 HTTP 503 상태 코드가 반환됩니다.
앱 경로 매핑
개발자는 kf map-route
명령어를 사용하여 경로에서 앱에 액세스할 수 있게 만들 수 있습니다.
$ kf map-route MYAPP mycluster.example.com --host myapp --path mypath
경로 매핑 해제
개발자는 kf
unmap-route
명령어를 사용하여 경로에서 앱에 액세스하지 못하게 만들 수 있습니다.
$ kf unmap-route MYAPP mycluster.example.com --host myapp --path mypath
경로 삭제
개발자는 kf delete-route
명령어를 사용하여 경로를 삭제할 수 있습니다.
$ kf delete-route mycluster.example.com --host myapp --path mypath
경로를 삭제하면 해당 경로에서 수신 대기 중인 모든 앱으로 트래픽이 라우팅되지 않습니다.
앱 매니페스트의 선언적 경로
경로는 앱 매니페스트 파일에서 선언적으로 관리할 수 있습니다. 경로가 아직 없으면 생성됩니다.
---
applications:
- name: my-app
# ...
routes:
- route: example.com
- route: www.example.com/path
매니페스트 문서에서 지원되는 경로 속성에 대한 상세 내용을 확인할 수 있습니다.
심화 주제
CRD 라우팅
라우팅과 관련하여 네 가지 유형이 있습니다.
- VirtualService
- 경로
- 서비스
- 앱
각 앱에는 서비스가 실행되는 모든 인스턴스에게 적용되는 추상 서비스가 있습니다. 서비스 이름은 앱과 동일합니다. 경로는 단일 외부 URL을 나타냅니다. 경로는 앱에 대한 변경사항을 지속적으로 관찰하다가, 앱이 경로에 추가해 줄 것을 요청하면 경로는 앱 목록을 업데이트한 다음 VirtualService를 업데이트합니다. VirtualService는 단일 도메인을 나타내며, 해당 도메인에 속하는 공간의 모든 경로 목록을 병합합니다.
Istio는 VirtualServices의 구성을 읽고 트래픽 라우팅 방법을 결정합니다.