第 8 章 指定链接成本
在连接站点时,您可以为每个链接分配一个成本来影响流量流。默认情况下,为新链接将链接成本设置为 1
。在服务网络中,路由算法尝试使用从客户端到目标服务器的最低总成本的路径。
如果您在不同站点间分布服务,您可能需要客户端使用特定目标或链接。在这种情况下,您可以在替代链接中指定大于
1
的成本,以减少这些链接的使用。注意开放连接的分发是统计数据,即不是循环系统。
- 如果连接只遍历一个链接,则路径成本与链接成本相同。如果连接遍历多个链接,路径成本是路径中涉及的所有链接的总和。
成本充当使用从客户端到网络中的服务器的路径的阈值。当只有一个路径时,无论成本如何,该路径上的流量流。
注意如果您从两个服务的目标开始,并且不再提供其中一个目标,剩余路径上的流量流不再可用,无论成本如何。
- 当多个路径从客户端到服务器实例或服务时,最低成本路径上的流量流,直到连接数量超过替代路径的成本。达到这个打开连接阈值后,新的连接将分散到替代路径和最低的成本路径中。
前提条件
- 您已将 Kubernetes 上下文设置为您要从其中链接的站点。
- 要链接到的站点的令牌。
流程
创建到服务网络的链接:
$ skupper link create <filename> --cost <integer-cost>
其中
<integer-cost>
是一个大于 1 的整数,流量会优先使用成本链接。注意如果可以在不遍历链接的情况下调用服务,该服务被视为本地,且带有隐式成本
0
。例如,使用名为
token.yaml
的令牌文件创建成本设置为2
的链接:$ skupper link create token.yaml --cost 2
检查链接成本:
$ skupper link status link1 --verbose
输出结果类似以下:
Cost: 2 Created: 2022-11-17 15:02:01 +0000 GMT Name: link1 Namespace: default Site: default-0d99d031-cee2-4cc6-a761-697fe0f76275 Status: Connected
使用控制台观察流量。
如果您在站点中有一个控制台,请登录并导航到每台服务器的进程。您可以查看与每个客户端对应的流量级别。
注意如果不同站点上有多个客户端,请将视图过滤到每个客户端,以确定流量成本的影响。例如,在两个站点网络中与两个站点的服务器和客户端链接在一起,您可以看到客户端在本地服务器可用时由本地服务器提供。
8.1. 从 Linux 主机公开服务网络上的服务
创建服务网络后,公开的服务就可以在该网络间进行通信。
对于 Kubernetes 和 Podman 站点,使用服务的一般流程是相同的。
skupper
CLI 有两个选项用于公开主机上已存在的服务:
-
expose
支持简单的用例,例如,具有单个服务的主机。具体步骤请查看 第 8.1.1 节 “在服务网络上公开简单的服务”。 -
服务创建和
服务绑定
8.1.1. 在服务网络上公开简单的服务
这部分论述了如何为服务网络启用服务用于简单用例。
先决条件
- Skupper Podman 网站
流程
运行服务器,例如:
$ podman run --name backend-target --network skupper --detach --rm -p 8080:8080 quay.io/skupper/hello-world-backend
此步骤不是特定于 Skupper,也就是说,此过程与您的主机的标准进程不同。
创建可在服务网络中进行通信的服务:
$ skupper expose [host <hostname|ip>]
其中
-
<host
> 是运行服务器的主机的名称。例如,如果您将服务器作为容器运行,则容器的名称。 -
<
IP> 是服务器运行的 IP 地址
对于第 1 步中的示例部署,您可以使用以下命令创建服务:
$ skupper expose host backend-target --address backend --port 8080
这个命令的选项包括:
-
--port <port-number>
:: 指定该服务在服务网络上提供的端口号。注意:您可以通过重复这个选项来指定多个端口。 -
--target-port <port-number>
:: 指定您要公开的 pod 的端口号。 -
--protocol <protocol>
允许您指定要使用的协议:tcp
、http
或http2
-
在服务网络中的另一个站点上创建该服务:
$ skupper service create backend 8080
8.1.2. 在服务网络上公开复杂的服务
本节描述了如何为服务网络启用服务,以获取更复杂的用例。
先决条件
- Skupper Podman 网站
流程
运行服务器,例如:
$ podman run --name backend-target --network skupper --detach --rm -p 8080:8080 quay.io/skupper/hello-world-backend
此步骤不是特定于 Skupper,也就是说,此过程与您的主机的标准进程不同。
创建可在服务网络中进行通信的服务:
$ skupper service create <name> <port>
其中
-
<name>
是您要创建的服务的名称 -
<port>
是服务使用的端口
对于第 1 步中的示例部署,您可以使用以下命令创建服务:
$ skupper service create hello-world-backend 8080
-
将服务绑定到集群服务:
$ skupper service bind <service-name> <target-type> <target-name>
其中
-
<service-name>
是服务网络上的服务名称 -
<target-type
> 是您要公开的对象,host
是唯一有效的值。 -
<target-name>
是集群服务的名称
对于第 1 步中的示例部署,您可以使用以下命令绑定该服务:
$ skupper service bind hello-world-backend host hello-world-backend
-
8.1.3. 从服务网络消耗简单的服务
Podman 站点上公开的服务不自动可供其他站点使用。这等同于使用 skupper init --enable-service-sync false
创建的 Kubernetes 站点。
先决条件
- 在服务网络上公开服务的远程站点
- Podman 站点
流程
- 以与 Skupper 站点关联的用户身份登录主机。
创建本地服务:
$ skupper service create <service-name> <port number>