Contents
  1. 1. 安装&基本配置
    1. 1.1. config.json
    2. 1.2. ca-csr.json
    3. 1.3. 签名证书json
  2. 2. 创建证书
    1. 2.1. 创建普通用户
    2. 2.2. base64编码

cfssl是CloudFlare开源的SSL/TLS瑞士军刀,使用go语言编写,可以在github看到源码

安装&基本配置

go的东西安装最简单,下载后把文件放进/usr/bin/,给个运行权限就ok。
下载地址,这里选个版本,一般用cfssl和cfssljson这2个。
cfssl主要用到3种配置文件

config.json

用于创建服务器或者客户端证书,可以用命令建一个默认的再修改

1
cfssl print-defaults config > config.json

配置里面profiles可以定义几种证书类型,一般是server auth,client auth,peer(相当于server和client合并)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"peer": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
},
"server": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
}
}
}
}

ca-csr.json

用于初始化ca证书

1
cfssl print-defaults csr > ca-csr.json

初始化ca证书命令:

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

签名证书json

这里指服务器或者客户端证书,例如apiserver

1
cfssl print-defaults csr > apiserver-csr.json

创建出膜拜后通过修改成可以使用的证书,注意apiserver的hosts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"CN": "k8sdev",
"hosts": [
"127.0.0.1",
"10.22.0.31",
"192.168.10.1",
"*.kubernetes.master",
"localhost",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Guangdong",
"L": "Zhongshan",
"O": "k8s",
"OU": "System"
}
]
}

创建证书

有了ca.pem、ca-key.pem、config.json和apiserver-csr.json后就能创建服务器证书了,profile选peer

1
2
3
4
cfssl gencert -ca=ca.pem \
-ca-key=ca-key.pem \
-config=config.json -profile=peer \
apiserver-csr.json | cfssljson -bare apiserver

命令运行后生成apiserver.pem、apiserver-key.pem、apiserver.csr

创建普通用户

根据不同的使用场景,创建多个csr.json配置来创建不同的证书,例如这个证书是做k8s rbac认证,相当于用户名devuser,group devuser
devuser.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"CN": "devuser",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Guangdong",
"L": "Zhongshan",
"O": "devuser",
"OU": "Mon"
}
]
}

profile选client,表示证书用于客户端认证

1
2
3
4
cfssl gencert -ca=k8s-root-ca.pem \
-ca-key=k8s-root-ca-key.pem \
-config=config.json -profile=client \
devuser-csr.json | cfssljson -bare devuser

命令运行后生成devuser.pem、devuser-key.pem、devuser.csr,我们一般使用前2个

base64编码

kubeconfig的user证书可以直接写进base64编码后的内容,在linux运行下面命令得到base64数据

1
2
cat devuser.pem | base64 | xargs | sed 's/ //g'
cat devuser-key.pem | base64 | xargs | sed 's/ //g'

xargs 使输出变成单行

写进kubeconfig

1
2
3
4
5
users:
- name: devuser
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUV6ekNDQXJlZ0F3SUJBZ0lVWmF.......
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBL......
Contents
  1. 1. 安装&基本配置
    1. 1.1. config.json
    2. 1.2. ca-csr.json
    3. 1.3. 签名证书json
  2. 2. 创建证书
    1. 2.1. 创建普通用户
    2. 2.2. base64编码