第 12 章 使用 Skupper 策略保护服务网络
默认情况下,Skupper 包括许多安全功能,包括将 mutual TLS 用于站点之间的所有服务网络通信。您可以通过安装 Skupper 策略 CRD 来添加额外的安全功能。默认情况下,将 Skupper 策略 CRD 应用到集群可防止所有服务网络通信。您可以指定粒度 Skupper 策略 CR,以只允许您需要的服务网络通信。
Skupper 策略与 Kubernetes 网络策略不同,这是 network-policy
选项,它限制对当前命名空间的访问 Skupper 服务,如 使用 Skupper CLI 所述。
服务网络中的每个站点都运行 Skupper 路由器,并具有专用证书颁发机构(CA)。站点之间的通信是通过 mutual TLS 保护的,因此服务网络会隔离外部访问,从而防止安全攻击、恶意软件和数据利用的问题。一组 Skupper 策略在集群级别上添加另一个层,以帮助集群管理员控制对服务网络的访问。
本指南假定您了解以下 Skupper 概念:
- 站点(site)
- 安装 Skupper 的命名空间。
- token
- 在两个站点间建立链接需要一个令牌。
- 服务网络(service network)
- 使用 Skupper 公开服务后,您已创建了服务网络。
12.1. 关于 Skupper 策略
集群管理员安装 Skupper 策略自定义资源定义(CRD)后,集群管理员需要配置一个或多个策略,以便开发人员在服务网络上创建和使用服务。
在本指南中,开发人员指的是有权访问命名空间但没有管理员特权的集群用户。
集群管理员使用自定义资源 (CR) 配置一个或多个项目以启用通信:
- 允许进入的链接
-
使用
allowIncomingLinks
允许开发人员创建令牌并配置传入的链接。 - 允许到特定主机的传出链接
-
使用
allowedOutgoingLinksHostnames
指定开发人员可以创建链接到的主机。 - 允许服务
-
使用
allowedServices
指定开发人员可以在服务网络上创建和使用的服务。 - 允许公开资源
-
使用
allowedExposedResources
指定开发人员可在服务网络上公开的资源。
集群管理员可以将每个策略 CR 设置应用到一个或多个命名空间。
例如,以下策略 CR 完全允许所有命名空间上的所有 Skupper 功能,但以下情况除外:
-
仅允许到以
.example.com
结尾的任何域的传出链接。 - 仅允许 'deployment/nginx' 资源在服务网络中公开。
apiVersion: skupper.io/v1alpha1 kind: SkupperClusterPolicy metadata: name: cluster-policy-sample-01 spec: namespaces: - "*" allowIncomingLinks: true allowedExposedResources: - "deployment/nginx" allowedOutgoingLinksHostnames: [".*\.example.com$"] allowedServices: - "*"
您可以应用许多策略 CR,如果允许的项目中存在冲突,则应用最宽松的策略。例如,如果您使用 allowedOutgoingLinksHostnames: []
行(它没有列出任何主机名)应用一个额外的策略 CR,则仍然允许到 *.example.com
的传出链接,因为在原始 CR 中允许。
命名空间
- 指定此策略应用到的命名空间的一个或多个模式。请注意,您可以使用标签选择器来匹配命名空间。
allowIncomingLinks
-
指定
true
以允许其他站点创建到指定命名空间的链接。 allowedOutgoingLinksHostnames
- 指定一个或多个模式,以确定您可以从指定命名空间创建指向的主机。
allowedServices
- 指定一个或多个模式,以确定指定命名空间中的服务网络中允许的服务的名称。
allowedExposedResources
- 指定一个或多个允许的资源名称,以允许来自特定命名空间中的服务网络。请注意,不支持模式。
使用正则表达式来创建模式匹配,例如:
-
ipahealthcheck\.com$
匹配以.com
结尾的任何字符串。需要使用双引号以避免 YAML 出现问题。 -
^abc$
匹配字符串abc
。
如果您创建另一个 Skupper 策略 CR 以允许特定命名空间的传出链接,用户可以从该命名空间中创建链接来加入服务网络。也就是说,多个策略 CR 的逻辑是 OR
。如果任何单个策略 CR 允许操作,则允许操作。