配置传输安全

在使用适用于 Kubernetes 工作负载的 Istio API 的 Cloud Service Mesh 中, TLS(自动 mTLS)默认处于启用状态。使用自动 mTLS 时,客户端边车代理 会自动检测服务器是否有 Sidecar。客户端 Sidecar 发送 mTLS 向具有 Sidecar 的工作负载发送明文,向没有 Sidecar 的工作负载发送明文。 但请注意,服务同时接受明文和 mTLS 流量。注入时 Sidecar 代理,我们建议您同时配置您的 Service 以便只接受 mTLS 流量。

借助 Cloud Service Mesh,您可以将服务配置为仅接受 mTLS 应用 PeerAuthentication 政策。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

后续步骤