本主题介绍 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
- 路线
- 服务
- 应用
每个应用都有一个 Service,这是一个分配给所有正在运行的应用实例的抽象名称。Service 的名称与应用相同。Route 表示单个外部网址。路由会不断关注应用的变化,当一个应用程序请求添加到路由中时,路由会更新它的应用程序列表,然后更新 VirtualService。VirtualService 表示单个网域,并合并属于该网域的空间中的所有路由列表。
Istio 会读取 VirtualService 中的配置,以确定如何路由流量。