我正在使用 keycloak 在由 API Gatware 大使管理的 kubernetes 集群中实现 OAuth2 代码授权流程,我正在使用 Istio 服务网格将所有可追溯性、mTLS 功能添加到我的集群中。其中之一是 Jaeger,它要求所有服务转发
x-request-id
标头,以便将跨度链接到特定跟踪。
当发送请求时,Istio 附加到大使的代理将生成 x-request-id 并转发请求 keycloak 进行授权,当结果发送回大使时,标头被丢弃,因此 keycloak 的 istio 代理将正在生成一个新的
x-header-id
。下图显示了问题:
这是我丢失 x-request-id 的痕迹的照片:
有没有办法可以强制 Keycloak 转发
x-request-id
标头(如果传递给它)?
更新 这是与 Keycloak 关联的环境变量(ConfigMap):
kind: ConfigMap
apiVersion: v1
metadata:
name: keycloak-envars
data:
KEYCLOAK_ADMIN: "admin"
KC_PROXY: "edge"
KC_DB: "postgres"
KC_DB_USERNAME: "test"
KC_DB_DATABASE: "keycloak"
PROXY_ADDRESS_FORWARDING: "true"
您可能需要使用环境变量
PROXY_ADDRESS_FORWARDING=true
重新启动keycloak docker容器。
docker run -e PROXY_ADDRESS_FORWARDING=true jboss/keycloak
keycloak 似乎有默认禁用的 opentelemetry 插件。启用它允许将跟踪 ID 发送到 Jaeger,您可以通过将
KC_OTEL
设置为 True 来启用它。有关更多信息,请参阅doc。