四.CA证书与秘钥

kubernetes集群安全访问有两种方式:"基于CA签名的双向数字证书认证"与"基于BASE或TOKEN的简单认证",生产环境推荐使用"基于CA签名的双向数字证书认证"。

本文档采用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件,CA 是自签名的证书,用来签名后续创建的其它 TLS 证书。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

以kubenode1为例,kubenode2&kubenode3做适当小调整。

1. 安装CFSSL

[root@kubenode1 ~]# mkdir -p /usr/local/cfssl
[root@kubenode1 ~]# cd /usr/local/cfssl/

# cfssl
[root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@kubenode1 cfssl]# mv cfssl_linux-amd64 cfssl
[root@kubenode1 cfssl]# chmod +x cfssl

# cfssl-certinfo
[root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
[root@kubenode1 cfssl]# mv cfssl-certinfo_linux-amd64 cfssl-certinfo
[root@kubenode1 cfssl]# chmod +x cfssl-certinfo

# cfssljson
[root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@kubenode1 cfssl]# mv cfssljson_linux-amd64 cfssljson
[root@kubenode1 cfssl]# chmod +x cfssljson

2. 生成CA模板

# kubenode1节点完成即可
[root@kubenode1 ~]# cd /usr/local/cfssl/

# 生产CA配置文件模板
[root@kubenode1 cfssl]# cfssl print-defaults config > config.json

# 生产CA证书签名请求文件模板
[root@kubenode1 cfssl]# cfssl print-defaults csr > csr.json

3. CA配置文件

# kubenode1节点完成即可,以下的CA证书,签名等可通过scp分发到kubenode2&kubenode3;
# ca-config.json:1个profiles,分别指定不同的过期时间,使用场景等参数,根据需要在不同场景使用不同的profile签名证书;这里以生成的模板为基础修改;
# “signing”:表示该证书可用于签名其他证书,生成的ca.pem证书中CA=TRUE;
# ”server auth“:client可用该CA对server提供的证书进行验证;
# “client auth”:server可用该CA对client提供的证书进行验证;
# 注意每个模块或每行有或没有“,”的区别
[root@kubenode1 cfssl]# cp config.json ca-config.json
[root@kubenode1 cfssl]# vim ca-config.json
{
    "signing": {
        "default": {
            "expiry": "8760h"
        },
        "profiles": {
            "kubernetes": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
} 

4. CA证书签名请求

# “CN”:Common Name,kube-apiserver从证书中提取该字段作为请求的用户名(User Name);浏览器使用该字段验证网站是否合法;
# “O”:Organization,kube-apiserver从证书中提取该字段作为请求用户所属的组(Group)
[root@kubenode1 cfssl]# cp csr.json ca-csr.json
[root@kubenode1 cfssl]# vim ca-csr.json
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "ChengDu",
            "L": "ChengDu",
            "O": "k8s",
            "OU": "cloudteam"
        }
    ]
} 

5. 生成CA证书与秘钥

[root@kubenode1 cfssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
[root@kubenode1 cfssl]# ls ca*

 高可用Kubernetes集群-2. ca证书与秘钥 Cloud

# 简单查看
[root@kubenode1 cfssl]# cfssl-certinfo -cert ca.pem

6. 分发CA证书

# 将生成的CA证书,秘钥,配置文件等分发到所有机器;
# ca-key.pem与ca.pem重要
[root@kubenode1 ~]# mkdir -p /etc/kubernetes/ssl
[root@kubenode1 ~]# cp /usr/local/cfssl/ca* /etc/kubernetes/ssl/
[root@kubenode1 ~]# scp /usr/local/cfssl/ca* root@172.30.200.22:/etc/kubernetes/ssl/
[root@kubenode1 ~]# scp /usr/local/cfssl/ca* root@172.30.200.23:/etc/kubernetes/ssl/
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