Kubernetes CFSSL介绍

1.cfssl简介

cfssl具有运行一个认证中心所需要的全部功能,认证中心需要一个CA证书(ca.pem)和相应的私钥(ca-key.pem).

CA:certificate authority 认证证书的第三方机构

X.509:证书标准,主要定义了证书中应该包含哪些内容

PEM: privacy enhanced mail,是X.509证书的一种编码格式,该格式以“------BEGIN------”开头,以“-------END------“结尾,中间内容是BASE64编码

CSR: certificate signing request:证书签名请求,这个并不是证书,而是向权威证书颁发机构获取签名证书的申请

CRT/CER: certificate 证书

2.cfssl 安装配置

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

3.构建本地CA

3.1通过cfssl print-defaults 输出配置模板和模板文件,通过重定向输出内容将输出保存到本地

  生成配置模板文件:   

[root@dn01 sfssltest]# cfssl print-defaults config
{
    "signing": {
        "default": {
            "expiry": "168h"
        },
        "profiles": {
            "www": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            },
            "client": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            }
        }
    }
}
[root@dn01 sfssltest]# cfssl print-defaults config > config.json
[root@dn01 sfssltest]# ls
config.json
View Code

  生成证书信息文件:

[root@dn01 sfssltest]# cfssl print-defaults csr
{
    "CN": "example.net",
    "hosts": [
        "example.net",
        "www.example.net"
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "L": "CA",
            "ST": "San Francisco"
        }
    ]
}

[root@dn01 sfssltest]# cfssl print-defaults csr > csr.json
[root@dn01 sfssltest]# ls
csr.json  
View Code

  生成证书 

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

  至此基于cfssl的CA已经配置完成,可以通过gencert 自动处理整个证书生成过程,该过程需要两个文件,一个告诉cfssl本地客户端ca的位置以及如何验证请求,即config文件;另一个为csr配置信息,用于填充CSR,即csr文件。

  例子:

    编写配置文件 ca-config.json

cat > ca-config.json <<EOF
{
    "signing":{
        "default":{
            "expiry":"87600h"
        },
        "profiles":{
            "kubernetes":{
                "expiry":"87600h",
                "usages":[
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}
EOF
[root@dn01 sfssltest]# ls
ca-config.json 
View Code

    编写证书信息 ca-csr.json

cat > ca-csr.json <<EOF
{
    "CN":"kubernetes",
    "key":{
        "algo":"rsa",
        "size":2048
    },
    "names":[
        {
            "C":"CN",
            "L":"Beijing",
            "ST":"Beijing",
            "O":"k8s",
            "OU":"System"
        }
    ]
}
EOF
[root@dn01 sfssltest]# ls
 ca-csr.json
View Code

    生成证书 会自动生成三个文件,分别是:ca.csr   ca-key.pem  ca.pem  

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

3.2 CA建立之后,可以继续签发新的证书


   生成服务端的配置模板及证书信息

cat > server-csr.json << EOF
{
    "CN":"kubernetes",
    "hosts":[
        "127.0.0.1",
        "10.10.100.30",
        "10.10.100.31",
        "10.10.100.32"
        
    ],
    "key":{
        "algo":"rsa",
        "size":2048
    },
    "names":[
        {
            "C":"CN",
            "L":"Beijing",
            "ST":"Beijing",
            "O":"k8s",
            "OU":"System"
        }
    ]
}
EOF
View Code

  使用以上证书信息生成证书

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

   此时会产生三个文件

[root@dn01 sfssltest]# ll
-rw-r--r--. 1 root root  376 Sep 10 03:34 server-csr.json
-rw-r--r--. 1 root root 1070 Sep 10 03:35 sever.csr
-rw-------. 1 root root 1675 Sep 10 03:35 sever-key.pem
-rw-r--r--. 1 root root 1444 Sep 10 03:35 sever.pem
View Code

  集群管理员证书,配置模板及证书信息

cat > admin-csr.json <<EOF
{
    "CN":"admin",
    "hosts":[],
    "key":{
        "algo":"rsa",
        "size":2048
    },
    "names":[
        {
            "C":"CN",
            "L":"Beijing",
            "ST":"Beijing",
            "O":"system:masters",
            "OU":"System"
        }
    ]
}
EOF
View Code

  生成证书

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

  配置及证书信息

cat > kube-proxy-csr.json <<EOF
{
    "CN":"system:kube-proxy",
    "hosts":[],
    "key":{
        "algo":"rsa",
        "size":2048
    },
    "names":[
        {
            "C":"CN",
            "L":"Beijing",
            "ST":"Beijing",
            "O":"k8s",
            "OU":"System"
        }
    ]
}
EOF
View Code

  生成证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=keubernetes kube-proxy-csr.json | cfssjson -bare kube-proxy
View Code

 4.清除非证书文件,只保留证书

[root@dn01 sfssltest]# ls |grep -v pem |xargs -i rm {}

  

 

 

 

 

 

 

 

posted @ 2019-09-09 21:33  彦祚  阅读(1906)  评论(0编辑  收藏  举报