欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Fabric8使用和使用遇到的坑

程序员文章站 2022-07-10 19:41:34
使用pom io.fabric8 kubernetes-client 4.12.0配置加载KubernetesClientfabric8连接k8sMaster有多种方法,我使用的是证书连接applic...

使用

pom

<dependency>
    <groupId>io.fabric8</groupId>
    <artifactId>kubernetes-client</artifactId>
    <version>4.12.0</version>
</dependency>

配置加载KubernetesClient
fabric8连接k8sMaster有多种方法,我使用的是证书连接
Fabric8使用和使用遇到的坑

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);
    }
}

遇到的问题

  1. 通过String加载证书编码问题
    Fabric8使用和使用遇到的坑
    Fabric8使用和使用遇到的坑
    查询资料:
    https://github.com/fabric8io/kubernetes-client/issues/1015
    https://github.com/fabric8io/kubernetes-client/issues/266
    结论:ClientKey可能有两种编码格式base64和非base64编码,但是在处理非编码格式时对ClientKey进行了base64解密从而引发了乱码,导致格式乱码
    Fabric8使用和使用遇到的坑
    解决
    //不管是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")))
    
  2. 通过File加载证书路径问题
    描述: 在使用方法二加载证书文件时路径老是加载错误,跟了代码后发现证书路径必须需是绝对路径
    Fabric8使用和使用遇到的坑
    解决
     .withCaCertFile(Thread.currentThread().getContextClassLoader().getResource("").getPath() + "ca.crt")
    

最后

使用fabric8 CRUD k8s资源对象文档【戳这

本文地址:https://blog.csdn.net/whatzhang007/article/details/109643644