基于 fabric8 的 kubernetes-client 库 创建 Secret

 

参考原文地址: https://blog.csdn.net/sss294438204/article/details/88741392

 

项目中需要通过SDK 向集群内添加 Secret 资源,于是搜索了很多内容发现相关介绍甚少。仅找到一篇相关文章,按照作者实践步骤测试发现报错。最后翻看官方文档也未能找到想要的答案。后通过自己测试反推找到答案,特此记录如下:

以下是官方文档对 Secret 资源操作的相关示例:

官方文档:https://github.com/fabric8io/kubernetes-client/blob/master/doc/CHEATSHEET.md#secret

上述示例仅为 Opaque 类型数据创建,且实际操作时需要对相关字段进行Base64后才可正常保存。关于 Opaque 类型不再过多叙述。

 

以下是针对 kubernetes.io/dockerconfigjson 类型数据创建(主要也是存储 docker-registy 信息)

 

首先简单分析下我们需要提供的数据格式内容,原格式内容如下:

{"auths":{"registry.cn-beijing.aliyuncs.com":{"username":"myUsername","password":"myPwd","auth":"bXlVc2VybmFtZTpteVB3ZA=="}}}

1. registry.cn-beijing.aliyuncs.com 为 docker-registy 的请求地址。

2. username 为 docker-registy 的用户名。

3. password 为 docker-registy 的密码。

4. auth 为 "用户名:密码"  经过Base64 后的字符串。(注意中间的冒号) encode(myUsername:myPwd) 

 

这个json数据其实也是 docker 的 config.json 文件内容

 

代码部分如下:

private Secret createRegistrySecret(DockerRegistry info){

        Base64.Encoder encoder = Base64.getEncoder();
        // 生成 auth 部分得 Base64 字符串
        String authStr = String.format("%s:%s", info.getUsername(), info.getPassword());
        String enStr = encoder.encodeToString(authStr.getBytes());
        // 将相关 docker-registry 信息替换
        String dataStr =  String.format("{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"auth\":\"%s\"}}}", 
                info.getAddress(), info.getUsername(), info.getPassword(), enStr);
        // 对 JSON 字符串在进行 Base64 加密
        dataStr = encoder.encodeToString(dataStr.getBytes());
        
        // 创建 Secret 资源对象
        Secret registrySecret = new SecretBuilder()
                .withNewMetadata()
                .withName(info.getName())
                .endMetadata()
                .addToData(".dockerconfigjson", dataStr)
                .withType("kubernetes.io/dockerconfigjson")
                .build();
        return registrySecret;
    }

注意事项:

1.  一定要使用 addToData() 方法添加数据

2. addToData() 方法的第一个参数必须是 .dockerconfigjson

3. 需要指定具体类型 .withType("kubernetes.io/dockerconfigjson")

好的,下面是集成 `io.fabric8 kubernetes-client` 的步骤: 1. 在 `pom.xml` 文件中加入 `io.fabric8` 的依赖: ```xml <dependency> <groupId>io.fabric8</groupId> <artifactId>kubernetes-client</artifactId> <version>4.13.0</version> </dependency> ``` 2. 创建 `KubernetesConfig` 类,用于配置 Kubernetes 的连接参数,例如: ```java import io.fabric8.kubernetes.client.Config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class KubernetesConfig { @Value("${kubernetes.master}") private String kubernetesMaster; @Value("${kubernetes.api.token}") private String kubernetesApiToken; @Bean public Config kubernetesConfig() { Config config = new Config(); config.setMasterUrl(kubernetesMaster); config.setBearerToken(kubernetesApiToken); return config; } } ``` 其中,`kubernetes.master` 和 `kubernetes.api.token` 分别是 Kubernetes 的 API Server 地址和 API Token,可以通过配置文件或环境变量来设置。 3. 创建 `KubernetesClient` 类,用于创建 Kubernetes 的客户端对象,例如: ```java import io.fabric8.kubernetes.client.DefaultKubernetesClient; import io.fabric8.kubernetes.client.KubernetesClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class KubernetesClientConfig { @Autowired private Config kubernetesConfig; @Bean public KubernetesClient kubernetesClient() { return new DefaultKubernetesClient(kubernetesConfig); } } ``` 其中,`KubernetesClient` 是 `io.fabric8 kubernetes-client` 中的核心类,用于与 Kubernetes API Server 进行交互。 现在,你就可以在 Spring Boot 应用中使用 `KubernetesClient` 对象来操作 Kubernetes 了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值