在微服务场景中,每个 web-api 容器都应该通过 HTTPS 为自己提供服务,还是可以通过 HTTP 在内部工作并为所有入口配置证书并重定向到容器的 80 端口?
我认为最简单的方法是仅保护外部流量,因为要配置 Asp.Net Core WebAPI 以通过 HTTPS 为其自身(例如,kestrel)提供服务,您必须将证书挂载到卷中并提供证书密码。这有点复杂。
最佳做法是什么?
答案1
这取决于需求和资源,如果您有 On-Prem 或裸机等。
无需确保交通安全
如果没有关于保护集群内部客户端流量的要求,则可以终止PodSSL
上的客户端连接并在 Pod 之间ingress-controller
使用。HTTP
安全要求
如果需要确保客户端流量到达目标 pod 的安全,可以通过两种方式获取。
L3 LoadBalancer
和节点端口,配置有SSL 密码在Ingress
。- 如果需要使用流量
SSL
但不需要SSL
直接传送到指定的Pod
,则通过配置实现它会更容易Istio与 网格化mTLS
。此选项将允许您使用 HTTP 标头路由流量,并且您无需手动管理证书。请检查这了解更多信息。
由于最佳实践总是倾向于尽可能地保证安全,因此始终建议使用安全连接。尽管如此,有些场景并不需要这样做。
答案2
如果您的集群在云中运行并使用外部云平衡器,您的入口和 pod 可能位于不同的机器或数据中心。在这种情况下,您确实应该从入口到 pod 强制实施 TLS。
无论如何,负载均衡器和您的集群应该位于同一个(希望是受限制的)VPC 中。
答案3
这还取决于您要防范的攻击媒介。
如果您担心有人会嗅探您的 Kubernetes 节点之间的流量,那么您可以考虑使用支持加密的网络插件(CNI)(例如 WeaveNet),或者您可以使用 Wireguard 或 OpenVPN 将所有节点置于 VPN 网络上。
如果您想要保护集群上的服务彼此不受干扰,那么您应该考虑使用 Istio 之类的工具来加密 pod 之间的流量。