1. 程式人生 > >部署k8s ssl集群實踐2:cfssl配置根證書和秘鑰

部署k8s ssl集群實踐2:cfssl配置根證書和秘鑰

com oca init sta names cloud 1.3 name 需要

參考文檔:
https://github.com/opsnull/follow-me-install-kubernetes-cluster
感謝作者的無私分享。
集群環境已搭建成功跑起來。
文章是部署過程中遇到的錯誤和詳細操作步驟記錄。如有需要對比參考,請按照順序閱讀和測試。

2.1
##安裝CFSSL
使用CloudFlare 的 PKI 工具集 cfssl 來生成 Certificate Authority (CA) 證書和秘鑰文件,
CA 是自簽名的證書,用來簽名後續創建的其它 TLS 證書

[root@k8s-master ~]# mkdir -p /opt/k8s/cert && chown -R k8s /opt/k8s/
[root@k8s-master ~]# cd /opt/k8s/
[root@k8s-master ~]wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@k8s-master ~]wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@k8s-master ~]wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
[root@k8s-master k8s]# ls
bin? cert? cfssl-certinfo_linux-amd64? cfssljson_linux-amd64? cfssl_linux-amd64
[root@k8s-master k8s]# cp cfssl* bin/
[root@k8s-master k8s]# cd bin
[root@k8s-master bin]# ls
cfssl-certinfo_linux-amd64? cfssljson_linux-amd64? cfssl_linux-amd64? environment.sh
[root@k8s-master bin]#
[root@k8s-master bin]# find -name "*_linux-amd64" |for i in *;do mv $i `echo $i |sed ‘s/\_linux-amd64//g‘`;done
[root@k8s-master bin]# ls
cfssl? cfssl-certinfo? cfssljson? environment.sh
[root@k8s-master ~]# export PATH=/opt/k8s/bin:$PATH ?

永久定義路徑:

[root@k8s-master ~]# echo "export PATH=/opt/k8s/bin:$PATH" >>.bashrc
[root@k8s-master ~]# cat .bashrc
# .bashrc

# User specific aliases and functions

alias rm=‘rm -i‘
alias cp=‘cp -i‘
alias mv=‘mv -i‘

# Source global definitions
if [ -f /etc/bashrc ]; then
? ? ? ? . /etc/bashrc
fi
export PATH=/opt/k8s/bin:/opt/k8s/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@k8s-master ~]# source .bashrc
[root@k8s-master ~]#
[root@k8s-master ~]# chmod +x /opt/k8s/bin/*
[root@k8s-master ~]# cfssl version
Version: 1.2.0
Revision: dev
Runtime: go1.6

2.2
創建根證書
CA 證書是集群所有節點共享的,只需要創建一個 CA 證書,後續創建的所有證書都由它簽名。

創建配置文件
CA 配置文件用於配置根證書的使用場景 (profile) 和具體參數 (usage,過期時間、服務端認證、客戶端認證、加密等),後續在簽名其它證書時需要指定特定場景。

[root@k8s-master cfssl]# cat ca-config.json
{
? "signing": {
? ? "default": {
? ? ? "expiry": "87600h"
? ? },
? ? "profiles": {
? ? ? "kubernetes": {
? ? ? ? "usages": [
? ? ? ? ? ? "signing",
? ? ? ? ? ? "key encipherment",
? ? ? ? ? ? "server auth",
? ? ? ? ? ? "client auth"
? ? ? ? ],
? ? ? ? "expiry": "87600h"
? ? ? }
? ? }
? }
}

signing:表示該證書可用於簽名其它證書,生成的 ca.pem 證書中 CA=TRUE;
server auth:表示 client 可以用該該證書對 server 提供的證書進行驗證;
client auth:表示 server 可以用該該證書對 client 提供的證書進行驗證;

創建證書簽名請求文件

[root@k8s-master cfssl]# cat ca-csr.json
{
? "CN": "kubernetes",
? "key": {
? ? "algo": "rsa",
? ? "size": 2048
? },
? "names": [
? ? {
? ? ? "C": "CN",
? ? ? "ST": "SZ",
? ? ? "L": "SZ",
? ? ? "O": "k8s",
? ? ? "OU": "4Paradigm"
? ? }
? ]
}
[root@k8s-master cfssl]#

生成 CA 證書和私鑰

[root@k8s-master cfssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
2018/08/16 16:01:21 [INFO] generating a new CA key and certificate from CSR
2018/08/16 16:01:21 [INFO] generate received request
2018/08/16 16:01:21 [INFO] received CSR
2018/08/16 16:01:21 [INFO] generating key: rsa-2048
2018/08/16 16:01:21 [INFO] encoded CSR
2018/08/16 16:01:21 [INFO] signed certificate with serial number 205566785593103327654759750393009729905695377637
[root@k8s-master cfssl]# ls ca*
ca-config.json? ca.csr? ca-csr.json? ca-key.pem? ca.pem

##ca.pem 根證書?
##ca-key.pem 證書公鑰

2.3
分發證書文件
將生成的 CA 證書、秘鑰文件、配置文件拷貝到所有節點的 /etc/kubernetes/cert 目錄下:

[root@k8s-master cfssl]# cp ca* /etc/kubernetes/cert/
[root@k8s-master cfssl]# scp ca* root@k8s-node1:/etc/kubernetes/cert/
ca-config.json? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100%? 292?? 225.0KB/s?? 00:00? ?
ca.csr? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100%? 993? ?? 1.3MB/s?? 00:00? ?
ca-csr.json? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 100%? 201?? 288.7KB/s?? 00:00? ?
ca-key.pem? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1675? ?? 2.5MB/s?? 00:00? ?
ca.pem? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1338? ?? 2.0MB/s?? 00:00? ?
[root@k8s-master cfssl]# scp ca* root@k8s-node2:/etc/kubernetes/cert/
ca-config.json? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100%? 292?? 290.3KB/s?? 00:00? ?
ca.csr? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100%? 993? ?? 1.2MB/s?? 00:00? ?
ca-csr.json? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 100%? 201?? 265.3KB/s?? 00:00? ?
ca-key.pem? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1675? ?? 2.1MB/s?? 00:00? ?
ca.pem? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1338? ?? 1.9MB/s?? 00:00? ?
[root@k8s-master cfssl]#

部署k8s ssl集群實踐2:cfssl配置根證書和秘鑰