kubeconfig文件全解析

发布时间 2023-04-11 17:27:27作者: JL_Zhou

说明

一个典型的 kubeconfig 文件如下:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: {BASE64 STRING}
    server: https://172.16.16.15:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: ingress-nginx
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: {BASE64 STRING}
    client-key-data: {BASE64 STRING}

文件的主要部分为:clusters、contexts、users 字段

 

备注:

1. 这里客户端表示为 kubeclt、client-go sdk 等,服务端表示为 apiserver

2. 证书里面包含公钥,消息发送方使用证书里面的公钥对消息加密,消息接受方使用自己的私钥解密

3. 单向验证过程如下,双向验证即是指客户端和服务端同时作为消息发送方和接收方,利用对方的证书加密消息

 

 

 

 

cluser 字段

certificate-authority-data 表示服务端的 CA 证书

以 kubectl 为客户端时为例,

  1. 当 kubectl 发送消息给 apiserver 时,apiserver 先返回 master 节点上的 /etc/kubernetes/pki/apiserver.crt 服务端证书给 kubectl
  2. kubectl 校验 apiserver.crt 的正确性,会获取 apiserver.crt 中的 Issuer CA,发现 CA 的 CN 是 Kubernetes
  3. certificate-authority-data 证书的 CN 也是 Kubernetes,利用  certificate-authority-data 对 apiserver.crt 验证通过
  4. kubectl 通过 apiserver.crt 对发送给 apiserver 的消息加密发送,apiserver 收到消息通过 /etc/kubernetes/pki/apiserver.key 解密消息