Article / 文章中心

如何通过抓包来查看Kubernetes API流量

发布时间:2021-11-22 点击数:275

当我们通过kubectl来查看、修改Kubernetes资源时,有没有想过后面的接口到底是怎样的?有没有办法探查这些交互数据呢?

Kuberenetes客户端和服务端交互的接口,是基于http协议的。所以只需要能够捕捉并解析https流量,我们就能看到kubernetes的API流量。

但是由于kubenetes使用了客户端私钥来实现对客户端的认证,所以抓包配置要复杂一点。具体是如下的结构:

 

如果想了解更多Kubernetes证书的知识,可以看下这篇Kubernetes证书解析的文章

kubeconfig中提取出客户端证书和私钥

kubeconfig中包含了客户端的证书和私钥,我们首先要把它们提取出来:

# 提取出客户端证书

grep client-certificate-data ~/.kube/config | \

  awk '{ print $2 }' | \

  base64 --decode > client-cert.pem# 提取出客户端私钥

grep client-key-data ~/.kube/config | \

  awk '{ print $2 }' | \

  base64 --decode > client-key.pem# 提取出服务端CA证书

grep certificate-authority-data ~/.kube/config | \

  awk '{ print $2 }' | \

  base64 --decode > cluster-ca-cert.pem

参考自Reddit

配置Charles代理软件

从第一张图可以看出,代理软件的作用有两个:一是接收https流量并转发,二是转发到kubernetes apiserver的时候,使用指定的客户端私钥。

首先配置Charles,让他拦截所有的https流量:

 

然后配置客户端私钥,即对于发送到apiserver的请求,统一使用指定的客户端私钥进行认证: