Z.S.K.'s Records

kubernetes学习(Kubernetes集群运行Spark-Job提示Invalid-DER:-object-is-not-integer错误的解决办法)

最近有个同事说他在测试kubernetes中跑spark,在运行spark-job时提示Invalid DER: object is not integer,但是如果在线上环境跑同样的任务就没问题, 束手无措,想让我帮看一下什么问题

问题

在测试Kubernetes执行spark-job时提示的错误完整的如下:

排查

从上面的报错来看, 很明显涉及kubernetes.client的问题, spark用的当然是java的client

首先, 可以排除是spark, 同事可以确认spark版本及spark-job完全一样.

那么很容易就联想到两个环境下的Kubernetes是有区别的, 开先, 我的同事怀疑是用户认证的问题, 这个基本可以排除, 我觉得是kubernetes集群上的区别关系很大, 那么很自然, 从差别着手

首先,发现集群的版本不一致, 测试环境下的kubernetes的版本较低, 那版本的差异很有问题.

上kubernetes的github查找issue, 发现一个相近的问题.

https://github.com/fabric8io/kubernetes-client/issues/1314

kubernetes的java client 在github这个项目https://github.com/fabric8io/kubernetes-client上的issue

再根据提交的代码记录发现问题:

在kubernetes的java client早版本的代码里

在ClientCertificateAuthentication.java这个文件中, 是写死了证书的加密类型只能是RSA, 而测试的kubernetes使用的是minikube搭建的, 默认情况下使用的证书加密类型为EC(Eliptical Curve), 而测试的kubernetes并不支持, 如何查看证书的类型呢, 很简单, cat ca-key.pem, 第一行都标注了证书加密类型.

线上环境没问题是因为kubernetes使用的版本已经支持了EC这种加密类型

解决

所以,问题就很清晰了,有两个解决方案, **要么升级java client, 要么使用RSA的证书类型.**由于spark已经是最新版本的了, 因此只能切换到RSA证书,这其实还是比较麻烦的, 我建议直接使用新版本的kubernetes重新搭建, 也比换证书要快, 比较minikube、kubeadm一键式还是很爽的.

所以, 多多查找对应project的issue, 你遇到的问题, 大概率别人都遇到过.

参考文章:

转载请注明原作者: 周淑科(https://izsk.me)

 wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?