設定自訂網域

所有為叢集外使用者或應用程式提供 HTTP 流量的 Kf 應用程式,都必須與網域名稱建立關聯。

Kf 有三個可設定網域的位置。依優先順序排列如下:

  1. 應用程式
  2. Spaces
  3. kf 命名空間中的 config-defaults ConfigMap

config-defaults ConfigMap

config-defaults ConfigMap 會保留 Kf 的叢集全域設定,叢集管理員可以編輯這項設定。Spaces 控制器會讀取 ConfigMap 中的值,並修改相關設定。網域值會顯示在空間的 status.networkConfig.domains 欄位中。

如要修改 Kf 叢集的網域,請編輯 kf 命名空間中的 config-defaults ConfigMap:

kubectl edit configmap config-defaults -n kf

新增或更新 spaceClusterDomain 鍵的項目,如下所示:

spaceClusterDomain: my-domain.com

如要驗證設定是否正確更新,請檢查空間中的網域值:

kf space SPACE_NAME -o "jsonpath={.status.networkConfig.domains[]['domain']}"

輸出內容會與下列內容相似:

Getting Space some-space
some-space.my-domain.com

每個工作區都會在叢集網域前方加上專屬名稱。這麼做可避免應用程式之間發生衝突。

聊天室網域

空格是網域設定的權威位置。您可以將網域和子網域指派給各個工作區,供開發人員使用。設定網域的欄位為 spec.networkConfig.domains

使用 kf space 查看指派給工作區的網域:

kf space SPACE_NAME

在輸出結果中,Spec 欄位包含專屬的聊天室設定,而 Status 欄位則反映聊天室的設定,並附上叢集層級的預設值:

...
Spec:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
...
Status:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
      Domain: my-space.prod.us-east1.kf.mycompany.com

使用 CLI 進行設定

kf CLI 支援 Space 網域的變異。每個指令都會輸出舊版和新版設定之間的差異。

使用 kf configure-space append-domain 新增網域:

kf configure-space append-domain SPACE_NAME myspace.mycompany.com

使用 kf configure-space set-default-domain 新增或將現有網域設為預設網域:

kf configure-space set-default-domain SPACE_NAME myspace.mycompany.com

最後,移除網域:

kf configure-space remove-domain SPACE_NAME myspace.mycompany.com

應用程式

應用程式可在設定中指定網域。系統會在 kf push 期間使用以下邏輯將路線對應至應用程式:

let current_routes  = The set of routes already on the app
let manifest_routes = The set of routes defined by the manifest
let flag_routes     = The set of routes supplied by the --route flag(s)
let no_route        = Whether the manifest has no-route:true or --no-route is set
let random_route    = Whether the manifest has random-route:true or --random-route is set

let new_routes = Union(current_routes, manifest_routes, flag_routes)

if new_routes.IsEmpty() then
  if random_route then
    new_routes.Add(CreateRandomRoute())
  else
    new_routes.Add(CreateDefaultRoute())
  end
end

if no_route then
  new_routes.RemoveAll()
end

return new_routes

如果應用程式未指定路徑,或要求隨機路徑,系統會使用該空間中的第一個網域。如果聊天室的第一個網域有所變更,使用預設網域的所有聊天室應用程式都會更新,以反映這項變更。

網域範本

Kf 支援在網域中替換變數。替換功能可讓您為每個 Space 自訂單一叢集內的網域,並對入站 IP 的變更做出反應。系統會針對網域中出現的 $(VARIABLE_NAME) 語法變數執行替換作業。

變數 說明
CLUSTER_INGRESS_IP 叢集入口的 IPV4 位址。
SPACE_NAME 聊天室名稱。

範例

以下範例說明如何使用網域變數來支援各種不同的組織結構和叢集模式。

  • 使用 nip.io 等萬用字元 DNS 服務:

    $(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io
    
  • 使用集中管理 DNS 的機構網域:

    $(SPACE_NAME).cluster-name.example.com
    
  • 自行管理 DNS 的團隊專用網域:

    cluster-name.$(SPACE_NAME).example.com
    
  • 叢集的網域 (含備援容錯和外部電路切換器):

    $(SPACE_NAME)-failover.cluster-name.example.com
    

Kf 和 CF 的差異

  • Kf 聊天室會在叢集層級網域前面加上聊天室名稱。
  • Kf 不會檢查使用者指定路徑中的網域衝突。