k8s证书及秘钥

1. 证书分类

  • 服务器证书:server cert,用于客户端验证服务端的身份。

  • 客户端证书:client cert,用于服务端验证客户端的身份。

  • 对等证书:peer cert(既是server cert又是client cert),用户成员之间的身份验证,例如 etcd。

1.1. k8s集群的证书分类

  • etcd节点:需要标识自己服务的server cert,也需要client certetcd集群其他节点交互,因此需要一个对等证书。

  • master节点:需要标识 apiserver服务的server cert,也需要client cert连接etcd集群,也需要一个对等证书。

  • kubelet:需要标识自己服务的server cert,也需要client cert请求apiserver,也使用一个对等证书。

  • kubectl、kube-proxy、calico:需要client证书。

2. CA证书及秘钥

目录:/etc/kubernetes/ssl

分类
证书/秘钥
说明
组件

ca

ca-key.pem

ca.pem

ca.csr

Kubernetes

kubernetes-key.pem

kubernetes.pem

kubernetes.csr

Admin

admin-key.pem

admin.pem

admin.csr

Kubelet

kubelet.crt

kubelet.key

配置文件

分类
证书/秘钥
说明

ca

ca-config.json

ca-csr.json

Kubernetes

kubernetes-csr.json

Admin

admin-csr.json

Kube-proxy

kube-proxy-csr.json

3. cfssl工具

安装cfssl:

4. 创建 CA (Certificate Authority)

4.1. 配置源文件

创建 CA 配置文件

ca-config.json

参数说明

  • ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;

  • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE

  • server auth:表示client可以用该 CA 对server提供的证书进行验证;

  • client auth:表示server可以用该CA对client提供的证书进行验证;

创建 CA 证书签名请求

ca-csr.json

参数说明

ca-csr.json的参数

  • CN:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;

names中的字段:

  • C : country,国家

  • ST: state,州或省份

  • L:location,城市

  • O:organization,组织,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group)

  • OU:organization unit

4.2. 执行命令

输出如下:

生成以下文件:

5. 创建 kubernetes 证书

5.1. 配置源文件

创建 kubernetes 证书签名请求文件kubernetes-csr.json。

参数说明:

  • MASTER_IP:master节点的IP或域名

  • MASTER_CLUSTER_IPkube-apiserver 指定的 service-cluster-ip-range 网段的第一个IP,例如(10.254.0.1)。

5.2. 执行命令

输出如下:

生成以下文件:

6. 创建 admin 证书

6.1. 配置源文件

创建 admin 证书签名请求文件 admin-csr.json

6.2. 执行命令

输出如下:

生成文件

7. 创建 kube-proxy 证书

7.1. 配置源文件

创建 kube-proxy 证书签名请求文件 kube-proxy-csr.json

7.2. 执行命令

输出如下:

生成文件:

8. 校验证书

输出如下:

字段说明:

  • 确认 Issuer 字段的内容和 ca-csr.json 一致;

  • 确认 Subject 字段的内容和 kubernetes-csr.json 一致;

  • 确认 X509v3 Subject Alternative Name 字段的内容和 kubernetes-csr.json 一致;

  • 确认 X509v3 Key Usage、Extended Key Usage 字段的内容和 ca-config.jsonkubernetes profile 一致;

9. 分发证书

将生成的证书和秘钥文件(后缀名为.pem)拷贝到所有机器的 /etc/kubernetes/ssl 目录下。

参考文章:

  • https://kubernetes.io/docs/concepts/cluster-administration/certificates/

  • https://coreos.com/os/docs/latest/generate-self-signed-certificates.html

  • https://jimmysong.io/kubernetes-handbook/practice/create-tls-and-secret-key.html

最后更新于

这有帮助吗?