JavaFabric8-使用Fabric8JavaAPI获取Kubernetes服务的吊舱并启动服务

JavaFabric8-使用Fabric8JavaAPI获取Kubernetes服务的吊舱并启动服务,java,kubernetes,fabric8,Java,Kubernetes,Fabric8,我试图在下面的代码中使用Fabric8JavaAPI获取Kubernetes服务的可用pods ConnectionExample.java: package examples; import java.util.*; import io.fabric8.kubernetes.api.KubernetesClient; import io.fabric8.kubernetes.api.KubernetesFactory; import io.fabric8.kubernetes.api.mo

我试图在下面的代码中使用Fabric8JavaAPI获取Kubernetes服务的可用pods

ConnectionExample.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服务

您需要使用ssl证书从配置文件到Authenticate。将配置文件复制到$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);
    }
  }

}
这将使用serviceAccountToken获取客户端。您可以通过创建ClusterRole或Role以及ClusterRoleBinding或RoleBinding来创建服务帐户并授予其所需的权限

此外,您还可以通过其他方式获取客户端:

1使用kubeconfig文件 2使用api服务器中使用的证书

Config=newconfigbuilder .withMasterUrlmasterURL .withClientCertFilecertFile .建造

或证书文件的内容-

Config=newconfigbuilder .withMasterUrlmasterURL .withClientCertDatacertFile
.建造

我认为您可能正在以低于需要的抽象级别来处理这个问题。有些例子更适合开始学习。
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();
    }
}