天天看點

利用io.fabric8.kubernetes的api建立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);
           

繼續閱讀