启用Istio的EKS应用中AWS FIS实验执行失败求助
在启用Istio Sidecar注入的EKS命名空间中执行AWS FIS故障注入实验(如Pod终止、Pod CPU压力测试)时失败,报错如下:
ERROR: Error captured while executing... Post "https://x.x.x.x:443/api/v1/namespaces/prod/configmaps": dial tcp x.x.x.x:443: connect: connection refused
ERROR: Fault injection has failed with error: Post "https://x.x.x.x:443/api/v1/namespaces/prod/configmaps": dial tcp x.x.x.x:443: connect: connection refused
未启用Istio的命名空间中实验可正常运行,且已尝试通过traffic.sidecar.istio.io/excludeOutboundIPRanges: x.x.x.x/32将Kubernetes API Server IP加入出站排除列表,但问题仍存在。
以下是几个可尝试的修复方向:
1. 补全出站排除的IP范围
Kubernetes API Server可能存在多个关联IP(如集群内部ClusterIP、外部负载均衡IP),仅排除单个/32 IP可能覆盖不全。先通过命令获取所有相关IP:
# 获取API Server的ClusterIP kubectl get service kubernetes -n default -o jsonpath='{.spec.clusterIP}' # 获取API Server的后端端点IP kubectl get endpoints kubernetes -n default -o jsonpath='{.subsets[*].addresses[*].ip}'
将获取到的所有IP加入traffic.sidecar.istio.io/excludeOutboundIPRanges,示例:
traffic.sidecar.istio.io/excludeOutboundIPRanges: "10.0.0.1/32,192.168.0.1/32"
2. 排除API Server的443端口
除了IP范围,可通过traffic.sidecar.istio.io/excludeOutboundPorts直接排除443端口,避免Istio拦截到API Server的HTTPS请求:
traffic.sidecar.istio.io/excludeOutboundPorts: "443"
该注解可添加到命名空间级别(影响所有注入Sidecar的Pod),或单独添加到AWS FIS实验使用的Pod模板中。
3. 检查Istio全局出站流量配置
如果命名空间级注解不生效,需检查Istio的全局MeshConfig是否有规则覆盖:
kubectl get configmap istio -n istio-system -o yaml | grep -A 20 "outboundTrafficPolicy"
若mode设置为REGISTRY_ONLY,需确保Kubernetes API Server服务被加入Istio服务注册表,或临时改为ALLOW_ANY(生产环境不推荐,仅用于排查):
apiVersion: v1 kind: ConfigMap metadata: name: istio namespace: istio-system data: mesh: | outboundTrafficPolicy: mode: ALLOW_ANY
4. 为实验Pod禁用Istio注入
如果无需Istio介入实验执行,可在AWS FIS的Pod模板中添加注解跳过注入:
annotations: sidecar.istio.io/inject: "false"
这样实验Pod可直接访问Kubernetes API Server,不受Istio拦截影响。
5. 排查网络策略限制
检查是否有Istio AuthorizationPolicy或Kubernetes NetworkPolicy阻止了实验Pod访问API Server:
# 查看命名空间下的Istio授权策略 kubectl get authorizationpolicy -n prod # 查看命名空间下的Kubernetes网络策略 kubectl get networkpolicy -n prod
若存在限制443端口访问的策略,需调整规则允许实验Pod的流量通过。
内容的提问来源于stack exchange,提问作者aparna_shelar

