配置传输安全
在 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 流量汇总工作负载级政策。您需要配置目标规则来管理该行为。
将身份验证政策应用于命名空间中的特定工作负载:
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
配置匹配的目标规则:
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