【问题标题】:Can I use the Ambassador to authenticate service-to-service communication inside a Kubernetes cluster?我可以使用 Ambassador 来验证 Kubernetes 集群内的服务到服务通信吗?
【发布时间】:2018-12-17 06:40:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: kubernetes kubernetes-security


    【解决方案1】:

    如果你不能,我会很惊讶。

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

    • App-A 是集群内 Service 的消费者,并且将向 Ambassador 进行身份验证
    • App-Z 是集群内Service 的提供者(选择器将定位其Pods)
    • app-Z 的 k8s 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。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我尝试使用我的自定义 spring security oauth2 和 istio,但使用 policy 或 requestauthentication 没有成功,使用与 Ambassador 相同的自定义安全性,要遵循的步骤是什么? tks
      • @TiagoMedici 您应该创建自己的问题。评论字段不足以正确回答您的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 2018-08-22
      • 2019-12-24
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多