k8s自签TLS证书

mac2022-06-30  25

自签TLS证书

TLS证书用于进行通信使用,k8s组件需要的证书有:

第一步:安装证书生成工具cfssl

在这之前需要先建立一个目录来存放安装的工具mkdir ssl,后面将安装的工具移动到各自的目录。方便管理

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 chmod +x cfssl-certinfo_linux-amd64 cfssljson_linux-amd64 cfssl_linux-amd64 mv cfssl_linux-amd64 /usr/local/bin/cfssl mv cfssljson_linux-amd64 /usr/local/bin/cfssljson mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

在执行wget命令时,如果没有安装这个wget工具,会提示命令不存在。

//执行命令安装wget工具 yum install -y wget

第二步:使用cfssl -help 查看cfssl工具帮助命令

第三步:利用cfssl工具生成证书

生成配置文件,可以根据这个文件来进行修改以适应自己的需求

生成ca-config.json证书

cat << EOF | tee ca-config.json { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "expiry": "87600h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } } EOF

生成csr.json文件

生成ca-csr.json证书文件

cfssl print-defaults csr > ca-csr.json //修改内容为如下: { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Chengdu", "ST": "Chengdu", "O": "k8s", "OU": "System" } ] }

生成ca-key.pem ca.pem。

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

生成server-csr.json文件

cat << EOF | tee server-csr.json { "CN": "kubernetes", "hosts": [ "172.16.163.131", "172.16.163.130", "172.16.163.129", "kubernetes", "kubernetes.default", "kubernetes.default.svc", "kubernetes.default.svc.cluster", "kubernetes.default.svc.cluster.local" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Chengdu", "ST": "Chengdu", "O": "k8s", "OU": "System" } ] } EOF

生成server.pem,server-key.pem

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server

执行以上命令时会报错

报错原因

{ "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { //应该将ca-config.json文件的profiles改为kubernetes "expiry": "87600h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } }

生成admin-csr.json文件

cfssl print-defaults csr > admin-csr.json

需要将上面的admin-csr.json修改为以下:

{ "CN": "admin", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Chengdu", "ST": "Chengdu", "O": "system:masters", "OU": "System" } ] }

最后生成admin证书---admin-key.pem ,admin.pem

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

生成代理

cfssl print-defaults csr > kube-proxy-csr.json //将kube-proxy-csr.json修改为如下: { "CN": "system:kube-proxy", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Chengdu", "ST": "Chengdu", "O": "k8s", "OU": "System" } ] } //生成代理证书 kube-proxy-key.pem , kube-proxy.pem cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

最后过滤掉pem之外的.json文件

ls | grep -v pem

使用命令ls | grep -v pem |xargs -i rm {}删除除了pem文件之外的其他文件。

到此证书就生成好了。

转载于:https://www.cnblogs.com/jasonboren/p/11483458.html

最新回复(0)