使用

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

遇到的问题

  1. 通过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")))
    
  2. 通过File加载证书路径问题
    描述: 在使用方法二加载证书文件时路径老是加载错误,跟了代码后发现证书路径必须需是绝对路径
    在这里插入图片描述
    解决
     .withCaCertFile(Thread.currentThread().getContextClassLoader().getResource("").getPath() + "ca.crt")
    

最后

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

Logo

开源、云原生的融合云平台

更多推荐