高可用Kubernetes集群-2. ca證書與秘鑰


四.CA證書與秘鑰

kubernetes集群安全訪問有兩種方式:"基於CA簽名的雙向數字證書認證"與"基於BASE或TOKEN的簡單認證",生產環境推薦使用"基於CA簽名的雙向數字證書認證"。

本文檔采用 CloudFlare 的 PKI 工具集 cfssl 來生成 Certificate Authority (CA) 證書和秘鑰文件,CA 是自簽名的證書,用來簽名后續創建的其它 TLS 證書。

以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*

# 簡單查看
[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/


免責聲明!

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



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