配置传输安全

在 Cloud Service Mesh 1.5 及更高版本中,默认情况下启用了自动双向 TLS(自动 mTLS)。通过自动 mTLS,客户端 Sidecar 代理会自动检测服务器是否具有 Sidecar。客户端 Sidecar 会将 mTLS 发送到具有 Sidecar 的工作负载,并将纯文本流量发送到没有 Sidecar 的工作负载。但请注意,服务会接受纯文本和 mTLS 流量。在向 Pod 注入边车代理时,我们还建议您将服务配置为仅接受 mTLS 流量。

借助 Cloud Service Mesh,您可以通过应用 PeerAuthentication 政策将服务配置为仅接受 mTLS。借助 Cloud Service Mesh,您可以灵活地将政策应用于整个服务网格、命名空间或单个工作负载。为特定工作负载指定政策后,需以该政策为准。例如,特定于工作负载的政策将优先于特定于命名空间的政策。如果没有为工作负载指定政策,则工作负载将从命名空间或网格继承政策。

按命名空间启用双向 TLS

如需为特定命名空间中的所有工作负载启用 mTLS,请使用命名空间级身份验证政策。您可以在 metadata 下指定该政策应用于的命名空间。

kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "AUTH_POLICY_NAME"
  namespace: "NAMESPACE"
spec:
  mtls:
    mode: STRICT
EOF

预期输出:

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

为每个工作负载启用双向 TLS

要为特定工作负载设置 PeerAuthentication 政策,您必须配置 selector 部分并指定与所需工作负载匹配的标签。但是,Cloud Service Mesh 无法汇总到服务的出站 mTLS 流量的工作负载级政策。您需要配置目标规则来管理该行为。

  1. 将身份验证政策应用于命名空间中的特定工作负载:

    cat <<EOF | kubectl apply -n NAMESPACE -f -
    apiVersion: "security.istio.io/v1beta1"
    kind: "PeerAuthentication"
    metadata:
      name: "AUTH_POLICY_NAME"
      namespace: "NAMESPACE"
    spec:
      selector:
        matchLabels:
          app: WORKLOAD
      mtls:
        mode: STRICT
    EOF
    

    预期输出:

    peerauthentication.security.istio.io/AUTH_POLICY_NAME created
  2. 配置匹配的目标规则:

    cat <<EOF | kubectl apply -n NAMESPACE -f -
    apiVersion: "networking.istio.io/v1alpha3"
    kind: "DestinationRule"
    metadata:
      name: "DEST_RULE_NAME"
    spec:
      host: "WORKLOAD.NAMESPACE.svc.cluster.local"
      trafficPolicy:
        tls:
          mode: ISTIO_MUTUAL
    EOF
    

    预期输出:

    destinationrule.networking.istio.io/WORKLOAD created

强制执行网格级 mTLS

如需阻止网格中的所有服务接受纯文本流量,请将 mTLS 模式的 PeerAuthentication 政策设置为 STRICT(默认为 PERMISSIVE)。网格范围的 PeerAuthentication 政策不应有选择器,而必须在根命名空间中 istio-system。部署政策时,控制层面会自动预配 TLS 证书,以便工作负载可以相互进行身份验证。

如需强制执行网格级 mTLS,请执行以下操作:

kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "AUTH_POLICY_NAME"
  namespace: "istio-system"
spec:
  mtls:
    mode: STRICT
EOF

预期输出:

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

查找并删除 PeerAuthentication 政策

如需获取服务网格中所有 PeerAuthentication 政策的列表,请运行以下命令:

kubectl get peerauthentication --all-namespaces

如果有 PeerAuthentication 政策已生效,您可以使用 kubectl delete 删除该政策:

kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME

后续步骤