Kubernetes 里的各种证书文件

Kubernetes 里有各种各样的证书文件,时常让我们眼花缭乱,对于初学者十分不友好,今天我们就来捋一捋这些证书。

Static Pod Manifests

在讲证书前,我们先来说一下这个,后面结合这个一起理解证书。在 Kubernetes 中,有一种特殊的 Pod 叫做 Static Pod,它允许你把要部署的 Pod 的 YAML 文件放在一个指定的目录里。这样,当这台机器上的 kubelet 启动时,它会自动检查这个目录,加载所有的 Pod 的 YAML 文件,然后在这台机器上运行它们。

我们使用 kubeadm 部署集群时,kubeadm 会自动帮我们在每个控制面节点部署几个重要的组件:API服务器(kube-apiserver)、调度器(kube-scheduler)、控制器管理器(kube-controller-manager)和 etcd。而这些组件就是以 Static Pod 的方式运行在控制面节点,这些组件的 YAML 文件则会生成在/etc/kubernetes/manifests。如下图:

Kubernetes 证书

在 Kubernetes 中,所有组件与 API服务器(kube-apiserver)之间的通信都基于 mTLS 机制,也就是说,不光服务端要拥有证明自己的证书,客户端也要有证明自己的证书,并且通信前都要互相验证。

如果你是用 kubeadm 部署的集群的话,大部分 证书则会被放在控制面节点的/etc/kubernetes/pki目录下:

在上图中,有三个根证书,它们分别签发了以下子证书:

  • ca.crt: apiserver.crt、apiserver-kubelet-client.crt
  • etcd/ca.crt:apiserver-etcd-client.crt、etcd/healthcheck-client.crt、etcd/peer.crt etcd/server.crt
  • front-proxy-ca.crt:front-proxy-client.crt

我们可以使用命令openssl x509 -in 证书名 -noout -text来验证下:

上图左侧是我们将目录 pki 下的根证书解开的样子,可以看到证书的账户为CN = Kubernetes;而右侧是我们将 apiserver.crt 证书解开的样子,可以看到根证书的颁发者正是CN = Kubernetes。

接下来我们结合上文讲的 Static Pod 来介绍下这些证书的作用是什么。我们首先打开文件/etc/kubernetes/manifests/kube-apiserver.yaml,这个文件就是 API服务器(kube-apiserver)的 YAML 文件:

可以看到,这些红框框里的那些文件就是/etc/kubernetes/pki目录下的那些证书,下面按序号逐个介绍其作用:

  1. 这是 API服务器(kube-apiserver)作为服务端时使用的证书;
  2. 这是当 API服务器(kube-apiserver)作为客户端请求 kubelet 时使用的证书;
  3. 这是当 API服务器(kube-apiserver)作为客户端请求 etcd 时使用的证书;
  4. 这是 API服务器(kube-apiserver)用于验证 etcd 的证书时用的根证书;
  5. 这是 API服务器(kube-apiserver)用于验证其它对端的证书时用到的根证书;

还有front-proxy-ca.crt和front-proxy-client.crt,上图没有画出来,这是只在有 扩展apiserver 时才用的到,是API服务器(kube-apiserver)作为客户端时用的证书。

pki目录下还有sa.pub和sa.key,这是 RBAC 鉴权时使用的。

我们再来打开文件/etc/kubernetes/manifests/kube-apiserver.yaml看看,这是 etcd 用的 YAML 文件:

还是按序号逐个介绍其作用:

  1. 验证来自外部通信方的证书的根证书;
  2. 验证来自 etcd 集群里其它实例的证书的根证书;
  3. 与 etcd 集群里其它实例通信时作为客户端使用的证书;
  4. 作为服务端时使用的证书;

其实还有部分证书没有提到,它们不在目录/etc/kubernetes/pki下,而是被 kubeadm 放在了/etc/kubernetes下,就是下图这些红框框文件:

这些文件里存放的都是对应客户端与 API服务器(kube-apiserver)通信时用于证明自身身份的证书,比如admin.conf文件就是平时使用 kubectl 命令时,会被 kubectl 加载的文件,我们来看看文件内容:

红框框其实就是根证书/etc/kubernetes/pki/ca.crt,用于 kubect 来验证 API服务器(kube-apiserver)的证书;黄框框就是 kubectl 自己的证书,它也是由证书/etc/kubernetes/pki/ca.crt签发的;蓝框框就是 kubectl 对应的私钥。另外三个文件也是差不多的内容,这里就不再赘述了。

总结

这次讲的只是 Kubernetes 证书机制的一个大概,更多详细信息就得看他们的官网了。

相关推荐
To_OC5 小时前
从一头雾水到跑通全流程:我用一个周末啃透了JWT登录鉴权
前端·后端·http
前端兰博6 小时前
05-Redis
redis·后端
databook6 小时前
从手动检查到自动监控:一个数据质量工作流的实现
后端·python·数据分析
【JAVA】玩家6 小时前
Spring核心原理全解析:从零到生产实战
java·后端·spring
东风破_7 小时前
从 Neo4j 到 GraphRAG:用 Text-to-Cypher 构建图检索 RAG
人工智能·后端
llqbzllll8 小时前
Spring AI 工具调用不是反射一下就结束:用 2.0.1 跑通失败恢复与调用上限
人工智能·后端
狼爷9 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
mantou13210 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
程序员老赵10 小时前
Docker 部署 DeepSeek Harness:轻松搭建局域网里的 AI Agent 平台
后端·ai编程·deepseek
YIAN10 小时前
实战|用 DeepSeek + SQLite 从零搭建轻量 Text2SQL 查询助手
后端·sqlite·deepseek