通过公司代理访问外部jwksuri

问题描述 投票:0回答:2

我是 istio 新手,对配置请求身份验证策略有疑问。该策略使用 jwksuri,它是一个外部 URI。该策略应用于 istio-system 命名空间。当我应用此策略并执行操作时

>istioctl proxy-status 

应用策略的入口网关 LDS 被标记为过时。如果我删除此策略,网关将返回到 SYNCED 状态。似乎无法访问此 jwksuri,因为我们位于公司代理后面。我创建了服务条目来访问外部 jwks uri,如下所示

kubectl apply -f - <<EOF
apiVersion: 
networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: jwksexternal
 spec:
  hosts:
  - 
authorization.company.com
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS
  location: MESH_EXTERNAL
EOF

还尝试参考本文档创建另一个服务条目“配置到外部代理的流量”https://istio.io/latest/docs/tasks/traffic-management/egress/http-proxy/

但这不起作用。我应该如何在 Istio 中配置公司代理。

编辑这是 istiod 中的日志(请注意 https://authorization.company.com/jwk 是外部网址)

2021-06-02T14:35:39.423938Z error model Failed to fetch public key from "https://authorization.company.com/jwk": Get "https://authorization.company.com/jwk": dial tcp: lookup authorization.company.com on 10.X.0.X:53: no such host
2021-06-02T14:35:39.423987Z error Failed to fetch jwt public key from "https://authorization.company.com/jwk": Get "https://authorization.company.com/jwk": dial tcp: lookup authorization.company.com on 10.X.0.X:53: no such host
2021-06-02T14:35:39.424917Z info ads LDS: PUSH for node:istio-ingressgateway-5b69b5448c-8wbt4.istio-system resources:1 size:4.5kB
2021-06-02T14:35:39.433976Z warn ads ADS:LDS: ACK ERROR router~10.X.48.X~istio-ingressgateway-5b69b5448c-8wbt4.istio-system~istio-system.svc.cluster.local-105 Internal:Error adding/updating listener(s) 0.0.0.0_8443: Provider 'origins-0' in jwt_authn config has invalid local jwks: Jwks RSA [n] or [e] field is missing or has a parse error

无法找到此问题的解决方法。截至目前,已将 jwks 嵌入到 jwt 规则中。但这有一个问题,每当公钥密钥轮换时。jwt 规则就会失败。这是一个代理问题,但不知道如何绕过

istio istio-sidecar istio-gateway
2个回答
1
投票

默认情况下,Istio 允许流量到达外部系统。

请参阅 https://istio.io/latest/docs/tasks/traffic-management/egress/egress-control/#change-to-the-blocking-by-default-policy

因此,如果问题是无法访问 JWKS URL,很可能不是因为 Istio,ServiceEntry 也无济于事。我猜问题可能出在其他地方,而不是在 Istio 中。


0
投票

最终对我有用的是在下面运行,它调用

istioctl
来更新 istiod pod 中的代理环境参数。一旦我这样做了,它就遇到了与 10.96.0.1 通信的问题,并将其添加到 NO_PROXY 中修复了这个问题。现在它可以从外部 jwks_uri 提取密钥并完成 JWT 身份验证(注意:我还为我的代理和 jwks 主机添加了 istio ServiceEntry...尚未测试删除它,但我认为它们是必需的)

echo '
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    pilot:
      k8s:
        env:
        - name: HTTPS_PROXY
          value: "http://youproxy.com:8080"
        - name: NO_PROXY
          value: "10.96.0.1"
' | istioctl install -y -f -
© www.soinside.com 2019 - 2024. All rights reserved.