第 2 章 指定链接成本
在连接站点时,您可以为每个链接分配一个成本来影响流量流。默认情况下,为新链接将链接成本设置为 1。在服务网络中,路由算法尝试使用从客户端到目标服务器的最低总成本的路径。
如果您在不同站点间分布服务,您可能需要客户端使用特定目标或链接。在这种情况下,您可以在替代链接中指定大于
1的成本,以减少这些链接的使用。注意开放连接的分发是统计数据,即不是循环系统。
- 如果连接只遍历一个链接,则路径成本与链接成本相同。如果连接遍历多个链接,路径成本是路径中涉及的所有链接的总和。
成本充当使用从客户端到网络中的服务器的路径的阈值。当只有一个路径时,无论成本如何,该路径上的流量流。
注意如果您从两个服务的目标开始,并且不再提供其中一个目标,剩余路径上的流量流不再可用,无论成本如何。
- 当多个路径从客户端到服务器实例或服务时,最低成本路径上的流量流,直到连接数量超过替代路径的成本。达到这个打开连接阈值后,新的连接将分散到替代路径和最低的成本路径中。
前提条件
- 您已将 Kubernetes 上下文设置为您要从其中链接的站点。
- 要链接到的站点的令牌。
流程
创建到服务网络的链接:
skupper link create <filename> --cost <integer-cost>
$ skupper link create <filename> --cost <integer-cost>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<integer-cost>是一个大于 1 的整数,流量会优先使用成本链接。注意如果可以在不遍历链接的情况下调用服务,该服务被视为本地,且带有隐式成本
0。例如,使用名为
token.yaml的令牌文件创建成本设置为2的链接:skupper link create token.yaml --cost 2
$ skupper link create token.yaml --cost 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查链接成本:
skupper link status link1 --verbose
$ skupper link status link1 --verboseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出结果类似以下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用控制台观察流量。
如果您在站点中有一个控制台,请登录并导航到每台服务器的进程。您可以查看与每个客户端对应的流量级别。
注意如果不同站点上有多个客户端,请将视图过滤到每个客户端,以确定流量成本的影响。例如,在两个站点网络中与两个站点的服务器和客户端链接在一起,您可以看到客户端在本地服务器可用时由本地服务器提供。
2.1. 从命名空间公开服务网络上的服务 复制链接链接已复制到粘贴板!
创建服务网络后,公开的服务就可以在该网络间进行通信。
skupper CLI 有两个选项用于公开命名空间中已存在的服务:
-
expose支持简单用例,例如,单一服务的部署。具体步骤请查看 第 2.1.1 节 “在服务网络上公开简单的服务”。 -
service createandservice bind是更灵活的公开服务方法,例如,如果您的一个部署有多个服务。具体步骤请查看 第 2.1.2 节 “在服务网络上公开复杂的服务”。
2.1.1. 在服务网络上公开简单的服务 复制链接链接已复制到粘贴板!
这部分论述了如何为服务网络启用服务用于简单用例。
流程
在其中一个站点中创建部署、一些 pod 或服务,例如:
kubectl create deployment hello-world-backend --image quay.io/skupper/hello-world-backend
$ kubectl create deployment hello-world-backend --image quay.io/skupper/hello-world-backendCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此步骤不是特定于 Skupper,即此过程与集群的标准进程不同。
创建可在服务网络中进行通信的服务:
部署和 pod
skupper expose [deployment <name>|pods <selector>]
$ skupper expose [deployment <name>|pods <selector>]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
-
<name> 是部署的名称 -
<selector>是一个 pod 选择器
Kubernetes 服务
使用
--address选项指定生成的服务名称。skupper expose service <name> --address <skupper-service-name>
$ skupper expose service <name> --address <skupper-service-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
-
<name> 是服务的名称 -
<skupper-service-name> 是服务网络上共享生成的服务的名称。
StatefulSets
您可以使用以下方法公开 statefulset:
skupper expose statefulset <statefulsetname>
$ skupper expose statefulset <statefulsetname>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kubernetes 中的 StatefulSet 通常与无头服务关联,为每个 pod 提供稳定、唯一的网络标识符。如果服务网络上的每个 pod 需要稳定的网络标识符,请使用
--headless选项。skupper expose statefulset --headless
$ skupper expose statefulset --headlessCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当您使用 '--headless" 选项时,服务网络中只有一个 statefulset 才能通过地址(routing 键)公开。
对于第 1 步中的示例部署,您可以使用以下命令创建服务:
skupper expose deployment/hello-world-backend --port 8080
$ skupper expose deployment/hello-world-backend --port 8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow expose命令的选项包括:-
--port <port-number>:: 指定该服务在服务网络上提供的端口号。注意:您可以通过重复这个选项来指定多个端口。 -
--target-port <port-number>:: 指定您要公开的 pod 的端口号。 -
--protocol <protocol>允许您指定要使用的协议:tcp、http或http2
注意如果没有指定端口,
skupper将使用部署的containerPort值。-
检查服务网络上公开的服务状态(
-v仅在 Kubernetes 上可用):Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.2. 在服务网络上公开复杂的服务 复制链接链接已复制到粘贴板!
本节描述了如何为服务网络启用服务,以获取更复杂的用例。
流程
在其中一个站点中创建部署、一些 pod 或服务,例如:
kubectl create deployment hello-world-backend --image quay.io/skupper/hello-world-backend
$ kubectl create deployment hello-world-backend --image quay.io/skupper/hello-world-backendCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此步骤不是特定于 Skupper,即此过程与集群的标准进程不同。
创建可在服务网络中进行通信的服务:
skupper service create <name> <port>
$ skupper service create <name> <port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
-
<name>是您要创建的服务的名称 -
<port>是服务使用的端口
对于第 1 步中的示例部署,您可以使用以下命令创建服务:
skupper service create hello-world-backend 8080
$ skupper service create hello-world-backend 8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将服务绑定到集群服务:
skupper service bind <service-name> <target-type> <target-name>
$ skupper service bind <service-name> <target-type> <target-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
-
<service-name>是服务网络上的服务名称 -
<target-type>是您要公开的对象:deployment,statefulset,pods, 或service。 -
<target-name>是集群服务的名称
对于第 1 步中的示例部署,您可以使用以下命令绑定该服务:
skupper service bind hello-world-backend deployment hello-world-backend
$ skupper service bind hello-world-backend deployment hello-world-backendCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
2.1.3. 将不同命名空间中的服务公开给服务网络 复制链接链接已复制到粘贴板!
本节介绍如何从未部署 Skupper 的命名空间公开服务。
skupper 允许您为任何站点从其他命名空间中公开 Kubernetes 服务。但是,如果要公开工作负载,如部署,您必须创建一个站点,如本节所述。
先决条件
- 部署 Skupper 的命名空间。
- 允许命名空间间通信的网络策略
- 如果要公开服务以外的资源,则 cluster-admin 权限
流程
如果要从站点命名空间以外的命名空间中公开工作负载,请使用集群权限创建站点:
注意站点不需要通过
--enable-cluster-permissions授予的额外权限来公开 Kubernetes 服务资源。skupper init --enable-cluster-permissions
$ skupper init --enable-cluster-permissionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从站点命名空间以外的命名空间公开 Kubernetes 服务:
skupper expose service <service>.<namespace> --address <service>
$ skupper expose service <service>.<namespace> --address <service>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - <service> - 服务网络上的服务名称。
- <namespace> - 要公开服务的命名空间的名称。
例如,如果您在
east命名空间中部署了 Skupper,并在east-命名空间中创建了一个后端 Kubernetes 服务,您可以将上下文设置为backendeast命名空间,并使用以下方法将服务作为后端在服务网络上公开:skupper expose service backend.east-backend --port 8080 --address backend
$ skupper expose service backend.east-backend --port 8080 --address backendCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从使用
--enable-cluster-permissions创建的站点公开工作负载:skupper expose <resource> --port <port-number> --target-namespace <namespace>
$ skupper expose <resource> --port <port-number> --target-namespace <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - <resource> - 资源的名称。
- <namespace> - 要公开运行资源的命名空间名称。
例如,如果您在
east命名空间中部署了 Skupper,并在east-部署,您可以将上下文设置为backend命名空间中创建了后端east命名空间,并使用以下方法将服务作为后端在服务网络上公开:skupper expose deployment/backend --port 8080 --target-namespace east-backend
$ skupper expose deployment/backend --port 8080 --target-namespace east-backendCopy to Clipboard Copied! Toggle word wrap Toggle overflow