配置传输安全

在 Cloud Service Mesh 中,如果使用 Istio API 来处理 Kubernetes 工作负载,则自动双向 TLS(自动 mTLS)默认处于启用状态。通过自动 mTLS,客户端边车代理会自动检测服务器是否具有边车。客户端边车会将 mTLS 发送到具有边车的工作负载,并将纯文本发送到没有边车的工作负载。但请注意,服务会接受纯文本和 mTLS 流量。在向 Pod 注入边车代理时,我们还建议您将服务配置为仅接受 mTLS 流量。

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

如需详细了解平台支持的 PeerAuthentication CR 字段,请参阅支持的功能

按命名空间启用双向 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

后续步骤