---
title: Istio mTLS与服务身份策略实践
keywords:
- Istio
- mTLS
- PeerAuthentication
- AuthorizationPolicy
- SPIFFE
- mtls STRICT
description: 配置Istio在命名空间强制mTLS并基于SPIFFE身份实施访问策略,提供可验证的YAML与命令确保零信任通信。
date: 2025-11-26
categories:
- 文章资讯
- 技术教程
---
概述
- 目标:在服务网格中强制mTLS,基于`principals`与路径/方法进行授权,构建零信任服务间通信。
- 适用:生产环境核心服务、跨命名空间访问控制、合规要求。
核心与实战
- 命名空间强制mTLS:
```
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: prod
spec:
mtls:
mode: STRICT
```
- 授权仅允许`web`访问`api`:
```
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: api-allow-web
namespace: prod
spec:
selector:
matchLabels: { app: api }
action: ALLOW
rules:
- from:
- source:
principals: [ "cluster.local/ns/prod/sa/web" ]
to:
- operation:
ports: [ "8080" ]
methods: [ "GET", "POST" ]
```
- 拒绝其他来源:
```
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: api-deny-all
namespace: prod
spec:
selector:
matchLabels: { app: api }
action: DENY
rules:
- from:
- source: {}
```
示例
- 应用与分析:
```
kubectl apply -f peerauthentication.yaml
kubectl apply -f authz-allow.yaml
kubectl apply -f authz-deny.yaml
istioctl analyze -n prod
```
- 观测证书与身份:
```
kubectl -n prod exec deploy/api -- curl -sS http://127.0.0.1:15000/config_dump | select-string -pattern spiffe
```
验证与监控
- mTLS状态:
- 在Grafana/Prometheus查看`istio_mtls_client_traffic`与`istio_mtls_server_traffic`指标。
- 授权效果:
- 通过`web`服务发起到`api`的请求应成功,其他SA请求被拒(403);查看`istiod`与Envoy日志。
- 证书轮转:
- 验证工作负载证书自动轮转,避免过期导致中断。
常见误区
- 未在命名空间设置默认`PeerAuthentication`导致明文通信;需严格模式。
- principals写法错误(需`cluster.local/ns/

发表评论 取消回复