当前位置: 首页 > news >正文

SpringBoot集成kubernetes-client升级k8s后初始化失败问题

SpringBoot集成kubernetes-client升级k8s后初始化失败问题

1.问题描述

程序以前使用的k8s版本是1.16,fabric8.kubernetes-client的版本是4.10.2,springboot版本是2.3.5。由于环境切换,这次需要升级k8s的版本,现在将k8s版本升级到了1.26,程序中使用了新配置的certificate-authority-data,client-certificate-data等。程序中原本初始化写法如下:

config = new ConfigBuilder().withMasterUrl(server).withCaCertData(certificateAuthorityData).withClientCertData(clientCertificateData).withClientKeyData(clientKeyData).build();
LogUtil.info(LogEnum.BIZ_K8S, "config信息为{}", JSON.toJSONString(config));
client = new DefaultKubernetesClient(config);

但是程序启动缺出现了问题,问题如下:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.dubhe.k8s.utils.K8sUtils]: Factory method 'k8sUtils' threw exception; nested exception is io.fabric8.kubernetes.client.KubernetesClientException: An error has occurred.at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]... 61 common frames omitted
Caused by: io.fabric8.kubernetes.client.KubernetesClientException: An error has occurred.at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:64) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:53) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.utils.HttpClientUtils.createHttpClient(HttpClientUtils.java:234) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.utils.HttpClientUtils.createHttpClient(HttpClientUtils.java:63) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.BaseClient.<init>(BaseClient.java:51) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.DefaultKubernetesClient.<init>(DefaultKubernetesClient.java:133) ~[kubernetes-client-4.10.2.jar:na]at org.dubhe.k8s.utils.K8sUtils.<init>(K8sUtils.java:93) ~[classes/:na]at org.dubhe.k8s.config.K8sConfig.k8sUtils(K8sConfig.java:91) ~[classes/:na]at org.dubhe.k8s.config.K8sConfig$$EnhancerBySpringCGLIB$$77270501.CGLIB$k8sUtils$10(<generated>) ~[classes/:na]at org.dubhe.k8s.config.K8sConfig$$EnhancerBySpringCGLIB$$77270501$$FastClassBySpringCGLIB$$1f42aed6.invoke(<generated>) ~[classes/:na]at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.2.10.RELEASE.jar:5.2.10.RELEASE]at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.2.10.RELEASE.jar:5.2.10.RELEASE]at org.dubhe.k8s.config.K8sConfig$$EnhancerBySpringCGLIB$$77270501.k8sUtils(<generated>) ~[classes/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_321]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_321]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_321]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_321]at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]... 62 common frames omitted
Caused by: java.io.IOException: Invalid DER: object is not integerat io.fabric8.kubernetes.client.internal.PKCS1Util$Asn1Object.getInteger(PKCS1Util.java:125) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.internal.PKCS1Util.next(PKCS1Util.java:55) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.internal.PKCS1Util.decodePKCS1(PKCS1Util.java:46) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.internal.CertUtils.handleOtherKeys(CertUtils.java:175) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.internal.CertUtils.loadKey(CertUtils.java:135) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.internal.CertUtils.createKeyStore(CertUtils.java:113) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.internal.CertUtils.createKeyStore(CertUtils.java:245) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.internal.SSLUtils.keyManagers(SSLUtils.java:128) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.internal.SSLUtils.keyManagers(SSLUtils.java:122) ~[kubernetes-client-4.10.2.jar:na]at io.fabric8.kubernetes.client.utils.HttpClientUtils.createHttpClient(HttpClientUtils.java:120) ~[kubernetes-client-4.10.2.jar:na]... 77 common frames omitted

2.问题分析

然后就上网去查找资料,但是搜索了很多,都没有找到有用的信息。只好自己一点点debug去查看源代码。debug的时候看到build的时候会先去读配置文件,这让我想到了之前做的一个项目,那个项目使用的是io.kubernetes client-java这个依赖包。我再开发的时候会将config文件放在系统路径下。又换了一种创建方式:

Config config = new ConfigBuilder().build();

