为集群外部的用户或应用提供 HTTP 流量的 Kf 应用必须与域名关联。
Kf 具有三个可以配置网域的位置。按优先级排序如下:
- 应用
- Spaces
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 不会检查用户指定路由是否存在网域冲突。