Postman和Java Client访问K8s


K8s的所有操作基本都是通过调用kube-apiserver这个组件进行的,它提供了restful api供外部系统访问,当然为了保证整个k8s集群的安全性,k8s提供了多种认证方式来保证集群的安全性:比如客户端证书、静态token、静态密码文件、ServiceAccountTokens等等。你可以同时使用一种或多种认证方式。只要通过任何一个都被认作是认证通过,我们一般都是使用证书方式:客户端证书认证叫作TLS双向认证(关于SSL/TLS认证的可以参考这篇文章《SSL/TLS协议运行机制的概述》),也就是服务器客户端互相验证证书的正确性,在都正确的情况下协调通信加密方案。下面来看下如何配置客户端证书验证,我们通过配置一个kubeconfig文件来讲解下

红框标出的3个参数分别如下:
certificate-authority CA 证书的路径。
client-certificate TLS 证书文件
client-key TLS Key 文件
注意以上3个文件是由k8s集群服务端授权生成的,需要服务端提供给客户端。
下面我们分别介绍下如何通过Postman和java client来调用kube-apiserver提供的api

Postman访问kube-apiserver

这里我们以获取集群某个namespaces下面所有的pod列表api来演示,我们直接通过Postman发起一个get请求,可以看到报403 Forbidden错误。这是因为k8s集群开启了客户端证书认证,我们可以通过下面的办法来解决这个问题。
  • 首先确保Postman是最新版本,最新版本可以支持添加证书
  • 打开设置,把SSL certificate verification关闭,然后点击证书 tab添加证书,分别输入kube-apiserver地址,证书文件和秘钥,然后添加
      
  • 最后重新访问,可以看到此时http请求返回200,可以正常访问(注意postman请求地址不要添加端口号)
    另外我们通过command+option+c可以打开postman的console,可以看到发送的请求会自动附带Client Certificate信息

Java client访问kube-apiserver

pom.xml文件添加以下依赖

<dependency>
	<groupId>io.kubernetes</groupId>
	<artifactId>client-java</artifactId>
	<version>3.0.0</version>
	<scope>compile</scope>
</dependency>
public class K8s {
    public static void main(String[] args) throws IOException, ApiException {
        ApiClient client = Config.fromConfig("/Users/xiaoming/me/study/kubernetes/kubeconfig");
        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());
        }
    }
}

以上强调一下,上述配置的kubeconfig中需要显示指定访问的k8s cluster的server地址

参考

k8s认证授权详解
Kubernetes 的证书认证
k8s证书配置,dns,dashboard


文章作者: 叶明
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 叶明 !
评论
 上一篇
Mybatis如何从DAO到SQL Mybatis如何从DAO到SQL
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。在项目中通过配置不同的mapper和xml,然后即可方便的对数据库进行操作。对于Mybatis的使用方法大家应该都很熟悉,本文不再赘述,本文重点叙述Mybatis的原理,详细分析Mybatis如何完成从mapper到sql的转化过程
2021-04-03
下一篇 
从零开始学TIDB二(TIDB简介与整体架构) 从零开始学TIDB二(TIDB简介与整体架构)
上一篇博客,我们简单介绍了怎么在Mac OS系统上面使用docker compose搭建一个包含3个pd,3个tikv,1个tidb的TIDB集群。本文,我们会详细介绍TIDB的一些基本概念和整体架构。 TIDB 简介TIDB是pingca
2018-08-27
  目录