面试题答案
一键面试技术选型
- 配置中心:选用Consul或Etcd。Consul提供了较为友好的UI界面,支持健康检查等功能;Etcd具有高可用、高性能特点,适用于存储关键配置数据。两者都支持KV存储,能满足配置数据的存储需求。
- 加密工具:使用HashiCorp Vault。Vault可以对敏感数据进行加密、管理密钥,与Kubernetes集成方便,用于对需要加密的配置数据进行处理。
- 消息队列:Kafka或NATS。用于在配置更新时,实时通知相关业务线的微服务,保证配置更新的实时性。
架构设计
- 配置管理层:
- 配置中心(Consul或Etcd)存储所有业务线的配置数据。对于需要加密的配置,在存入配置中心前,先使用Vault进行加密。
- 部署专门的配置管理服务,负责与配置中心交互,包括读取、写入、更新配置数据。该服务可以使用Go、Python等语言开发,通过相应的客户端库与配置中心通信。
- 微服务层:
- 每个微服务通过Sidecar模式(如使用Envoy)与配置管理服务进行交互。Sidecar负责从配置管理服务获取配置数据,并将其注入到微服务的运行环境中。
- 当配置发生更新时,配置管理服务通过消息队列(Kafka或NATS)发送配置更新消息。微服务的Sidecar监听到消息后,从配置管理服务获取最新的配置数据,并更新微服务的运行环境。
- 加密与密钥管理:
- Vault负责生成、管理加密密钥。配置管理服务在写入需要加密的配置数据到配置中心前,调用Vault的API对数据进行加密。
- 微服务的Sidecar在获取到加密的配置数据后,调用Vault的API进行解密,然后将解密后的配置数据注入到微服务。
安全策略
- 身份认证与授权:
- 对配置中心(Consul或Etcd)启用TLS认证,确保只有经过授权的客户端(配置管理服务)能够访问。
- 在Kubernetes集群中,使用RBAC(Role - Based Access Control)对配置管理服务和微服务进行授权,限制它们对配置数据的访问权限。例如,配置管理服务具有读写配置中心数据的权限,而微服务仅具有读取配置数据的权限。
- 对Vault启用Token认证或其他身份认证方式,只有经过认证的配置管理服务和微服务Sidecar能够使用Vault的加密和解密功能。
- 数据传输加密:
- 在配置管理服务与配置中心之间、配置管理服务与微服务Sidecar之间,以及微服务Sidecar与微服务之间的数据传输,都使用TLS加密,防止数据在传输过程中被窃取或篡改。
- 对于消息队列,同样启用TLS加密,保证配置更新消息在传输过程中的安全性。
- 数据存储加密:
- 配置中心(Consul或Etcd)本身支持数据存储加密,如Etcd可以使用内置的加密功能对存储的数据进行加密,防止数据在存储介质上被直接读取。
- Vault对加密密钥进行安全存储和管理,确保密钥的保密性和完整性。