Fabric8使用和使用遇到的坑
使用pom<dependency><groupId>io.fabric8</groupId><artifactId>kubernetes-client</artifactId><version>4.12.0</version></dependency>配置加载KubernetesClientfabric
·
使用
pom
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>4.12.0</version>
</dependency>
配置加载KubernetesClient
fabric8连接k8sMaster有多种方法,我使用的是证书连接
application.yml
kubernetes:
master: ip:port #或者内部调用 host:port (kubernetes.default:6443)
@Data
@Configuration
public class ResPoolConfig {
@Value("${kubernetes.master}")
private String masterUrl;
@Bean
public KubernetesClient k8sClient() {
//方法一读取文件字符串加载,resource文件下
Config config = new ConfigBuilder()
.withMasterUrl(masterUrl)
.withCaCertData(ResourceUtil.readUtf8Str("ca.crt"))
.withClientCertData(ResourceUtil.readUtf8Str("cs_client.crt"))
//.withClientKeyData(Base64.encode(ResourceUtil.readUtf8Str("cs_client.key"))) 这里有个坑
.withClientKeyData(ResourceUtil.readUtf8Str("cs_client.key"))
.build();
return new DefaultKubernetesClient(config);
//方法二加载证书文件
Config config = new ConfigBuilder()
.withMasterUrl(masterUrl)
.withTrustCerts(true)
.withCaCertFile(Thread.currentThread().getContextClassLoader().getResource("").getPath() + "ca.crt")
.withClientCertFile(Thread.currentThread().getContextClassLoader().getResource("").getPath() + "cs_client.crt")
.withClientKeyFile(Thread.currentThread().getContextClassLoader().getResource("").getPath() + "cs_client.key")
.build();
return new DefaultKubernetesClient(config);
}
}
遇到的问题
- 通过String加载证书编码问题
查询资料:
https://github.com/fabric8io/kubernetes-client/issues/1015
https://github.com/fabric8io/kubernetes-client/issues/266
结论:ClientKey可能有两种编码格式base64和非base64编码,但是在处理非编码格式时对ClientKey进行了base64解密从而引发了乱码,导致格式乱码
解决//不管是base64格式还是非base64都进行base64编码 import cn.hutool.core.codec.Base64; import cn.hutool.core.io.resource.ResourceUtil; .withClientKeyData(Base64.encode(ResourceUtil.readUtf8Str("k8sTemplate/cs_client.key")))
- 通过File加载证书路径问题
描述: 在使用方法二加载证书文件时路径老是加载错误,跟了代码后发现证书路径必须需是绝对路径
解决.withCaCertFile(Thread.currentThread().getContextClassLoader().getResource("").getPath() + "ca.crt")
最后
使用fabric8 CRUD k8s资源对象文档【戳这】
更多推荐
已为社区贡献3条内容
所有评论(0)