《Kubernetes证书篇:手动生成二进制kubernetes集群相关证书》

一、背景信息

K8S二进制部署,有两大难点,第一个就是证书的生成,第二个就是需要部署哪些组件。这里就首先介绍一下,K8S需要生成哪些证书文件

Kubelet 的客户端证书,用于 API 服务器身份验证
Kubelet 服务端证书, 用于 API 服务器与 Kubelet 的会话
API 服务器端点的证书
集群管理员的客户端证书,用于 API 服务器身份认证
API 服务器的客户端证书,用于和 Kubelet 的会话
API 服务器的客户端证书,用于和 etcd 的会话
控制器管理器的客户端证书或 kubeconfig,用于和 API 服务器的会话
调度器的客户端证书或 kubeconfig,用于和 API 服务器的会话
前端代理的客户端及服务端证书

1.1、ca证书

我们先简单说一下证书签发,首先需要签发一个根CA(证书签发机构),然后使用CA来签发服务端证书(server)、客户端证书(client)、对等证书(peer),其中对等证书就是既可以做服务端证书,也可以做客户端证书。

我们需要三个CA(当然你懒一些用同一个CA也是可以的),这里就介绍三个CA,如下所示:

证书及密钥路径 证书文件 密钥文件 默认CN 说明
/etc/kubernetes/pki ca.pem ca-key.pem kubernetes-ca Kubernetes 通用 CA
/etc/kubernetes/pki/etcd ca.pem ca-key.pem etcd-ca 与 etcd 相关的所有功能
/etc/kubernetes/pki front-proxy-ca.pem front-proxy-ca-key.pem kubernetes-front-proxy-ca 用于前端代理

1.2、etcd需要的证书

证书及密钥路径 证书文件 密钥文件 父级CA 默认CN 说明
/etc/kubernetes/pki/etcd server.pem server-key.pem etcd-ca kube-etcd etcd对外提供服务,要有一套etcd server证书
/etc/kubernetes/pki/etcd healthcheck-client.pem healthcheck-client-key.pem etcd-ca kube-etcd-healthcheck-client 客户端证书
/etc/kubernetes/pki/etcd peer.pem peer-key.pem etcd-ca kube-etcd-peer etcd各节点之间进行通信,要有一套etcd peer证书

1.3、kube-apiserver需要的证书文件

证书及密钥路径 证书文件 密钥文件 令牌认证文件 父级CA 默认CN 证书类型 说明
/etc/kubernetes/pki/etcd ca.pem ca-key.pem etcd-ca ca etcd集群ca根证书
/etc/kubernetes/pki apiserver-etcd-client.pem apiserver-etcd-client-key.pem etcd-ca kube-apiserver-etcd-client client kube-apiIserver访问etcd,要有一套etcd客户端证书
/etc/kubernetes/pki ca.pem ca-key.pem kubernetes-ca ca k8s集群ca根证书
/etc/kubernetes/pki apiserver.pem apiserver-key.pem kubernetes-ca kube-apiserver server kube-apiserver对外提供服务,要有一套kube-apiserver服务端证书
/etc/kubernetes/pki apiserver-kubelet-client.pem apiserver-kubelet-client-key.pem kubernetes-ca kube-apiserver-kubelet-client client 用于API服务器安全地连接到kubelet的客户端证书
/etc/kubernetes/pki front-proxy-ca.pem front-proxy-ca-key.pem kubernetes-front-proxy-ca ca 用于前端代理证书颁发机构
/etc/kubernetes/pki front-proxy-client.pem front-proxy-client-key.pem kubernetes-front-proxy-ca front-proxy-client client 用于前端代理客户端
/etc/kubernetes/pki sa.pub sa.key 密钥对 用于控制器管理器签署ServiceAccount时使用的密钥
/etc/kubernetes/pki token.csv 身份认证依据

1.4、kube-controller-manager需要的证书文件

