【问题标题】:Setting a custom call source header with Istio使用 Istio 设置自定义调用源标头
【发布时间】:2020-06-25 10:09:57
【问题描述】:

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

查看来自bookinfo 的示例图像: bookinfo-image (链接由于

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

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

【问题讨论】:

    标签: istio spiffe


    【解决方案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 发送请求来测试它

    【讨论】:

    • 我使用 httpbin:8000/headers 端点检查了这个头文件,并在我的应用程序中转储了所有可用的头文件,但我似乎没有从 istio/envoy 获得这个头文件。也许它在某个地方被过滤掉了。
    • 你应该设置Istio双向TLS认证istio.io/docs/tasks/security/authn-policy
    • 啊,这可能就是它丢失的原因,但我们现在找到了另一种方法,我将在答案中描述。
    【解决方案2】:

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

    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
    

    我们实现了我们想要做的事情。

    【讨论】:

      猜你喜欢
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多