이 주제에서는 Kf에서 경로와 도메인이 작동하는 방식과 개발자 및 관리자가 Kf 클러스터에 배포된 앱의 경로와 도메인을 구성하는 방법을 설명합니다.
애플리케이션에 외부 액세스 권한을 부여하려면 도메인과 경로를 만들어야 합니다.
내부 라우팅
Kf 앱은 클러스터 네트워크를 벗어나지 않고도 Cloud Service Mesh에서 제공하는 메시 네트워크를 사용하여 클러스터의 다른 앱과 직접 내부적으로 통신할 수 있습니다. 기본적으로 모든 트래픽은 상호 TLS를 통해 암호화됩니다.
Kf 클러스터에 배포된 모든 앱에는 기본적으로 구성된 내부 엔드포인트가 제공됩니다. 앱 간 내부 통신에 app-name.space-name.svc.cluster.local
주소를 사용할 수 있습니다. 이 내부 주소를 사용하기 위해 추가적인 단계는 필요하지 않습니다. 상호 TLS는 기본적으로 내부 경로에 사용 설정되어 있습니다. 이 내부 주소는 앱을 실행하는 pod에서만 액세스할 수 있으며 클러스터 외부에서는 액세스할 수 없습니다.
앱 부하 분산
트래픽은 라운드 로빈 정책을 사용하여 앱의 정상 인스턴스로 Istio에서 라우팅합니다. 현재 이 정책은 수정할 수 없습니다.
경로 기능
경로는 클러스터의 수신 게이트웨이에 트래픽을 전달할 위치와 지정된 주소에서 사용할 수 있는 앱이 없는 경우 수행할 작업을 알려줍니다. 기본적으로 경로에서 사용할 수 있는 앱이 없고 경로가 요청을 수신하면 HTTP 503 상태 코드가 반환됩니다.
경로는 호스트, 도메인, 경로의 세 부분으로 구성됩니다. 예를 들어 URI payroll.mydatacenter.example.com/login
에서 각 항목은 다음과 같습니다.
- 호스트는
payroll
입니다. - 도메인은
mydatacenter.example.com
입니다. - 경로(pass)는
/login
입니다.
경로에는 도메인이 필수로 포함되어야 하며 호스트와 경로(path)는 선택 사항입니다. 여러 경로가 다른 패스를 지정하는 경우 동일한 호스트 및 도메인을 공유할 수 있습니다. 여러 앱이 동일한 경로를 공유할 수 있으며 트래픽이 앱 사이에 분산됩니다. 이는 기존의 블루-그린 배포를 지원해야 하는 경우에 유용합니다. 여러 앱이 서로 다른 패스에 결합된 경우 우선 순위는 가장 긴 패스부터 가장 짧은 패스 순입니다.
경로 사용
다음 섹션에서는 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의 구성을 읽고 트래픽 라우팅 방법을 결정합니다.