证书及密钥路径 证书文件 密钥文件 kubeconfig文件 父级CA 默认CN 证书类型 说明
/etc/kubernetes/pki ca.pem ca-key.pem kubernetes-ca ca k8s集群ca根证书
/etc/kubernetes controller-manager.kubeconfig 控制器管理器的kubeconfig,用于和API服务器的会话
/etc/kubernetes/pki sa.key 密钥对 用于控制器管理器签署ServiceAccount时使用的密钥

1.5、kube-scheduler需要的证书文件

证书及密钥路径 证书文件 密钥文件 kubeconfig文件 父级CA 默认CN 证书类型 说明
/etc/kubernetes scheduler.kubeconfig 调度器的kubeconfig,用于和API服务器的会话

1.6、kube-proxy需要的证书文件

证书及密钥路径 证书文件 密钥文件 kubeconfig文件 父级CA 默认CN 证书类型 说明
/etc/kubernetes kube-proxy.kubeconfig kube-proxy的kubeconfig,用于和API服务器的会话

1.7、kubelet需要的证书文件

kubelet证书推荐使用TLS bootstrap方式自动签发,手动签发的话需要给每一个node节点的kubelet签发证书,且kubelet证书CN要为system:node:nodeName,O要为system:nodes。

证书及密钥路径 证书文件 密钥文件 kubeconfig文件 父级CA 默认CN 证书类型 说明
/etc/kubernetes/pki ca.pem ca-key.pem kubernetes-ca ca k8s集群ca根证书
/etc/kubernetes kubelet-bootstrap.kubeconfig kubelet的kubeconfig,用于和API服务器的会话

1.8、kubectl需要的证书文件

证书及密钥路径 证书文件 密钥文件 kubeconfig文件 父级CA 默认CN 证书类型 说明
/etc/kubernetes admin.kubeconfig 集群管理员的客户端证书,用于API服务器身份认证

二、手动生成证书

说明:kubernetes系统各组件需要使用TLS(SSL)证书对通信进行加密,本文档使用CloudFlare的PKI工具集cfssl来生成Certificate Authority (CA) 证书和秘钥文件,CA是自签名的证书,用来签名后续创建的其它TLS证书。

2.1、安装cfssl工具集

curl -L https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64 -o /usr/local/bin/cfssl
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64  -o /usr/local/bin/cfssljson
curl -L https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl-certinfo_1.6.3_linux_amd64  -o /usr/local/bin/cfssl-certinfo
curl -L https://dl.k8s.io/release/v1.24.12/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl
chmod +x /usr/local/bin/cfssl* && chmod +x /usr/local/bin/kubectl

2.2、创建CA证书配置文件

说明:根据K8S集群要求,需要三个CA证书,分别是etcd CA证书、front-proxy CA证书、kubernetes CA证书。这些CA 证书可以共用一个相同的CA证书配置文件。

2.2.1、创建CA证书配置文件目录

mkdir -p /opt/ssl && cd /opt/ssl

2.2.2、创建CA证书配置文件

vim ca-config.json
{
   
    "signing": {
   
        "default": {
   
            "expiry": "864000h"
        },
        "profiles": {
   
            "server": {
   
                "expiry": "864000h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"                   
                ]
            },
            "client": {
   
                "expiry": "864000h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            },
            "peer": {
   
                "expiry": "864000h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}

字段参数详解:

ca-config.json:可以定义多个profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个profile;
signing:表示该证书可用于签名其它证书;生成的ca.pem证书中CA=TRUE;
peer:双向证书,用于etcd集群成员间通信
server auth:表示client可以用该CA对server提供的证书进行验证;
client auth:表示server可以用该CA对client提供的证书进行验证;

2.3、生成etcd相关证书

2.3.1、创建证书文件目录

mkdir -p /opt/ssl/etcd && cd /opt/ssl/etcd

2.3.2、生成 etcd CA 证书

1、创建etcd-ca-csr.json文件,这是etcd CA证书的签名请求文件

vim etcd-ca-csr.json
{
   
  "CN": "etcd-ca",
  "key": {
   
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
   
      &
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东城绝神

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

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

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

打赏作者

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

抵扣说明:

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

余额充值