gpt4 book ai didi

java - 从 : [/var/run/secrets/kubernetes. io/serviceaccount/token] 读取服务帐户 token 时出错。忽略

转载 作者:行者123 更新时间:2023-12-03 14:50:16 27 4
gpt4 key购买 nike

当我运行这段代码时
公共(public)类 test2 {

public static void main(String[] args) {
// TODO Auto-generated method stub


String podName = "xrdpprocan";
String namespace = "default";
String master = "https://my_ip_adress";

Config config = new ConfigBuilder().withMasterUrl(master).withTrustCerts(true).build();
try (final KubernetesClient client = new DefaultKubernetesClient(config)) {

String log = client.pods().inNamespace(namespace).withName(podName).getLog(true);
System.out.println("Log of pod " + podName + " in " + namespace + " is:");
System.out.println("------------------");
System.out.println(log);

} catch (KubernetesClientException e) {
System.out.println(e.getMessage());
}
}

我从:[/var/run/secrets/kubernetes.io/serviceaccount/token] 中收到此错误读取服务帐户 token 。无视。

最佳答案

问题出在哪里:您的客户端配置的当前类型不完整,您缺少客户端身份验证设置/数据部分。
请注意,当您从集群外部运行代码时
(这种类型的客户端配置称为 集群外客户端配置 )您需要明确指定从外部成功连接到 Kubernetes 控制平面的最低要求。

  • Kubernetes 主 URL
  • 的至少一种方法用户认证 , 可以是:
  • 客户证书
  • 不记名 token
  • HTTP 基本认证

  • 你看到问题了吗? - 您没有从 >> user << 的第二个条件中指定这些身份验证(这是这里的关键词: user)
    现在 Java Kubernetes 客户端退回到 服务帐号基于身份验证策略,认为您不是人类而是机器人(Pod 在服务帐户的上下文中运行)。
    从技术上讲,客户现在正在解决最后的选择:

    KUBERNETES_AUTH_TRYSERVICEACCOUNT


    ( 第 4 个 在 fabric8io/kubernetes-client 支持的配置选项列表中,请查看下方)
    这涉及读取放置在 Pod 容器内的文件系统中的服务帐户 token ,路径如下:

    /var/run/secrets/kubernetes.io/serviceaccount/token



    官方 fabric8io/kubernetes-client java客户端支持以下客户端配置方式:

    This will use settings from different sources in the following orderof priority:

    • System properties
    • Environment variables
    • Kube config file
    • Service account token & mounted CA certificate <== you client code tries this

    System properties are preferred over environment variables. Thefollowing system properties & environment variables can be used forconfiguration


    最简单的解决方案是靠 Kube config file从外部访问集群的选项,例如:
    public class KubeConfigFileClientExample {
    public static void main(String[] args) throws IOException, ApiException {

    // file path to your KubeConfig

    String kubeConfigPath = System.getenv("HOME") + "/.kube/config";

    // loading the out-of-cluster config, a kubeconfig from file-system
    ApiClient client =
    ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build();

    // set the global default api-client to the in-cluster one from above
    Configuration.setDefaultApiClient(client);

    // the CoreV1Api loads default api-client from global configuration.
    CoreV1Api api = new CoreV1Api();

    // invokes the CoreV1Api client
    V1PodList list =
    api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null, null);
    for (V1Pod item : list.getItems()) {
    System.out.println(item.getMetadata().getName());
    }
    }
    }
    完整的代码示例可以找到 here .

    关于java - 从 : [/var/run/secrets/kubernetes. io/serviceaccount/token] 读取服务帐户 token 时出错。忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43370090/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com