溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

CFSSL使用方法重新整理說明

發(fā)布時(shí)間:2020-06-10 14:10:52 來源:網(wǎng)絡(luò) 閱讀:3622 作者:moakia 欄目:云計(jì)算

CFSSL是CloudFlare的PKI / TLS瑞士×××。它既是命令行工具,也是用于簽名,驗(yàn)證和捆綁TLS證書的HTTP API服務(wù)器.
1.下載安裝CFSSL(用于簽名,驗(yàn)證和捆綁TLS證書的HTTP API工具)(master節(jié)點(diǎn))
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 /usr/local/bin/cfssljson
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssl-certinfo /usr/local/bin/cfssljson

2創(chuàng)建CA(Certificate Authority)(master節(jié)點(diǎn))
    mkdir /root/ssl
    cd /root/ssl
    cfssl print-defaults config > config.json # 默認(rèn)配置模板
    cfssl print-defaults csr > csr.json #默認(rèn)csr請求模板
    # 根據(jù)config.json文件的格式創(chuàng)建如下的ca-config.json文件
    # 過期時(shí)間設(shè)置成了 87600h

    cat > ca-config.json <<EOF
    {
      "signing": {
        "default": {
          "expiry": "87600h"
        },
        "profiles": {
          "kubernetes": {
            "usages": [
                "signing",
                "key encipherment",
                "server auth",
                "client auth"
            ],
            "expiry": "87600h"
          }
        }
      }
    }
    EOF

        知識點(diǎn):
            ca-config.json:可以定義多個(gè) profiles,分別指定不同的過期時(shí)間、使用場景等參數(shù);后續(xù)在簽名證書時(shí)使用某個(gè) profile;此實(shí)例只有一個(gè)kubernetes模板。
            signing:表示該證書可用于簽名其它證書;生成的 ca.pem 證書中 CA=TRUE;
            server auth:表示client可以用該 CA 對server提供的證書進(jìn)行驗(yàn)證;
            client auth:表示server可以用該CA對client提供的證書進(jìn)行驗(yàn)證;
            注意標(biāo)點(diǎn)符號,最后一個(gè)字段一般是沒有都好的。

3 創(chuàng)建證書請求

    cat > ca-csr.json <<EOF
    {
      "CN": "kubernetes",    
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "GuangDong",
          "L": "ShenZhen",
          "O": "k8s",
          "OU": "System"
        }
      ],
        "ca": {
           "expiry": "87600h"
        }
    }   
    EOF

        知識點(diǎn):
            "CN":Common Name,kube-apiserver 從證書中提取該字段作為請求的用戶名 (User Name)
            "O":Organization,kube-apiserver 從證書中提取該字段作為請求用戶所屬的組 (Group)

4 生成CA證書和私鑰
    cfssl gencert -initca ca-csr.json | cfssljson -bare ca
    將會生成 ca-key.pem(私鑰)  ca.pem(公鑰)
    知識點(diǎn): cfssljson只是整理json格式,-bare主要的意義在于命名 (個(gè)人見解,以便理解,勿噴)

5 創(chuàng)建kubernetes證書請求文件
    cat > kubernetes-csr.json <<EOF
    {
        "CN": "kubernetes",
        "hosts": [
          "127.0.0.1",
          "10.192.44.129",
          "10.192.44.128",
          "10.192.44.126",
          "10.192.44.127",
          "10.254.0.1",
          "*.kubernetes.master",
          "localhost",
          "kubernetes",
          "kubernetes.default",
          "kubernetes.default.svc",
          "kubernetes.default.svc.cluster",
          "kubernetes.default.svc.cluster.local"
        ],
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "ST": "GuangDong",
                "L": "ShenZhen",
                "O": "k8s",
                "OU": "System"
            }
        ]
    }
        EOF
            知識點(diǎn):
                這個(gè)證書目前專屬于 apiserver加了一個(gè) *.kubernetes.master 域名以便內(nèi)部私有 DNS 解析使用(可刪除);至于很多人問過 kubernetes 這幾個(gè)能不能刪掉,答案是不可以的;因?yàn)楫?dāng)集群創(chuàng)建好后,default namespace 下會創(chuàng)建一個(gè)叫 kubenretes 的 svc,有一些組件會直接連接這個(gè) svc 來跟 api 通訊的,證書如果不包含可能會出現(xiàn)無法連接的情況;其他幾個(gè) kubernetes 開頭的域名作用相同
                hosts包含的是授權(quán)范圍,不在此范圍的的節(jié)點(diǎn)或者服務(wù)使用此證書就會報(bào)證書不匹配錯(cuò)誤。
                10.254.0.1是指kube-apiserver 指定的 service-cluster-ip-range 網(wǎng)段的第一個(gè)IP。
                #hosts配置區(qū)域,即一個(gè)證書的網(wǎng)站可以是*.youku.com也是可以是*.google.com
6 kubernetes證書和私鑰
        cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes 
        知識點(diǎn): -config 引用的是模板中的默認(rèn)配置文件,-profiles是指定特定的使用場景,比如ca-config.json中的kubernetes區(qū)域
7 創(chuàng)建admin證書
        cat > admin-csr.json <<EOF
        {
          "CN": "admin",
          "hosts": [],
          "key": {
            "algo": "rsa",
            "size": 2048
          },
          "names": [
            {
              "C": "CN",
              "ST": "GuangDong",
              "L": "ShenZhen",
              "O": "system:masters",
              "OU": "System"
            }
          ]
        }
        EOF

8 生成admin證書和私鑰
        cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
            知識點(diǎn):
                這個(gè)admin 證書,是將來生成管理員用的kube config 配置文件用的,現(xiàn)在我們一般建議使用RBAC 來對kubernetes 進(jìn)行角色權(quán)限控制, kubernetes 將證書中的CN 字段 作為User, O 字段作為 Group
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI