有些應用程式即使無法在叢集外部存取也能運作,但大多數應用程式都需要在叢集外部的一或多個 HTTP 端點上運作。在 Kf 中,這是 Routes 的工作。
根據預設,每個應用程式都可以使用叢集內部應用程式位址 app-name.space-name
,存取叢集中的其他程序。當您在叢集中部署一或多個需要相互通訊的應用程式時,可以使用這個位址;這樣一來,流量就能直接從一個應用程式傳送到另一個應用程式,而不會從叢集傳送出去,再傳回叢集。這樣一來,通訊功能的安全性和速度都會提升,且可保證在本機叢集中使用服務。
如果應用程式需要從叢集外部存取,您必須為其建立路徑。
叢集內部網域
每個應用程式的叢集內部網域都有一些特殊特性。
- 在應用程式中使用此功能可進行東西 (點對點) 路由。
- 系統會在執行中的 App Pod 之間,為傳送至此的流量進行負載平衡。
- 您可以使用內部網域連線至非 HTTP 端點。
您可以使用路徑,在叢集內部網域上建立虛構網址。
應用程式負載平衡
Istio 會使用「輪替」政策,將流量路由至應用程式健康狀態良好的執行個體。目前無法變更這項政策。
路由功能
路由會告訴叢集的入口網關要將流量傳送至何處,以及在指定位址上沒有可用的應用程式時該如何處理。根據預設,如果路徑上沒有可用的應用程式,且路徑收到要求,則會傳回 HTTP 503 狀態碼。
路由由三個部分組成:主機、網域和路徑。例如,在 URI payroll.mydatacenter.example.com/login
中:
- 主機為
payroll
- 網域為
mydatacenter.example.com
- 路徑為
/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
- 路徑
- 服務
- 應用程式
每個應用程式都有一個服務,這是為應用程式的所有執行中例項指定的抽象名稱。服務的名稱與應用程式相同。路徑代表單一外部網址。路由會持續監控應用程式的變更,當應用程式要求加入路由時,路由會更新其應用程式清單,然後更新 VirtualService。VirtualService 代表單一網域,並合併屬於該網域的空間中的所有路徑清單。
Istio 會讀取 VirtualService 上的設定,以決定如何轉送流量。