kubernetes - 如何使用k8s java api而不是fabric8 api连接到远程kubernetes集群

标签 kubernetes fabric8 kubernetes-java-client

我能够使用 Fabric8 api 通过以下代码连接到 Kubernetes 集群:

            String masterUrl = "<Kube Master Url>";
            Map<String, String> certFileNamesMap = getCertificates();
            Config config = new ConfigBuilder().withMasterUrl(masterUrl).build();
            config.setWebsocketPingInterval(30000L);
            config.setConnectionTimeout(300000);
            config.setRequestTimeout(300000);
            if (certFileNamesMap != null) {
                config.setCaCertFile(certFileNamesMap.get(CA_CERT_FILE));
                config.setClientCertFile(certFileNamesMap.get(CLIENT_CERT_FILE));
                config.setClientKeyFile(certFileNamesMap.get(CLIENT_KEY_FILE));
            }
            KubernetesClient client = new DefaultKubernetesClient(config);

我能够设置证书并能够连接到 https://MasterIP 但使用 https://github.com/kubernetes-client/java API 我无法弄清楚设置证书以及远程主 IP 的方法。有没有办法使用官方 kubernetes 客户端 API 来做到这一点?因为 Fabric8 API 已被他们的团队正式停止。

我正在尝试在 minikube 的容器内使用以下代码:

            ApiClient client = ClientBuilder.cluster().build();
            Configuration.setDefaultApiClient(client);
            System.out.println("Loading in app cluster 3");
            CoreV1Api api = new CoreV1Api();
            V1PodList list =
                    api.listPodForAllNamespaces(null,
                            null,
                            null,
                            null,
                            100,
                            null,
                            null,
                            null,
                            null,
                            null);
            System.out.println("Listing all pods: ");
            for (V1Pod item : list.getItems()) {
                System.out.println(item.getMetadata().getName());
            }

我收到禁止的错误。

io.kubernetes.client.openapi.ApiException: Forbidden
at io.kubernetes.client.openapi.ApiClient.handleResponse(ApiClient.java:993)
at io.kubernetes.client.openapi.ApiClient.execute(ApiClient.java:905)
at io.kubernetes.client.openapi.apis.CoreV1Api.listPodForAllNamespacesWithHttpInfo(CoreV1Api.java:35956)
at io.kubernetes.client.openapi.apis.CoreV1Api.listPodForAllNamespaces(CoreV1Api.java:35848)

最佳答案

我能够找出方法,我们需要使用/.kube/config 文件并将所有证书复制到该文件本身中,然后 kubernetes java 客户端中有一个 api 读取配置文件并提供对 kube 的访问集群。

关于kubernetes - 如何使用k8s java api而不是fabric8 api连接到远程kubernetes集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71996188/

相关文章:

java - Fabric8(Fuse ESB 6.1)基于功能部署配置文件的策略

eclipse - 如何在 Eclipse 的 JAVA_OPTS 中禁用 SSL?

azure - 如何使用 Azure Pipelines 设置 kubernetes 自动缩放(在同一节点中和横向扩展)?

kubernetes - "No command specified"在 Kubernetes 中创建 Pod 时出错

docker - 无法写入kubernetes中部署的dockerized flask应用程序的静态目录中的文件

ssl - 我的微服务也需要 TLS 还是 Ingress TLS 终止就足够了?

kubernetes - Kubernetes Fabric8 API