7.3 使用认证策略

认证策略根据生效范围分为三类:网格范围的策略、命名空间范围的策略以及特定于服务的策略。

1.网格范围的策略

网格范围的策略(MeshPolicy)是针对网格中的所有工作负荷,这种策略的生效范围是整个网格内的所有服务,因此类型是MeshPolicy,名称必须是default,另外也不包含targets字段。

例如,使用如下示例中带有mode方式为PERMISSIVE值的临时策略。这种情况下,会将接收服务配置为接收两种类型的流量:纯文本和TLS。因此不会丢弃任何请求。一旦所有客户端切换到预期协议,无论是否有双向TLS,都可以将PERMISSIVE策略替换为最终策略。


apiVersion: "authentication.istio.io/v1alpha1"
kind: "MeshPolicy"
metadata:
  name: "default"
spec:
  peers:
  - mtls: 
      mode: PERMISSIVE

2.命名空间范围的策略

除了为整个网格指定身份认证策略之外,Istio还允许你为特定命名空间指定策略。命名空间范围的策略优先于网格范围的策略。

下面的示例显示了为命名空间foo中的所有服务启用双向TLS的策略:


apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
  name: "default"
  namespace: "nspolicy"
spec:
  peers:
  - mtls: {}

这段代码使用的类别是Policy而不是MeshPolicy,并指定了一个命名空间,在本例中为nspolicy。如果未指定命名空间值,则策略将应用于默认命名空间default。注意一点,类似于网格范围的策略,命名空间范围的策略必须命名为default,并且不限定任何特定的服务,也就没有targets字段。

3.特定于服务的策略

除了为整个网格或者特定命名空间指定身份认证策略之外,Istio还允许你为特定服务指定策略。一个命名空间范围的策略优先于网格范围的策略,而特定于服务的策略则具有更高的优先级。需要注意的是,不同于网格范围的策略以及命名空间范围的策略,特定于服务的策略可以自己命名,而且通过targets字段指定特定的服务名称。

执行以下命令,只为httpbin.bar服务新增一项策略:


apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
  name: "httpbin"
spec:
  targets:
  - name: httpbin
  peers:
  - mtls: {}