路徑和網域

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