在 Istio 服务网格中,PeerAuthentication
和 RequestAuthentication
是两个重要的配置对象,用于定义服务间的身份验证和客户端请求的身份验证策略。这两个配置对象分别解决了不同的安全需求:
PeerAuthentication
PeerAuthentication
用于配置服务网格内部的服务间身份验证策略。它确保服务之间的通信是安全的,并且仅允许已认证的服务进行通信。
PeerAuthentication 的作用
- 双向 mTLS 认证:确保服务间通信使用双向 mTLS(Mutual TLS)进行加密和身份验证。
- 证书管理:定义服务间通信所需的证书和密钥。
- 信任域:定义信任域内的服务可以互相通信。
- 策略应用范围:可以选择在全局范围内应用策略,也可以针对特定命名空间或服务。
PeerAuthentication 示例
以下是一个简单的 PeerAuthentication
配置示例,用于启用全局双向 mTLS 认证:
Yaml
深色版本
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
spec:
mtls:
mode: STRICT # 可选值:STRICT, PERMISSIVE, DISABLE
在这个示例中,default
PeerAuthentication 配置启用了全局范围内服务间的双向 mTLS 认证。可以选择的模式包括:
- STRICT:强制所有服务间通信使用双向 mTLS。
- PERMISSIVE:允许明文通信,但优先使用 mTLS。
- DISABLE:禁用双向 mTLS 认证。
RequestAuthentication
RequestAuthentication
用于配置客户端请求的身份验证策略。它确保从客户端(如浏览器、移动应用或其他服务)到服务网格中的服务的请求是经过身份验证的。
RequestAuthentication 的作用
- 客户端身份验证:定义客户端请求的身份验证机制,如 JWT(JSON Web Token)、OAuth2 等。
- 身份验证配置:定义身份验证所需的配置信息,如 JWT 的颁发者、公钥等。
- 授权策略:根据身份验证结果进行授权决策。
- 适用范围:可以选择在全局范围内应用策略,也可以针对特定命名空间或服务。
RequestAuthentication 示例
以下是一个简单的 RequestAuthentication
配置示例,用于配置客户端请求的身份验证:
Yaml
深色版本
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
name: default
spec:
jwt:
issuer: "https://example.com/auth" # JWT 颁发者
jwksUri: "https://example.com/jwks" # JWT 公钥 URL
在这个示例中,default
RequestAuthentication 配置定义了客户端请求使用 JWT 进行身份验证。JWT 的颁发者是 https://example.com/auth
,公钥可以从 https://example.com/jwks
获取。
组合使用
PeerAuthentication
和 RequestAuthentication
可以组合使用,以实现服务网格内外的安全通信。通常情况下,PeerAuthentication
用于确保服务网格内部的安全通信,而 RequestAuthentication
用于确保从外部客户端到服务网格的服务请求的安全性。
综合示例
以下是结合 PeerAuthentication
和 RequestAuthentication
的综合示例:
Yaml
深色版本
# peer-auth.yaml
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
spec:
mtls:
mode: STRICT
# request-auth.yaml
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
name: default
spec:
jwt:
issuer: "https://example.com/auth"
jwksUri: "https://example.com/jwks"
在这个综合示例中,peer-auth.yaml
启用了服务间的双向 mTLS 认证,而 request-auth.yaml
配置了客户端请求的身份验证策略。
总结
- PeerAuthentication:用于服务间通信的安全认证。
- RequestAuthentication:用于客户端请求的身份验证。
通过这两个配置对象,Istio 提供了强大的安全机制,确保服务网格内部以及外部客户端请求的安全性。