我能够使用 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/