路由和网域

有些应用在集群外部无法访问时很有用,但大多数应用程序需要在集群外部的一个或多个 HTTP 端点上可用。在 Kf 中,这是路由作业。

默认情况下,每个应用都可以使用集群内部应用地址 app-name.space-name 访问集群中的其他进程。当您在集群中部署一个或多个需要相互通信的应用时,您可以使用此地址;它们允许流量直接从一个应用到另一个应用,而不是流出集群并返回。这使得通信更安全、更快速,并保证可在本地集群中使用该服务。

如果您需要从集群外访问您的应用,则需要为其创建路由。

集群内部网域

每个应用的集群内部网域具有一些特殊特征。

  • 在您的应用中使用它可以实现东-西(点对点)路由。
  • 发送到它的流量在正在运行的 App Pod 之间实现负载平衡。
  • 您可以使用内部网域连接到非 HTTP 端点。

借助路由,您可以在集群内部网域之上创建个性化网址。

应用负载平衡

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