本主題說明路徑和網域在 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
- 路徑為
/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 上的設定,以決定如何轉送流量。