我是 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 允许流量到达外部系统。
因此,如果问题是无法访问 JWKS URL,很可能不是因为 Istio,ServiceEntry 也无济于事。我猜问题可能出在其他地方,而不是在 Istio 中。
最终对我有用的是在下面运行,它调用
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 -