我有一个带有服务的 Kubernetes 集群,我使用 Ambassador 作为外部世界和我的服务之间的 API 网关。
有了大使,我知道我可以使用我拥有的服务来检查传入请求的身份验证和授权,但这是否仅适用于来自集群外部的请求?
我也想拦截服务到服务的调用。
我有一个带有服务的 Kubernetes 集群,我使用 Ambassador 作为外部世界和我的服务之间的 API 网关。
有了大使,我知道我可以使用我拥有的服务来检查传入请求的身份验证和授权,但这是否仅适用于来自集群外部的请求?
我也想拦截服务到服务的调用。
我现在有同样的问题。大使将每个请求路由到身份验证服务(如果提供),身份验证服务可以是任何东西。所以你可以设置http basic auth、oauth、jwt auth等等。接下来要提到的重要一点是,您的服务可能会使用基于标头的路由(https://www.getambassador.io/reference/headers)。仅当存在承载(或类似的东西)时,请求才会命中您的服务,否则将失败。在您的服务中,您可以检查权限等。所以总而言之,大使可以帮助你,但你仍然需要自己编程。
如果您想从一开始就准备好一些东西或更高级的东西,您可以尝试 https://github.com/ory/oathkeeper或https://istio.io。
如果您已经找到了解决方案,那么知道会很有趣。
如果你不能,我会感到惊讶。
这个答案需要一些术语,以避免迷失在单词汤中。
Service
,并且将向大使进行身份验证Service
(选择器将针对其Pod
s)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。