尝试在K8S中创建新命名空间时出现未经授权的错误

时间:2017-12-26 16:12:14

标签: https kubernetes unauthorized fabric8

我正在尝试使用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

我错过了什么?

1 个答案:

答案 0 :(得分:1)

由于您正在使用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

  • 假设普通用户由外部独立服务(私钥,Google帐户等第三方,甚至包含用户名和密码列表的文件)管理。 Kubernetes没有代表普通用户帐户的对象。
  • 服务帐户是由Kubernetes API管理的用户,绑定到特定的名称空间。服务帐户与存储为Secrets的一组凭据相关联。要手动创建服务帐户,只需使用Fruits <- Fruits[order(Fruits$order.id), ] #sort data Fruits$prev_Apples<-with(Fruits, ave( ave(Apples, customer.id, FUN=function(x) c(0, head(cumsum(x), -1))), #get running sum per customer.id interaction(customer.id, order.id, drop=T), FUN=max, na.rm=T) #find largest sum per index per seg ) 命令即可​​。这将在当前命名空间中创建一个服务帐户,并创建一个关联的秘密,用于保存API服务器的公共CA和签名的JSON Web令牌(JWT)。