我正在尝试使用teh fabric8 java客户端在Azure上的K8s群集上创建命名空间。这是代码
@Before
public void setUpK8sClient() {
apiServer = "";
config = new ConfigBuilder().withMasterUrl(apiServer).withUsername("user").withPassword("pass").build();
client = new DefaultKubernetesClient(config);
System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true");
}
@Test
public void getClientVersion() {
System.out.println("Client version "+client.getApiVersion());
}
@Test
public void createNamespace() {
Namespace myns = client.namespaces().createNew()
.withNewMetadata()
.withName("myns")
.addToLabels("a", "label")
.endMetadata()
.done();
System.out.println("Namespace version " + myns.getStatus());
}
这给了我以下错误
一世
o.fabric8.kubernetes.client.KubernetesClientException: Failure executing: POST at: "https://...api/v1/namespaces. Message: Unauthorized! Token may have expired! Please log-in again. Unauthorized
我错过了什么?
由于您正在使用Azure,我猜您可以关注the instructions to configure kubectl,然后使用kubeconfig文件中的令牌从fabric8客户端访问群集。
该令牌可能是管理员令牌,因此如果您想限制fabric8客户端可以执行的操作,您还可以创建新凭据(用户/密码)。 API requests are tied to either a normal user or a service account, or are treated as anonymous requests。
kubectl create serviceaccount ACCOUNT_NAME
命令。这将在当前命名空间中创建一个服务帐户,并创建一个关联的秘密,用于保存API服务器的公共CA和签名的JSON Web令牌(JWT)。