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

How to connect to remote kubernetes cluster using k8s java api instead of fabric8 api

我能够使用 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 中有一个 api java 读取配置文件并提供对 kube 集群的访问权限的客户端。