8. 授权策略
Linkerd
的服务器授权策略允许您控制允许哪些类型的流量进入网格化 pod。
例如,您可以将与特定服务的通信限制为仅来自某些其他服务;
或者您可以强制必须在某个端口上使用 mTLS
;等等。
在您的服务上添加流量策略
默认情况下,Linkerd
允许所有流量通过 mesh
,
并使用各种机制(包括重试和负载平衡)来确保成功传递请求。
但是,有时我们希望限制允许的流量类型。Linkerd
的策略功能允许您在特定条件下拒绝流量。
它配置了两个基本机制:
- 一组基本的默认策略,可以通过 Kubernetes annotations 在
cluster
、namespace
、workload
和Pod
级别进行设置。 Server
和Server Authorization
CRD 为特定端口指定细粒度策略。
这些机制协同工作。例如,deny
的默认集群范围策略将禁止任何流量到任何网格化 pod;
然后必须通过使用 Server
和 ServerAuthorization
CRD 明确允许流量。
策略注释
config.linkerd.io/default-inbound-policy
annotation
可以在 namespace
、workload
和 pod
级别进行设置,
并将确定层次结构中该点的默认流量策略。有效的默认策略包括:
all-unauthenticated
: 入站代理允许所有连接all-authenticated
: 入站代理仅允许来自其他网格化 Pod
的mTLS
连接。cluster-unauthenticated
: 入站代理允许来自集群clusterNetworks
中客户端IP
的所有连接(必须在安装时配置)。cluster-authenticated
: 入站代理仅允许来自集群clusterNetworks
中IP
的其他网格化pod
的mTLS
连接。deny
: 入站代理拒绝所有未明确授权的连接。
有关更多默认策略,请参阅策略 reference。
每个集群都有一个默认策略(默认情况下,all-unauthenticated
),在安装/升级
时设置。
在 Pod 创建时 workload
或 namespace
级别存在的 annotation
可以覆盖该值以确定该 Pod
的默认策略。
请注意,默认策略在代理初始化时固定,因此,在创建 Pod
后,更改 annotation
不会更改该 Pod
的默认策略。
策略自定义资源定义
Server
和 ServerAuthorization
CRD 在默认策略之外进一步配置 Linkerd
的策略。
与 annotation
相反,这些 CRD
可以动态更改,并且策略行为将即时更新。
Server
选择一个端口和一组受策略约束的 pod
。
这组 pod
可以对应于单个 workload
,也可以对应多个 workload
(例如,namespace
中每个 pod
的端口 4191
)。
一旦创建,Server
资源会拒绝所有到该端口的流量,并且只能通过创建 ServerAuthorization
资源来启用到该端口的流量。
ServerAuthorization
定义了一组允许的 Server
流量。
ServerAuthorization
可以允许基于任意数量的流量,包括 IP
地址;
使用 mTLS
;特定的 mTLS 身份
(包括通配符
,以允许 namespace
选择);特定的 Service Account
;和更多。
有关 Server
和 ServerAuthorization
资源的更多信息,请参阅策略 reference。
策略拒绝
任何被策略拒绝的已知为 HTTP
(包括 HTTP/2
和 gRPC
)的流量都将导致代理返回 HTTP 403
。
任何非 HTTP
流量都将在 TCP
级别被拒绝,即通过拒绝连接。
请注意,动态更改策略可能会导致现有 TCP
连接突然终止。
示例
有关Emojivoto 示例应用程序的一组示例策略定义, 请参阅 emojivoto-policy.yml。