K8S——java调用OpenApi

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

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列表:

 

Java调用OpenAPI可以通过以下步骤实现: 1. 导入相关的依赖库:通常需要使用HTTP客户端库来进行网络请求,比如Apache HttpClient、OkHttp等。你可以在项目的构建工具(如Maven或Gradle)中添加相应的依赖。 2. 创建HTTP请求并发送:使用HTTP客户端库创建一个GET或POST请求,并设置请求的URL、请求头、请求参数等信息。具体的操作会根据你所使用的HTTP客户端库而有所不同。 3. 处理API响应:发送请求后,会得到一个HTTP响应。你可以通过读取响应流、解析JSON/XML等方式来处理API返回的数据。 这是一个简单的示例代码,演示如何在Java调用一个简单的OpenAPI: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class OpenAPIClient { public static void main(String[] args) throws Exception { HttpClient httpClient = HttpClients.createDefault(); HttpGet request = new HttpGet("https://api.example.com/endpoint"); HttpResponse response = httpClient.execute(request); HttpEntity entity = response.getEntity(); if (entity != null) { String responseBody = EntityUtils.toString(entity); System.out.println(responseBody); } } } ``` 请注意,这只是一个简单的示例,实际情况可能会更加复杂。具体的操作取决于你要调用OpenAPI的要求和文档。你需要根据实际情况进行相应的调整和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值