Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes Java客户端API异常_Java_Kubernetes_Kubernetes Pod_Kubernetes Cluster - Fatal编程技术网

Kubernetes Java客户端API异常

Kubernetes Java客户端API异常,java,kubernetes,kubernetes-pod,kubernetes-cluster,Java,Kubernetes,Kubernetes Pod,Kubernetes Cluster,我正在使用Kubernetes Java客户端API获取所有存在的名称空间。我犯了一个错误- io.kubernetes.client.ApiException:java.net.ConnectException:无法连接到localhost/127.0.0.1:443 at io.kubernetes.client.ApiClient.execute(ApiClient.java:801) at io.kubernetes.client.apis.CoreV1Api.listNamespace

我正在使用Kubernetes Java客户端API获取所有存在的名称空间。我犯了一个错误-

io.kubernetes.client.ApiException:java.net.ConnectException:无法连接到localhost/127.0.0.1:443

at io.kubernetes.client.ApiClient.execute(ApiClient.java:801)
at io.kubernetes.client.apis.CoreV1Api.listNamespaceWithHttpInfo(CoreV1Api.java:15939)
at io.kubernetes.client.apis.CoreV1Api.listNamespace(CoreV1Api.java:15917)
at com.cloud.kubernetes.KubernetesNamespacesAPI.fetchAllNamespaces(KubernetesNamespacesAPI.java:25)
at com.cloud.spark.sharedvariable.ClouzerConfigurations.setKubernetesEnvironment(ClouzerConfigurations.java:45)
我尝试创建集群角色绑定并向用户授予权限

以下是我的代码片段:

public static List<String> fetchAllNamespaces(){
        try {
            return COREV1_API.listNamespace(null, "true", null, null, null, 0, null, Integer.MAX_VALUE, Boolean.FALSE)
                    .getItems().stream().map(v1Namespace -> v1Namespace.getMetadata().getName())
                    .collect(Collectors.toList());
        }catch(Exception e) {
            e.printStackTrace();
            return new ArrayList<>(); 
        }
    }
公共静态列表fetchAllNamespaces(){
试一试{
返回COREV1_API.listNamespace(null,“true”、null、null、null、0、null、Integer.MAX_值、Boolean.FALSE)
.getItems().stream().map(v1Namespace->v1Namespace.getMetadata().getName())
.collect(Collectors.toList());
}捕获(例外e){
e、 printStackTrace();
返回新的ArrayList();
}
}

如果我遗漏了什么,请告诉我。提前感谢。

pod内的Localhost与节点上的Localhost不同。在豆荚内部尝试使用以下URL:

我也面临同样的例外。 在对客户机库的源代码进行了几次调查之后,我认为您需要确定两件事

  • 首先,你能访问你的api服务器吗
  • 其次,您需要检查ApicClient引导顺序
您使用哪种方式配置连接

这里的第一件事可能与您的案例或lib无关。 api客户端库支持三种配置方式,即从pod内部或集群外部与K8S apiserver通信

  • 阅读env KUBECONFIG
  • 读取${home}/.kube/config
  • 读取位于/var/run/secrets/kubernetes.io/servicecomport/ca.crt下的服务帐户
如果您在Pod中使用lib,通常它会尝试使用第三种方式

如何引导客户。

您必须记住调用

Configuration.setDefaultApiClient(apiClient);
在初始化CoreV1Api或CRD api之前。 原因很简单,因为在所有Api类下,例如 io.kubernetes.client.api.CoreV1Api的类


公共类CoreV1Api{
私人ApiClient ApiClient;
公共CoreV1Api(){
这是(Configuration.getDefaultApicClient());
}
...
}
如果尚未设置配置的DefaultApicClient,它将使用所有默认配置,基本路径为localhost:443,那么您将面临错误

在示例包下,客户机已经创建了许多示例和用例。 完整配置逻辑可能如下所示:

公共类示例{
公共静态void main(字符串[]args)引发IOException、ApiException{
ApiClient client=Config.defaultClient();
setDefaultApicClient(客户端);
//现在,您可以安全地构建CoreV1Api了。
CoreV1Api=新的CoreV1Api();
V1PodList列表=
listPodForAllNamespaces(null,null,null,null,null,null,null,null,null,null,null);
对于(V1Pod项:list.getItems()){
System.out.println(item.getMetadata().getName());
}
}
}

请记住,如果您使用默认构造函数初始化XXXApi,则顺序非常重要。

您是在pod上运行该代码还是直接在本地计算机上运行该代码?因为您的计算机上的localhost和pod内的localhost-是两个完全不同的localhost。我在pod上运行该代码,而不是在本地工作站上运行。谢谢,设置DefaultApiClient解决了我的问题。:-)我遇到了相同的问题,此解决方案修复了它。但是现在我在调用CoreV1Api#readNamespacedSecret io.kubernetes.client.ApiException时遇到了一个异常:禁止,如果我使用kubectl访问机密,我就没有这个异常(例如)。如何将客户端设置为读取/var/run/secrets/kubernetes.io/servicecomport/ca.crt?因为我认为这是个问题,因为我没有.kube/config