路徑和網域

有些應用程式即使無法在叢集外部存取也能運作,但大多數應用程式都需要在叢集外部的一或多個 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 上的設定,以決定如何轉送流量。