SDS(秘钥发现服务)是Envoy 1.8.0版本起开始引入的服务。可以在bootstrap.static_resource的secrets配置中为Envoy指定TLS证书(secret),也可以通过SDS远程获取。Istio已经将在1.1版本中支持SDS。
SDS带来的最大好处就是简化证书管理。要是没有该功能,我们就必须使用Kubernetes中的secret资源创建证书,然后把证书挂载到代理容器中。如果证书过期,还需要更新secret和重新部署代理容器。使用SDS之后,SDS服务器将证书推送到所有Envoy实例上。如果证书过期,服务器只需将新证书推送到Envoy实例,Envoy可以立即使用新证书而无须重新部署。
如果listener server需要从远程获取证书,则listener server不会被标记为active状态,在获取证书之前不会打开其端口。如果Envoy由于连接失败或错误的响应数据而无法获取证书,则listener server将被标记为active,并且打开端口,但是将重置与端口的连接。
上游集群的处理方式类似,如果需要通过SDS从远程获取集群客户端证书,则不会将其标记为active状态,在获得证书之前它不会被使用。如果Envoy由于连接失败或错误的响应数据而无法获取证书,则集群将被标记为active,可以处理请求,但路由到该集群的请求都将被拒绝。
Envoy代理和SDS服务器之间的连接必须是安全的。可以在同一主机上运行SDS服务器,使用Unix Domain Socket进行连接。否则,需要代理和SDS服务器之间的mTLS。在这种情况下,必须静态配置SDS连接的客户端证书。