Java Fabric 8 - 使用Fabric8 Java API获取Kubernetes服务的Pod并启动服务

问题描述 投票:0回答:2

我正在尝试下面的代码,以使用Fabric8 java API获取Kubernetes服务的可用pod

connection example.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服务

java kubernetes fabric8
2个回答
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来创建服务帐户并为其提供所需的权限。

还有其他方法可以让客户:

  • 1)使用kubeconfig文件
  • 2)使用api-server中使用的证书 Config config = new ConfigBuilder()。withMasterUrl(masterURL).withClientCertFile(certFile).build();

或证书档案的内容─

Config config = new ConfigBuilder()。withMasterUrl(masterURL).withClientCertData(certFile).build();


0
投票

您需要使用配置文件中的ssl证书进行身份验证。将您的配置文件复制到qazxsw poi位置并尝试运行此示例程序。

$HOME/.kube/config
© www.soinside.com 2019 - 2024. All rights reserved.