【k8s部署】2. 建立CA根證書和祕鑰

若是沒有特殊指明,全部操做均在 zhaoyixin-k8s-01 節點上執行。node

爲確保安全,kubernetes 系統的各組件須要使用 x509 證書對通訊進行加密和認證。linux

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

CA 證書是集羣全部節點共享的,只須要建立一次,後續用它簽名其它全部證書。github

安裝 cfssl 工具集

使用 CloudFlare 的 PKI 工具集 cfssl 建立全部證書。json

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,過時時間、服務端認證、客戶端認證、加密等):api

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-clusterssh

相關文章
相關標籤/搜索