于是按照这种方式也将config放在相应的路径下,程序果然可以去建立连接,自测创建pod也是成功的。

由于一个读取的是配置文件,一个读取的是配置在nacos配置中心的配置,两个的配置信息毫无差别,但是执行结果就是不一样。然后再去debug去看两中配置问题到底有何不一样。最后发现Config中的clientKeyAlgo中赋值不同,读取nacos中的配置产生的算法是RSA,读取config配置文件产生的是EC。

然后我将系统路径下的config文件移除,将原本程序改为:

Config config = new ConfigBuilder().withMasterUrl(server)         .withCaCertData(certificateAuthorityData)         .withClientCertData(clientCertificateData)         .withClientKeyData(clientKeyData)         .withClientKeyAlgo("EC")         .build();

发现也成功了。由于时间关系,就没有仔细去看为什么读取nacos中的配置产生的是RSA,读取config配置文件产生的是EC。

3.解决办法

最终解决方案是:

1.在程序启动的包设置config环境变量,让程序读取config文件;设置了config文件后,就可以用Config config = new ConfigBuilder().build();这种方式创建。

2.依然去读取nacos中的配置(certificate-authority-data,client-certificate-data),在程序Builder时手动设置ClientKeyAlgo。

相关文章:

SpringBoot集成kubernetes-client升级k8s后初始化失败问题

SpringBoot集成kubernetes-client升级k8s后初始化失败问题 1.问题描述 程序以前使用的k8s版本是1.16&#xff0c;fabric8.kubernetes-client的版本是4.10.2&#xff0c;springboot版本是2.3.5。由于环境切换&#xff0c;这次需要升级k8s的版本&#xff0c;现在将k8s版本升级到…...

MySQL 学习笔记

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 MySQL 学习笔记1、DQL 查询语句1.1、基本查询1.2、函数查询1.2.1、单行函数1.2.2、聚合函数 1.3、复杂查询1.3.1、连接查询1.3.2、子查询 1.4、SQL 语句 执行顺序 2、DDL 定义语句2.1、…...

Docker 的常用命令

0 基本命令 概述 [root192 home]# docker --helpUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersOptions:--config string Location of client configfiles (default "/root/.docker")-c, --context string Name of the context…...

嵌入式-电子电路四个基本定律

目录 1、欧姆定律 2、焦耳定律 3、基尔霍夫电流定律 4、基尔霍夫电压定律 1、欧姆定律 欧姆定律是关于导体两端电压与导体中电流关系的定律。具体表述为&#xff1a;在同一电路中&#xff0c;通过某段导体的电流跟这段导体两端的电压成正比&#xff0c;跟这段导体的电阻成反…...

【linux命令讲解大全】083.Linux 常用命令ispell , spell , atrm, chattr

文章目录 ispell补充说明语法参数 spell补充说明语法参数 atrm补充说明语法选项参数 实例 chattr补充说明语法选项 实例 从零学 python ispell 检查文件中出现的拼写错误。 补充说明 ispell命令用于检查文件中出现的拼写错误。 语法 ispell [参数] 参数 文件&#xff1a…...

JAVA实现SAP接口

JAVA实现SAP接口 环境spring-bootmaven 1.maven依赖 <dependency><groupId>com.github.virtualcry</groupId><artifactId>sapjco-spring-boot-starter</artifactId><version>3.1.4</version></dependency>2.配置文件 applic…...

华南理工大学811信号与系统考研分数线,招生人数,报考统计,考情分析,就业,真题,大纲,参考书,华工811

华南理工大学811信号与系统考研分数线&#xff0c;招生人数&#xff0c;报考统计&#xff0c;考情分析&#xff0c;就业&#xff0c;真题&#xff0c;大纲&#xff0c;参考书&#xff0c;华工811 华南理工大学811信号与系统考研分数线&#xff0c;招生人数&#xff0c;报考统…...

Android 字符串 占位符

