我正在尝试下面的代码,以使用Fabric8 java API
获取Kubernetes服务的可用podConnectionExample.java:
package examples;
import java.util.*;
import io.fabric8.kubernetes.api.KubernetesClient;
import io.fabric8.kubernetes.api.KubernetesFactory;
import io.fabric8.kubernetes.api.model.IntOrString;
import io.fabric8.kubernetes.api.model.Service;
public class ConnectionExample {
private String ip;
private String port;
public ConnectionExample(String ip, String port) {
this.ip= ip;
this.port = port;
}
public KubernetesClient getConnection() {
final String URI = "http://" + ip+ ":" + port;
final KubernetesClient kubernetes = new KubernetesClient(new KubernetesFactory(URI));
return kubernetes;
}
}
App.java
package examples;
/**
* Hello world!
*
*/
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World!" );
ConnectionExample connectionExample = new ConnectionExample("XXX.XXX.XXX.XX", "1234");
System.out.println("Retrun: "+connectionExample.getConnection());
System.out.println("List of Pods: "+connectionExample.getConnection().getPods());
//connectionExample.getConnection().createService(entity, namespace)
}
}
我收到以下错误
2017-10-26 15:09:04 WARN PhaseInterceptorChain:452 - Interceptor for
WebClient has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Could not send Message.
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:619)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:674)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:224)
at com.sun.proxy.$Proxy19.getPods(Unknown Source)
at io.fabric8.kubernetes.api.KubernetesClient.getPods(KubernetesClient.java:154)
at io.fabric8.kubernetes.api.KubernetesClient.getPods(KubernetesClient.java:149)
还想知道如何传递kubernetes服务的用户名和密码
我正在尝试使用fabric8 java API从java类启动kubernetes服务
答案 0 :(得分:1)
public static void main(String[] args) throws Exception{
try {
String url = "cluster_endpoint";
String oathToken = "serviceAccountToken";
Config config = new ConfigBuilder()
.withMasterUrl("")
.withTrustCerts(true)
.withOauthToken(oathToken.replaceAll("(\\r|\\n)", ""))
.build();
KubernetesClient client = new DefaultKubernetesClient(config);
System.out.println(client.pods().inNamespace("default").list());
} catch (KubernetesClientException kce) {
logger.error("KubernetesClientException : {}, {}", KubernetesErrorUtil.getErrorMsg(kce), kce);
} catch (Exception e){
logger.error("Exception :");
e.printStackTrace();
}
}
这将使用serviceAccountToken获取客户端。您可以通过创建ClusterRole或Role和ClusterRoleBinding或RoleBinding来创建服务帐户并为其提供所需的权限。
还有其他方法可以让客户获得:
2)使用api-server中使用的证书
Config config = new ConfigBuilder() .withMasterUrl(masterURL) .withClientCertFile(certFile中) .build();
或证书文件的内容 -
Config config = new ConfigBuilder() .withMasterUrl(masterURL) .withClientCertData(certFile中) .build();
答案 1 :(得分:0)
您需要将配置文件中的ssl证书用于authenitcate。将配置文件复制到$HOME/.kube/config
位置,然后尝试运行此示例程序。
/**
* Copyright (C) 2015 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.fabric8.kubernetes.examples;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.ConfigBuilder;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ListExamples {
private static final Logger logger = LoggerFactory.getLogger(ListExamples.class);
public static void main(String[] args) {
System.setProperty("KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY","true");
Config config = Config.autoConfigure();
try (final KubernetesClient client = new DefaultKubernetesClient(config)) {
System.out.println(
client.namespaces().list()
);
System.out.println(
client.namespaces().withLabel("this", "works").list()
);
System.out.println(
client.pods().withLabel("this", "works").list()
);
System.out.println(
client.pods().inNamespace("test").withLabel("this", "works").list()
);
System.out.println(
client.pods().inNamespace("test").withName("testing").get()
);
} catch (KubernetesClientException e) {
logger.error(e.getMessage(), e);
}
}
}