在 Anthos Service Mesh 1.5 及更高版本中,默认情况下启用了自动双向 TLS(自动 mTLS)。通过自动 mTLS,客户端边车代理会自动检测服务器是否具有 Sidecar。客户端 Sidecar 会将 mTLS 发送到具有 Sidecar 的工作负载,并将纯文本流量发送到没有 Sidecar 的工作负载。但请注意,服务会接受纯文本和 mTLS 流量。在向 Pod 注入 Sidecar 代理时,我们还建议您将服务配置为仅接受 mTLS 流量。
借助 Anthos Service Mesh,您可以通过应用 PeerAuthentication
政策将服务配置为仅接受 mTLS。借助 Anthos 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
部分并指定与所需工作负载匹配的标签。但是,Anthos 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