使用Envoy代理注入kerberos spn授权http标头

时间:2018-06-29 15:43:12

标签: kerberos envoyproxy

对于以Kerberized终结点,我们的控制平面实现提供RDS如下:

对于RouteMatch的匹配前缀“ / someService”,RouteAction路由到WeightedCluster。 Envoy提供了在ClusterWeight级别附加自定义请求标头的方法,因此,作为服务发现的一部分,我们将生成一个spn令牌,并为组成WeightedCluster的所有ClusterWeight设置“ Authorization:Negotiate [spn token]”标头。

(通常在Envoy中,会有一个群集(称为some_service)与“ / someService”相关联,并且该群集将存储运行“ someService”的所有主机(地址)的数组。但是由于Kerberos spn令牌字节是主机名本身的一种功能,由于Envoy不允许在目的地址级别设置请求标头,因此我为与“ someService”(some_service_0,some_service_1等)关联的EACH主机构造了多个“集群”地址,并使用对这些“集群”的引用填充我的ClusterWeights)

此解决方案有效,我可以卷曲localhost:/ someService,并且我的呼叫将被授权到foo.com/someService。

当在控制平面(xds)重新生成令牌之前发出后续请求时,就会出现问题。似乎Kerberos不允许一个人重复使用同一身份验证令牌两次,如果这样做,该请求将被拒绝,并显示“请求是重播”错误。

有人成功将Kerberos授权移交给Envoy吗?如果边车能够处理kerberos授权,而不是由我们的微服务自己来处理它,那就太好了。我能想到的唯一解决方案是生成多个重复的ClusterWeight实例,即使它们指向同一主机,每个ClusterWeight实例也具有其自己的kerberos令牌,并增加xds服务的轮询频率,以便经常重新生成票证,将这些解决方案结合使用只会降低“请求是重播错误”的可能性,而不能消除问题。

0 个答案:

没有答案