管理员是否应该在 kubernetes 网络内部强制执行 HTTPS,还是仅针对外部流量(通过入口)?

管理员是否应该在 kubernetes 网络内部强制执行 HTTPS,还是仅针对外部流量(通过入口)?

在微服务场景中,每个 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 之间的流量。

相关内容