首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Kubernetes (Istio)中将头转发给不同的服务

如何在Kubernetes (Istio)中将头转发给不同的服务
EN

Stack Overflow用户
提问于 2019-11-26 18:25:47
回答 2查看 1.5K关注 0票数 1

我有一个示例应用程序(web-app、后端-1、后端-2)部署在minikube上,所有这些应用程序都是在JWT策略下部署的,它们都有正确的目的地规则、Istio sidecar和MTLS,以确保东西通信的安全。

代码语言:javascript
复制
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: oidc
spec:
  targets:
  - name: web-app
  - name: backend-1
  - name: backend-2
  peers:
  - mtls: {}
  origins:
  - jwt:
      issuer: "http://myurl/auth/realms/test"
      jwksUri: "http://myurl/auth/realms/test/protocol/openid-connect/certs"
  principalBinding: USE_ORIGIN

当我运行以下命令时,当从后端请求数据时,我会收到401个未经授权的响应,这是因为$TOKEN在http请求期间没有被转发到后端-1和后端-2报头。

代码语言:javascript
复制
$> curl http://minikubeip/api "Authorization: Bearer $TOKEN"

有没有一种方法可以使用本地kubernetes/istio将http头转发到后端-1和后端-2?我是否被迫对应用程序代码进行更改以完成这一任务?

编辑:,这是我应用oidc策略后遇到的错误。当我卷曲web应用程序时,我得到了

{“错误”:[{“代码”:“APP_ERROR_CODE”,“消息”:“401未经授权”}

请注意,当我使用相同的auth令牌卷曲后端-1或后端-2时,我会得到适当的数据。此外,目前没有其他目的地规则/策略应用于这些服务,策略强制执行正在进行,我的istio版本为1.1.15。这是我所适用的政策:

代码语言:javascript
复制
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: default
  namespace: default
spec:
  # peers:
  # - mtls: {}
  origins:
  - jwt:
      issuer: "http://10.148.199.140:8080/auth/realms/test"
      jwksUri: "http://10.148.199.140:8080/auth/realms/test/protocol/openid-connect/certs"
  principalBinding: USE_ORIGIN
EN

回答 2

Stack Overflow用户

发布于 2019-11-30 18:08:07

令牌是否应该在没有任何其他更改的情况下传播到后端-1和后端-2?

是的,策略应该同时将令牌转移到后端-1和后端-2。

有一个github问题,用户和您一样有相同的问题。

以下是一些信息:

JWT由特使过滤器进行验证,因此您必须检查特使日志。有关代码,请参见身份验证 filter检索过滤器要使用的JWKS (它被内联到特使配置中),您可以在pilot/pkg/security中找到它的代码

这也是堆栈过流的另一个问题

如获接纳的答案是:

该问题通过两个选项得到解决: 1.将服务名称和端口替换为外部服务器ip和外部端口(用于发行者和jwksUri) 2.禁用mTLS及其策略的使用(已知问题:https://github.com/istio/istio/issues/10062)。

从istio文档

对于每个服务,Istio应用最窄的匹配策略。顺序是:服务特定的>命名空间范围的>网格范围的。如果多个特定于服务的策略匹配一个服务,Istio将随机选择其中的一个。运算符在配置策略时必须避免此类冲突。 为了对网格范围和命名空间范围的策略执行唯一性,Istio每个网格只接受一个身份验证策略,每个命名空间只接受一个身份验证策略。Istio还要求具有特定名称默认值的网格范围和命名空间范围的策略。 如果服务没有匹配策略,则将禁用传输身份验证和源身份验证。

票数 1
EN

Stack Overflow用户

发布于 2020-11-26 10:37:58

Istio支持头传播。可能在创建这个线程时不支持。

您可以通过使用forwardOriginalToken:true在JWTRules或使用JWTRules中的outputPayloadToHeader转发有效的JWT有效负载来转发原始报头。

参考资料:ISTIO JWTRule文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59057270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档