使用抓包软件(WireShark、Charles)查看kubectl访问apiserver的请求信息

目录

应用背景

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

配置Charles代理软件 

配置kubectl


应用背景

在进行运维 paas 平台开发时,我们会经常接触到需要调 Kuberenetes api 的情况。因为云厂商只封装了部分的 Kuberenetes api 提供接口访问,部分 API 如获取 event ,云厂商还是建议使用原生的 Kuberenetes api 去做请求,这就要求我们对 k8s api 有相当的熟悉度,这可能需要详细阅读官方的 API 文档。本文提供一种方式,通过探查 kubectl 请求时与 apiserver 的交互数据,来熟悉这些相关接口。

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

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

更多的证书参考资料请见这篇文章:

可能是史上最全的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

配置Charles代理软件 

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

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

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

配置kubectl

首先需要配置匿名用户的RBAC访问权限,因为是测试环境,所以我们直接为匿名用户配置了admin系统管理员权限,如果要进行严格的权限管理,可以在用户名上收口或者配置clusterrole的只读权限

#为匿名用户配置cluster-admin的clusterrole,其中包含有管理员所具备的权限
kevinzhang@KevindeMacBook-Pro ~ % kubectl create clusterrolebinding cluster-system-anonymons --clusterrole=cluster-admin --user=system:anonymous

抓包kubectl的流量,需要两个条件:1. kubectl使用Charles作为代理,2. kubectl需要信任Charles的证书。

# Charles的代理端口是8888,设置https_proxy环境变量,让kubectl使用Charles代理
kevinzhang@KevindeMacBook-Pro ~ % export https_proxy=http://127.0.0.1:8888/
# insecure-skip-tls-verify表示不校验服务端证书
kevinzhang@KevindeMacBook-Pro ~ % kubectl --insecure-skip-tls-verify get pod
NAME                     READY   STATUS    RESTARTS        AGE
nginx-6799fc88d8-4c6pn   1/1     Running   4 (7d22h ago)   39d
nginx-6799fc88d8-fgwgl   1/1     Running   3 (7d22h ago)   30d
nginx-6799fc88d8-pnsjg   1/1     Running   4 (7d22h ago)   39d

 我们就可以看到get pod的网络请求了:

基于此,我们就可以分析一个Kubernetes到底干了什么,也是我们分析Kubernetes​实现的入口。

参考链接:

How do I derive certificate PEM data from kubeconfig?

可能是史上最全的Kubernetes证书解析

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值