研究了几个小时,终于成功调用,记录一下。

K8s的所有操作基本都是通过调用kube-apiserver这个组件进行的,它提供了restful api供外部系统访问,当然为了保证整个k8s集群的安全性,k8s提供了多种认证方式来保证集群的安全性:比如客户端证书、静态token、静态密码文件、ServiceAccountTokens等等。你可以同时使用一种或多种认证方式。只要通过任何一个都被认作是认证通过,我们一般都是使用证书方式:客户端证书认证叫作TLS双向认证。
 

调用方式:

1.命令行方式

2.java使用客户端client-java调用

 

命令行方式

执行命令调用api,查看命名空间default下所有pod:

curl https://localhost:6443/api/v1/namespaces/default/pods   --cacert /etc/kubernetes/pki/apiserver.crt     --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt    --key /etc/kubernetes/pki/apiserver-kubelet-client.key -k

执行结果:

java使用客户端client-java调用

1.配置客户端证书验证,我们通过配置一个kubelet.conf文件来讲解下。

红框标出的3个参数分别如下:

  • certificate-authority-data:CA证书
  • client-certificate-data:TLS 证书
  • client-key-data:TLS Key

这里的三个参数,其实也可以使用路径方式配置,例如:

  • certificate-authority:/etc/kubernetes/pki/apiserver.crt
  • client-certificate:/etc/kubernetes/pki/apiserver-kubelet-client.crt
  • client-key:/etc/kubernetes/pki/apiserver-kubelet-client.key

2.在pom文件引用jar包:

    <dependency>
      <groupId>io.kubernetes</groupId>
      <artifactId>client-java</artifactId>
      <version>4.0.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.squareup.okio</groupId>
      <artifactId>okio</artifactId>
      <version>2.3.0</version>
    </dependency>
    <dependency>
      <groupId>com.squareup.okhttp</groupId>
      <artifactId>okhttp</artifactId>
      <version>2.5.0</version>
    </dependency>

  3.Java调用API

   

package com.data.k8s;

import java.io.IOException;
import io.kubernetes.client.ApiClient;
import io.kubernetes.client.ApiException;
import io.kubernetes.client.Configuration;
import io.kubernetes.client.apis.CoreV1Api;
import io.kubernetes.client.models.V1Node;
import io.kubernetes.client.models.V1NodeList;
import io.kubernetes.client.models.V1Pod;
import io.kubernetes.client.models.V1PodList;
import io.kubernetes.client.util.Config;

public class App 
{
    public static void main( String[] args ) throws IOException, ApiException
    {
        ApiClient client=Config.fromConfig("c:/kubelet.conf");
        Configuration.setDefaultApiClient(client);
        
        CoreV1Api api=new CoreV1Api();
        
        V1PodList list=api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null);
        for (V1Pod item:list.getItems()) {
        	System.out.println( item.getMetadata().getName());
		}
    }
}

成功调用接口,返回pod列表:

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