【发布时间】:2018-12-17 06:40:00
【问题描述】:
我有一个带有服务的 Kubernetes 集群,我使用 Ambassador 作为外部世界和我的服务之间的 API 网关。
通过 Ambassador,我知道我可以使用我拥有的服务来检查传入请求的身份验证和授权,但这是否仅适用于来自集群外部的请求?
我也想拦截服务到服务的调用。
【问题讨论】:
标签: kubernetes kubernetes-security
我有一个带有服务的 Kubernetes 集群,我使用 Ambassador 作为外部世界和我的服务之间的 API 网关。
通过 Ambassador,我知道我可以使用我拥有的服务来检查传入请求的身份验证和授权,但这是否仅适用于来自集群外部的请求?
我也想拦截服务到服务的调用。
【问题讨论】:
标签: kubernetes kubernetes-security
如果你不能,我会很惊讶。
这个答案需要一些术语,以避免迷失在单词汤中。
Service 的消费者,并且将向 Ambassador 进行身份验证Service 的提供者(选择器将定位其Pods)Service 我们将在 z 命名空间中调用 z-service,以获得 z-service.z.svc.cluster.local 的 FQDN
您似乎可以使用 its v-host support 并教它遵守集群内虚拟主机(上述 FQDN),然后更新 z-service 选择器以定位 Ambassador Pod,而不是底层 app-Z Pods。
从 app-A 的角度来看,唯一会改变的是它现在必须为联系 z-service.z.svc.cluster.local 提供身份验证。
如果不进一步研究 Ambassador 的设置,很难知道此时 Ambassador 是否会 Just Work™,或者您是否需要“实施”Service - 例如 z-for-real.z.svc.cluster.local - 以便 Ambassador 知道如何找到实际的 app-Z Pod。
【讨论】:
我现在也有同样的问题。大使将每个请求路由到身份验证服务(如果提供),身份验证服务可以是任何东西。所以你可以设置http basic auth、oauth、jwt auth等等。 下一个要提到的重要事情是您的服务可能使用基于标头的路由 (https://www.getambassador.io/reference/headers)。只有存在承载(或类似的东西)时,请求才会命中您的服务,否则会失败。在您的服务中,您可以检查权限等。所以总而言之,大使可以帮助你,但你仍然需要自己编程。
如果您想从一开始就准备好一些东西或更高级的东西,您可以尝试 https://github.com/ory/oathkeeper 或 https://istio.io。
如果您已经找到了解决方案,那么知道会很有趣。
【讨论】: