风凉需暖心

导航

3.配置CA证书和秘钥

创建群集中需要的CA证书和秘钥

为确保安全,kubernetes系统各组件需要使用x509证书对通信进行加密和认证,CAcertificate authority)是自签名的根证书,用来签名后续创建的其他证书,这里cloudFlarePKI工具集cfssl创建所有证书,下面部署命令均在k8s-master01节点上执行,然后远程分发文件和执行命令

  1. 安装cfssl工具集

[root@k8s-master01 ~]# mkdir -p /opt/k8s/work && cd /opt/k8s/work

[root@k8s-master01 work]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64

[root@k8s-master01 work]# mv cfssl_linux-amd64 /opt/k8s/bin/cfssl

   

[root@k8s-master01 work]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

[root@k8s-master01 work]# mv cfssljson_linux-amd64 /opt/k8s/bin/cfssljson

   

[root@k8s-master01 work]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

[root@k8s-master01 work]# mv cfssl-certinfo_linux-amd64 /opt/k8s/bin/cfssl-certinfo

   

[root@k8s-master01 work]# chmod +x /opt/k8s/bin/*

[root@k8s-master01 work]# export PATH=/opt/k8s/bin:$PATH

  1. 创建根证书(CA

CA证书是集群所有节点共享的,只需要创建一个CA证书,后续创建的所有证书都由它签名

(1) 创建配置文件

CA配置文件用于配置根证书的使用场景(profile)和具体参数(usage,过期时间,服务端认证,客户端认证,加密等),后续在签名其它证书时需要指定特定场景。

[root@k8s-master01 work]# cd /opt/k8s/work

[root@k8s-master01 work]# cat > ca-config.json <<EOF

{

  "signing": {

    "default": {

      "expiry": "87600h"

    },

    "profiles": {

      "kubernetes": {

        "usages": [

            "signing",

            "key encipherment",

            "server auth",

            "client auth"

        ],

        "expiry": "87600h"

      }

    }

  }

}

EOF

 

配置说明

Signing: 表示该证书可用于签名其他证书,生产的ca.pem证书中CA=TRUE

Server auth: 表示client可以用该 该证书对server提供的证书进行验证;

Client auth: 表示server可以用该 该证书对client提供的证书进行验证;

(2) 创建证书签名请求文件

[root@k8s-master01 work]# cd /opt/k8s/work

[root@k8s-master01 work]# cat > ca-csr.json <<EOF

{

  "CN": "kubernetes",

  "key": {

    "algo": "rsa",

    "size": 2048

  },

  "names": [

    {

      "C": "CN",

      "ST": "ChengDu",

      "L": "ChengDu",

      "O": "k8s",

      "OU": "4Paradigm"

    }

  ]

}

EOF

配置说明:

CNCommon Namekube-apiserver从证书中提取该字段作为请求的用户名(User Name),浏览器使用该字段验证网站是否合法;

O: Organizationkube-apiserver 从证书中提取该字段作为请求用户所属的组(Group);

kube-apiserver 将提取的UserGroup作为RBAC授权的用户标识;

(3) 生成CA证书和私钥

[root@k8s-master01 work]# cd /opt/k8s/work

[root@k8s-master01 work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca

[root@k8s-master01 work]# ls ca*

ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

  1. 分发证书文件

将生成的CA证书,秘钥文件,配置文件拷贝到所有节点的/etc/kubernetes/cert目录下:

[root@k8s-master01 work]# cd /opt/k8s/work

[root@k8s-master01 work]# source /opt/k8s/bin/environment.sh

[root@k8s-master01 work]# for node_all_ip in ${NODE_ALL_IPS[@]}

  do

    echo ">>> ${node_all_ip}"

    ssh root@${node_all_ip} "mkdir -p /etc/kubernetes/cert"

    scp ca*.pem ca-config.json root@${node_all_ip}:/etc/kubernetes/cert

  done

 

 

posted on 2021-06-24 10:01  风凉需暖心  阅读(486)  评论(0编辑  收藏  举报