在 Android 中&#xff0c;字符串中的 % 后面跟着的字符称为格式化占位符&#xff0c;用于指示在运行时将值插入到字符串中的位置&#xff0c;并指定插入的值的类型。常见的格式化占位符类型如下&#xff1a; %s&#xff1a;字符串占位符。它用于插入字符串值。 String name …...

vue页面添加水印(可用于H5,APP)

vue页面添加水印 背景实现新建vue组件使用效果 尾巴 背景 最近实现了一个小功能&#xff0c;就是给页面添加背景水印。实现思路就是定义一个宽高充满屏幕的组件&#xff0c;然后使用绝对定位并通过层级控制让水印显示在页面的最前端。 实现 代码相对简单&#xff0c;相信有点…...

下载git

1.官网下载可能会有访问失败 2.用其他的镜像源下载 快 准 狠 CNPM Binaries Mirror...

MSYS2 如何切换镜像源(附带脚本自动修改)

这篇文章将总结【如何切换MSYS2镜像】&#xff0c;其实比较简单&#xff0c;但还是记录一下吧。 下面示例中附带一个脚本&#xff0c;这样你就不用一个个手动修改了。 1. 镜像服务配置文件 MSYS2 的所有镜像服务配置&#xff0c;都在其安装路径下的etc/pacman.d目录下 可以看到…...

使用ICMP协议来判断UDP端口的存活状态

我们使用了原始套接字&#xff08;socket.SOCK_RAW&#xff09;来发送和接收ICMP消息&#xff0c;也就是通过模拟ICMP协议来进行UDP端口的探测。我们构造了一个简单的ICMP数据包&#xff0c;并将其发送到目标主机的特定端口。然后&#xff0c;我们等待接收目标主机返回的ICMP消…...

VUE for循环 默认选中第一条数据

for循环渲染列表默认选中第一条数据 点击其他选项切换数据 <div><div class"Subtitle" style"padding: 5px 40px;">项目清单</div><div class"project-manifest"><div v-for"(item, index) in project" :…...

小程序代码管理

“微信开发者工具”点击版本管理&#xff0c;然后点击代码管理会打开代码管理网页。 选择对应的项目组。 进来后点击创建项目。 输入git名称&#xff0c;然后选择命名空间&#xff0c;最后创建即可。 在刚才的“微信开发者工具”选择设置&#xff0c;然后添加远程。 输入名称&…...

RK3568-GPIO控制

RK3568-GPIO控制 1. Sysfs接口 实现逻辑 芯片的GPIO由芯片的GPIO控制器来管理&#xff0c;GPIO控制器封装在芯片内部&#xff0c;控制器的驱动芯片厂家已经写好了。RK3568有五组GPIO控制器&#xff0c;每组管理32个引脚&#xff0c;对应/dev下的gpiochip0~4的设备节点。 Lin…...

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书南京师范大学图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书南京师范大学图书馆...

【MySQL】什么是索引?如何选择索引类型?

什么是索引&#xff1f;索引原理索引的种类索引的优缺点感谢 &#x1f496; 在关系型数据库中&#xff0c;索引是一项重要的技术&#xff0c;它可以显著提高查询性能&#xff0c;加速数据检索过程。MySQL作为最流行的关系型数据库之一&#xff0c;也支持多种类型的索引 什么是索…...

第16章 服务安全控制

mini商城第16章 服务安全控制 一、课题 服务安全控制 二、回顾 1、MyBatis查询Apache Druid 2、热门商品处理 3、秒杀抢单操作 三、目标 1、Gateway限流 Gateway限流方案 基于令牌桶限流实现 2、Nginx限流 Nginx速率限流 Nginx并发量限流 3、Redis集群应用 Redis集群搭…...

面试问题总结(1)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…...

QUdpSocket Class

继承自 QAbstractSocket 类 QUdpSocket类提供UDP套接字。 UDP(用户数据报协议)是一种轻量级、不可靠、面向数据报、无连接的协议。它可以在可靠性不重要的情况下使用。QUdpSocket是QAbstractSocket的一个子类&#xff0c;它允许您发送和接收UDP数据报。 使用这个类最常见的方法…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...