我使用Kubernetes和Istio进行了设置,我们在其中运行了一组服务。我们的每项服务都有一个istio-sidecar和REST-api。我们想要的是,只要我们的设置中的一个服务调用另一个服务,被调用的服务就会知道调用者是哪个服务(最好通过标头)。
看bookinfo中的示例图像: bookinfo-image(由于<10声望而链接) 这意味着在评分服务的源代码中,我希望能够例如读取一个标头,告诉我该请求来自例如评论-v2。
我的直觉告诉我,我应该能够在istio边车上进行处理,但是我无法确切地知道如何实现。
直到现在,我一直特别关注envoy filters,希望他们能为我提供帮助。我看到对于特使过滤器,我可以设置一个标头,但是我看不到如何获取有关调用该服务的信息以便在标头中进行设置。
答案 0 :(得分:1)
Envoy自动设置X-Forwarded-Client-Cert头,其中包含调用者的SPIFFE ID。 Istio中的SPIFFE ID是spiffe://cluster.local/ns/<namespace>/sa/<service account>
格式的URI。实际上,它指定呼叫者的Kubernetes服务帐户。您可能希望通过使用Istio httpbin示例并将请求发送到httpbin:8000/headers
答案 1 :(得分: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
我们实现了尝试要做的事情。