在EKS部署Apache Ignite 2.15.0时遭遇SSL握手失败异常求助
问题解决:EKS部署Apache Ignite 2.15.0出现SSL握手失败异常
问题分析
异常核心是javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure——你虽然未给Ignite集群启用SSL,但Ignite的Kubernetes IP Finder组件需要调用EKS API Server获取Pod地址,而EKS API默认使用HTTPS通信,这一过程的SSL握手失败导致了发现组件无法正常工作。
解决方案
1. 确保服务账号权限与CA证书挂载
EKS中Pod默认通过服务账号访问API Server,需满足两个前提:
- 为Ignite Pod绑定的服务账号拥有
list、watchPod资源的权限 - Pod内
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt文件存在且可读取(这是EKS自动挂载的CA证书,用于验证API Server的SSL证书)
如果未配置专用服务账号,可创建以下资源:
# 服务账号 apiVersion: v1 kind: ServiceAccount metadata: name: ignite-sa namespace: your-namespace # 自定义角色 apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: ignite-pod-reader namespace: your-namespace rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] # 角色绑定 apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: ignite-sa-binding namespace: your-namespace subjects: - kind: ServiceAccount name: ignite-sa namespace: your-namespace roleRef: kind: Role name: ignite-pod-reader apiGroup: rbac.authorization.k8s.io
然后在Ignite Deployment中指定该服务账号:
spec: template: spec: serviceAccountName: ignite-sa
2. 显式指定CA证书路径
若Ignite未自动识别默认CA证书路径,可在配置中强制指定:
XML配置方式
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> <property name="ipFinder"> <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder"> <property name="namespace" value="your-namespace"/> <property name="caCertPath" value="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"/> </bean> </property> </bean>
环境变量配置方式
env: - name: IGNITE_TCP_DISCOVERY_KUBERNETES_CA_CERT_PATH value: "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
3. 验证API Server连通性
在Ignite Pod内执行以下命令,测试SSL握手是否正常:
curl -v https://kubernetes.default.svc.cluster.local/api/v1/namespaces/your-namespace/pods --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
如果能正常返回Pod列表,说明SSL基础配置没问题,需检查Ignite的发现组件配置;如果仍握手失败,排查EKS API Server证书有效性或Pod网络策略是否允许访问API Server。
4. 自定义JVM信任库(可选)
若EKS CA证书不在Ignite使用的JVM默认信任库中,可在构建自定义镜像时导入证书:
keytool -importcert -file /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -alias eks-ca -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt
或启动Ignite时指定自定义信任库参数:
ignite.sh -J-Djavax.net.ssl.trustStore=/path/to/custom-truststore.jks -J-Djavax.net.ssl.trustStorePassword=your-password
内容的提问来源于stack exchange,提问作者user2223296
相关产品推荐
相关产品推荐

