路由和网域

本主题介绍 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 中的配置,以确定如何路由流量。