---

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_trafficistio_mtls_server_traffic指标。
  • 授权效果:
  • 通过web服务发起到api的请求应成功,其他SA请求被拒(403);查看istiod与Envoy日志。
  • 证书轮转:
  • 验证工作负载证书自动轮转,避免过期导致中断。

常见误区

  • 未在命名空间设置默认PeerAuthentication导致明文通信;需严格模式。
  • principals写法错误(需cluster.local/ns/<ns>/sa/<sa>);导致授权不生效。
  • 忽视默认DENY策略,未定义ALLOW时访问被全部放行或拒绝;策略顺序需清晰。

结语

  • 通过mTLS与基于服务身份的授权策略,Istio可在生产环境落实零信任通信与细粒度访问控制。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部