利用io.fabric8.kubernetes的api创建secret
前言:自己在做这块的时候发现这方面的资料网上不太多,所以通过看书和网上搜索总结了点东西,方便大家使用一.Secret类型Secret主要是用来保管私密数据用的,所以数据(data)就是最重要的,而类型(type)决定了数据保存的方式,所以重点说一下类型(type)。1.Opaque这种类型通过base64的编码方式来存储数据,是key:value这种格式,如果不对secret进行...
·
前言:自己在做这块的时候发现这方面的资料网上不太多,所以通过看书和网上搜索总结了点东西,方便大家使用
一.Secret类型
Secret主要是用来保管私密数据用的,所以数据(data)就是最重要的,而类型(type)决定了数据保存的方式,所以重点说一下类型(type)。
1.Opaque
这种类型通过base64的编码方式来存储数据,是key:value这种格式,如果不对secret进行设置,那么默认的就是这种类型。
这种类型有点事看着比较直观,但是缺点是加密型很弱。
2.kubernetes.io/dockerconfigjson
这种类型用来存储私有的docker-registy认证信息,对整个存储信息进行base64编码,我的需求就是用这种方式,所以本文主要是讲这种类型。
3.kubernetes.io/service-account-token
用于被serviceaccount引用。未使用过,这里就不多描述。
二、主要代码
//注意()中的内容对应yaml文件中的内容
//这里获取连接k8s的对象,这部分在这章不进行详解
client = k8sClientService.getClientByProjectId(projectId);
//创建Secret对象
Secret secret = new Secret();
//设置库的使用版本(apiVersion: v1)
secret.setApiVersion("v1");
//设置对象类型(kind: Secret)
secret.setKind("Secret");
//创建metadata对象(metadata:)
ObjectMeta om = new ObjectMeta();
//设置secret名称(name:) 注意secret的名称不能含有大写字母,只能是小写字母、数字、中横杠、点
om.setName("test");
//设置secret所在namespace(namespace:)
om.setNamespace("orz");
//添加进metadata对象
secret.setMetadata(om);
//Opaque的方式装载data
/**
* data:
user: MTIzNDU2
password: MTIzNDU2
*/
//加密对象(在java8后,都用java.util下的这个对象,效率很高)
//Base64.Encoder encoder = Base64.getEncoder();
//String user = "admin";
//byte[] userByte = user.getBytes();
//String enuser = encoder.encodeToString(userByte);
//String password = "admin";
//byte[] passwdByte = passwd.getBytes();
//String enpasswd = encoder.encodeToString(passwdByte);
//将加密好的数据放入map中
//Map<String, String> map = new HashMap<>();
//map.put("user", enuser);
//map.put("password", enpasswd);
//使用kubernetes.io/dockerconfigjson的方式来装载data
/**
* data:
.dockerconfigjson: XXX
*/
//将数据格式化一下
/**
* {
auths : {
registryUrl : {
user : name,
password : password
}
}
}
*/
String dockerCfg = String.format("{ " +
" \"auths\": { " +
" \"%s\": { " +
" \"user\": \"%s\", " +
" \"passwd\": \"%s\", " +
" \"email\": \"%s\", " +
" } " +
" } " +
"}",
address,
user,
passwd,
email
);
//必须把数据转化成base64格式的,不然创建会报错
byte[] dockerCfgByte = dockerCfg.getBytes();
dockerCfg = encoder.encodeToString(dockerCfgByte);
Map<String, String> map = new HashMap<>();
map.put(".dockerconfigjson", dockerCfg);
//添加数据到data
secret.setData(map);
//设置secret类型
secret.setType("kubernetes.io/dockerconfigjson");
//创建secret
client.secrets().create(secret);
更多推荐
已为社区贡献1条内容
所有评论(0)