【k8s部署】2. 創建CA根證書和秘鑰


如果沒有特殊指明,所有操作均在 zhaoyixin-k8s-01 節點上執行。

為確保安全,kubernetes 系統的各組件需要使用 x509 證書對通信進行加密和認證。

CA (Certificate Authority) 是自簽名的根證書,用來簽名后續創建的其它證書。

CA 證書是集群所有節點共享的,只需要創建一次,后續用它簽名其它所有證書。

安裝 cfssl 工具集

使用 CloudFlare 的 PKI 工具集 cfssl 創建所有證書。

sudo mkdir -p /opt/k8s/cert && cd /opt/k8s/work

wget https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssl_1.4.1_linux_amd64
mv cfssl_1.4.1_linux_amd64 /opt/k8s/bin/cfssl

wget https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssljson_1.4.1_linux_amd64
mv cfssljson_1.4.1_linux_amd64 /opt/k8s/bin/cfssljson

wget https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssl-certinfo_1.4.1_linux_amd64
mv cfssl-certinfo_1.4.1_linux_amd64 /opt/k8s/bin/cfssl-certinfo

chmod +x /opt/k8s/bin/*
export PATH=/opt/k8s/bin:$PATH

創建配置文件

CA 配置文件用於配置根證書的使用場景 (profile) 和具體參數 (usage,過期時間、服務端認證、客戶端認證、加密等):

cd /opt/k8s/work

cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "876000h"
      }
    }
  }
}
EOF
  • signing:表示該證書可用於簽名其它證書(生成的ca.pem證書中CA=TRUE);
  • server auth:表示 client 可以用該證書對 server 提供的證書進行驗證;
  • client auth:表示 server 可以用該證書對 client 提供的證書進行驗證;
  • expiry:876000h:證書有效期設置為 100 年。

創建證書簽名請求文件

cd /opt/k8s/work

cat > ca-csr.json <<EOF
{
  "CN": "kubernetes-ca",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "zhaoyixin"
    }
  ],
  "ca": {
    "expiry": "876000h"
 }
}
EOF
  • CN:Common Name。kube-apiserver 從證書中提取該字段作為請求的用戶名(User Name),瀏覽器使用該字段驗證網站是否合法;
  • O:Organization。kube-apiserver 中證書中提取該字段作為請求用戶所屬的組(Group);
  • kube-apiserver 將提取的 UserGroup 作為 RBAC 授權的用戶標識。

注意:
1.不同證書 csr 文件的 CN、C、ST、L、O、OU 組合必須不同,否則可能出現 PEER'S CERTIFICATE HAS AN INVALID SIGNATURE 錯誤;
2. 后續創建證書的 csr 文件時,CN 都不相同(C、ST、L、O、OU 相同),以達到區分的目的。

生成 CA 證書和私鑰

cd /opt/k8s/work
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
ls ca*

分發證書文件

cd /opt/k8s/work
source /opt/k8s/bin/environment.sh

for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "mkdir -p /etc/kubernetes/cert"
    scp ca*.pem ca-config.json root@${node_ip}:/etc/kubernetes/cert
  done

參考

opsnull/follow-me-install-kubernetes-cluster


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM