Sidecar 和边缘代理作为 Policy Enforcement Points(PEPs) 以保护客户端和服务器之间的通信安全.
一组 Envoy 代理扩展,用于管理遥测和审计
控制面处理来自 API server 的配置,并且在数据面中配置 PEPS。PEPS 用 Envoy 实现。下图显示了架构。

身份是任何安全基础架构的基本概念。在工作负载间通信开始时,双方必须交换包含身份信息的凭证以进行双向验证。
Istio 身份模型使用 service identity (服务身份)来确定一个请求源端的身份。
下面的列表展示了在不同平台上可以使用的服务身份:
Istio提供身份认证的流程:(身份认证是通过SDS提供secret discovery service)

Istiod提供 gRPC服务以接受证书签名请求(CSRS)。- 当工作负载启动时,Envoy 通过秘密发现服务(SDS)API 向同容器内的
istio-agent发送证书和密钥请求。- 在收到 SDS 请求后,
istio-agent创建私钥和 CSR,然后将 CSR 及其凭据发送到istiodCA 进行签名。istiodCA 验证 CSR 中携带的凭据,成功验证后签署 CSR 以生成证书。Istio-agent通过 Envoy SDS API 将私钥和从 Istio CA 收到的证书发送给 Envoy。Istio-agent会监工作负载证书的有效期。上述 CSR 过程会周期性地重复,以处理证书和密钥轮换。
两种认证类型:
Peer authentication:用于服务到服务的认证,以验证进行连接的客户端。提供双向TLS认证。默认是用宽容模式(PERMISSIVE )
Peer认证支持模式:
Request authentication:用于最终用户认证,以验证附加到请求的凭据。 Istio 使用 JSON Web Token(JWT)验证启用请求级认证,并使用自定义认证实现或任何 OpenID Connect 的认证实现。
Request 认证策略指定验证 JSON Web Token(JWT)所需的值。 这些值包括:
Istio 通过客户端和服务器端 PEPS 建立服务到服务的通信通道,PEPS 被实现为Envoy 代理。当一个工作负载使用双向 TLS 认证向另一个工作负载发送请求时,该请求的处理方式如下:
双向TLS具有一个宽容模式(permissive mode),允许服务同时接受纯文本流量和双向 TLS 流量。
服务里面插入了istio的 sidecar之后,默认情况,会将双向TLS作用于这些服务的工作负载上。
双向TLS认证开启方式:
1. 全局开启,认证策略设置为 STRICT 模式。在整个服务网格范围内,对等认证策略不应该有一个 selector,它必须应用于根命名空间。(根命名空间为安装istiod的命名空间)
2. 单个命名空间或者匹配单个工作负载开启;
3. 为单个服务的每个端口设置双向TLS。(可以排除某个端口,其余端口使用双向TLS(使用 portlevelMtls 参数))
参考:Istio / 认证策略
TLS设置:
PeerAuthentication 用于配置 Sidecar 接收的 mTLS 流量类型。DestinationRule 用于配置 Sidecar 发送的 TLS 流量类型。特定服务策略比命名空间范围的策略优先级高。
授权策略支持 ALLOW 和 DENY 动作。
拒绝策略优先于允许策略。如果请求同时匹配上允许策略和拒绝策略,请求将被拒绝。Istio 首先评估拒绝策略,以确保允许策略不能绕过拒绝策略。
授权可以作用于:HTTP流量授权、TCP流量、