spring-mvc - Kubernetes 中微服务之间的身份验证
问题描述
我们有几个用 Java/Kotlin 和 Spring MVC 实现的微服务,在 Tomcat docker 镜像中运行。这些服务提供由用户的 cookie/会话进行身份验证的公共 API。这些工作正常。
现在,我们想创建一个内部端点,无论是在 GKE 之外还是通过某种内部身份验证都无法访问该端点。
特别是对于 Spring MVC 和 GKE,什么是好方法?
编辑:
我想在一项服务上验证不同的端点。例如:
/public/
- 没有授权/private/
- 用户必须登录/internal/
- 只有其他微服务可以访问
我更愿意在应用程序级别实现这样的身份验证,但我不确定什么是最好的方法。内部 Google IP 的 IP 范围?其他安全识别呼叫者的方法?
也许我的想法很糟糕,如果是这样,我会很乐意改变主意。
解决方案
您的问题不是 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/
推荐阅读
- maven - 有没有办法指定不使用 -D 的 Maven 配置文件别名或多个配置文件 ID?
- google-maps - 谷歌地图 API 未经 Flutter 应用授权
- r - Rcpp 和 int64 NA 值
- javascript - 如何避免使用 Webpack 执行未导入的导出?
- icons - 泪滴包括 Mapbox-gl 中的图标
- r - 使用指数模型进行预测
- xml - 我可以将我的 android 应用程序 xml 文件转换为 adobe xD 文件吗?
- java - 检查 JTextField 的内容,然后存储在 String 以从另一个类访问
- javascript - 以特定方式对饼图图例进行 Echart 配置
- rollup - rollup,如何同时捆绑 .css 和 min.css