1

我有一个带有服务的 Kubernetes 集群,我使用 Ambassador 作为外部世界和我的服务之间的 API 网关。

有了大使,我知道我可以使用我拥有的服务来检查传入请求的身份验证和授权,但这是否仅适用于来自集群外部的请求?

我也想拦截服务到服务的调用。

4

2 回答 2

0

我现在有同样的问题。大使将每个请求路由到身份验证服务(如果提供),身份验证服务可以是任何东西。所以你可以设置http basic auth、oauth、jwt auth等等。接下来要提到的重要一点是,您的服务可能会使用基于标头的路由(https://www.getambassador.io/reference/headers)。仅当存在承载(或类似的东西)时,请求才会命中您的服务,否则将失败。在您的服务中,您可以检查权限等。所以总而言之,大使可以帮助你,但你仍然需要自己编程。

如果您想从一开始就准备好一些东西或更高级的东西,您可以尝试 https://github.com/ory/oathkeeperhttps://istio.io

如果您已经找到了解决方案,那么知道会很有趣。

于 2018-10-28T10:31:16.893 回答
0

如果你不能,我会感到惊讶。

这个答案需要一些术语,以避免迷失在单词汤中。

  • App-A 是集群内的消费者Service,并且将向大使进行身份验证
  • App-Z 是集群内的提供者Service(选择器将针对其Pods)
  • Service我们将z-service在命名空间中调用 app-Z的 k8s z,其 FQDN 为z-service.z.svc.cluster.local

似乎您可以使用它的 v-host 支持并教它遵守集群内虚拟主机(前面提到的 FQDN),然后更新z-service选择器以针对Ambassador Pod,而不是底层的 app-Z Pod。

从 app-A 的角度来看,唯一会改变的是它现在必须为联系提供身份验证z-service.z.svc.cluster.local

如果不深入研究 Ambassador 的设置,就很难知道此时 Ambassador 是否会 Just Work™,或者您是否需要“实施” Service——例如z-for-real.z.svc.cluster.local——以便让 Ambassador 知道如何找到实际的 app-Z Pod。

于 2018-07-10T05:18:17.243 回答