0

我有一个使用 Kubernetes 和 Istio 的设置,我们在其中运行一组服务。我们的每个服务都有一个 istio-sidecar 和一个 REST-api。我们想要的是,每当我们设置中的服务调用另一个服务时,被调用的服务知道调用者是什么服务(最好通过标头)。

查看来自bookinfo的示例图像: bookinfo-image(由于 <10 信誉而链接)这意味着在评级服务的源代码中,我希望能够例如读取一个标题,告诉我请求来了来自例如评论-v2。

我的直觉告诉我,我应该能够在 istio sidecars 中处理这个问题,但我不知道具体是怎么做的。

到目前为止,我一直特别关注特使过滤器,希望它们可以帮助我。我看到对于特使过滤器,我可以设置一个标头,但我没有看到的是如何获取有关哪个服务进行调用的信息以便将其设置在标头中。

4

2 回答 2

2

Envoy 自动设置X-Forwarded-Client-Cert标头,其中包含调用者的 SPIFFE ID。Istio 中的 SPIFFE ID 是 URI 形式的spiffe://cluster.local/ns/<namespace>/sa/<service account>。实际上,它指定调用者的 Kubernetes 服务帐户。您可能想通过使用 Istio httpbin示例并发送请求来测试它httpbin:8000/headers

于 2019-09-25T13:50:43.780 回答
1

我最终通过使用“规则”找到了另一种解决方案。如果我们确保启用了策略执行,然后添加了规则:

apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
  name: header-rule
  namespace: istio-system
spec:
  actions: []
  requestHeaderOperations:
    - name: serviceid
      values:
      - source.labels["app"]
      operation: REPLACE

我们实现了我们试图做的事情。

于 2019-09-25T15:48:26.097 回答