我在 K8s 1.22 上运行 Istio 1.14 最小版本
我正在测试网格内部的不同出站连接,它们都失败并出现以下错误:
Execution of class com.microsoft.aad.msal4j.AcquireTokenByAuthorizationGrantSupplier failed.
com.microsoft.aad.msal4j.MsalClientException: javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
或
Cannot send curl request: SSL connect error - trying again
作为测试,我尝试从启用 istio 的 pod 内部进行卷曲:
curl https://www.google.com #this failed
curl http://www.google.com #this worked
然后,经过一番阅读后,我创建了一个 ServiceEntry:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: google
spec:
hosts:
- www.google.com
ports:
- number: 443
name: https
protocol: HTTPS
resolution: DNS
location: MESH_EXTERNAL
这解决了问题,现在curl适用于http和https到google。
我的问题是如何推断这一点以便允许所有出站流量?我无法为我尝试连接的所有外部资源创建服务条目。
抱歉解释不好,但我对 K8s 和 Istio 都很陌生。
在 Istio 安装配置中将 meshConfig.outboundTrafficPolicy.mode 设置为 ALLOW_ANY。
我也遇到了同样的问题,ServiceEntry为出站流量提供了正确的DNS,所以我想也许DNS对我来说是错误的,我的解决方案是将istio-proxy的日志级别更改为debug
istioctl -n my-namespace proxy-config log pod-name --level envoy:info
然后我发现我的出站流量解析到了错误的 dns,这是日志
调试特使过滤器 [C24436] 创建与集群 outbound|443||xxxx-svc.xyz.svc.cluster.local 的连接
然后我转到 xyz 命名空间删除 xxxx-svc,然后所有 https 出站流量都适用于我,无需 ServiceEntry