设置自定义网域

为集群外部的用户或应用提供 HTTP 流量的 Kf 应用必须与域名关联。

Kf 具有三个可以配置网域的位置。按优先级排序如下:

  1. 应用
  2. Spaces
  3. kf 命名空间中的 config-defaults ConfigMap

config-defaults ConfigMap

config-defaults ConfigMap 为 Kf 保留集群级设置,可由集群管理员进行修改。空间控制器会读取 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 字段包含 Space 的特定配置,Status 字段反映了 Space 的配置,并在末尾附带了集群范围默认值:

...
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 支持网域中的变量替换。替换允许按空间自定义单个集群范围的网域,并响应 Ingress IP 的更改。替换在网域中存在语法 $(VARIABLE_NAME) 的变量上进行。

变量 说明
CLUSTER_INGRESS_IP 集群 Ingress 的 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 不会检查用户指定路由是否存在网域冲突。