首页 > 解决方案 > Kubernetes 中微服务之间的身份验证

问题描述

我们有几个用 Java/Kotlin 和 Spring MVC 实现的微服务,在 Tomcat docker 镜像中运行。这些服务提供由用户的 cookie/会话进行身份验证的公共 API。这些工作正常。

现在,我们想创建一个内部端点,无论是在 GKE 之外还是通过某种内部身份验证都无法访问该端点。

特别是对于 Spring MVC 和 GKE,什么是好方法?

编辑:

我想在一项服务上验证不同的端点。例如:

我更愿意在应用程序级别实现这样的身份验证,但我不确定什么是最好的方法。内部 Google IP 的 IP 范围?其他安全识别呼叫者的方法?

也许我的想法很糟糕,如果是这样,我会很乐意改变主意。

标签: spring-mvckubernetesgoogle-kubernetes-engine

解决方案


您的问题不是 GKE 特定的。这是一个广泛的 Kubernetes 问题。

我鼓励您搜索 Kubernetes 服务身份验证。

有很多方法可以做到这一点,包括滚动您自己的身份验证模型。在这里可以提供帮助的一项功能是 Kubernetes NetworkPolicy 资源(它就像防火墙),您可以在此处了解更多信息https://kubernetes.io/docs/concepts/services-networking/network-policies/并在此处查看一些示例:https://github.com/ahmetb/kubernetes-network-policy-recipes(请记住,这是防火墙,而不是身份验证。)

如果您想自动获得此功能,您可以使用 Istio ( https://istio.io ),它允许您在所有服务之间自动设置双向 TLS,而无需更改任何代码。Istio 还为每个工作负载提供了强大的标识。您可以使用 Istio 的身份验证策略在微服务之间设置身份验证,而无需更改应用程序代码,这非常棒:https ://istio.io/docs/tasks/security/authn-policy/


推荐阅读