kubernetes實踐之六:CFSSL構建本地CA
一:前言
SSL:Secure Sockets Layer,標準化後叫"TLS",http協議預設情況下是不加密內容的,這樣就很可能在內容傳播的時候被別人監聽到,對於安全性要求較高的場合,必須要加密,https就是帶加密的http協議。
訊息-->[公鑰]-->加密後的資訊-->[私鑰]-->訊息
二:CFSSL構建本地CA
1.建立自己的認證中心
CFSSL具有執行一個認證中心所需的全部功能。雖然CFSSL是為執行內部CA而建立,但它足夠健壯,可以用於公開的受信任CA。
執行認證中心需要一個CA證書(ca.pem)和相應的私鑰(ca-key.pem)。後者是極其敏感的資料。任何知道私鑰的人都可以充當CA頒發證書。因此,私鑰的保護至關重要。
2. 生成CA證書和私鑰
建立ca-csr.json檔案
”CN“:Common Name,kube-apiserver 從證書中提取該欄位作為請求的?戶名 (User Name);瀏覽器使用該欄位驗證網站是否合法
"O":Organization ,kube-apiserver 從證書中提取該欄位作為請求?戶所屬的組 (Group);
執行命令 cfssl gencert -initca ca-csr.json | cfssljson -bare ca
生成: ca.pem ca-key.pem ca.csr(證書籤名請求,用於交叉簽名或重新簽名)
3.配置證書生成策略
配置證書生成策略,讓CA軟體知道頒發什麼樣的證書.建立ca-config.json
ca-config.jso: 可以定義多個profiles,分別指定不同的過期時間,使用場景等引數,這裡我們只定義了kubernetes一個profile
signing : 表示該證書可用於簽名其它證書,生成的ca.pem證書中 CA=TRUE
server auth : 表示client可以使用該CA對server提供的證書進行驗證
client auth : 表示server 可以用該CA對client提供的證書進行驗證
4.證書生成與簽名
截止目前,基於CFSSL的CA已經配置完成,該CA如何頒發證書呢?CFSSL提供了兩個命令:gencert和sign。gencert將自動處理整個證書生成過程。該過程需要兩個檔案,一個告訴CFSSL本地客戶端CA的位置以及如何驗證請求,即config檔案,另一個為CSR配置資訊,用於填充CSR 即csr檔案。
舉例:建立 kubernetes 證書籤名請求?件 kubernetes-csr.json (config檔案採用之前的ca-config.json)
如果 hosts 欄位不為空則需要指定授權使用該證書的 IP 或域名列表,由於該證書後續被 etcd 叢集和 kubernetes master 叢集使用,所以上面分別指定了 etcd 叢集、 kubernetes master 叢集的主機 IP 和 kubernetes 服務的服務 IP(一般是 kube-apiserver 指定的 service-cluster-ip-range 網段的第一個IP,如 10.254.0.1。
hosts 中的內容可以為空,即使按照上面的配置,向叢集中增加新節點後也不需要重新生成證書。
執行命令:cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
生成 kubernetes.csr kubernetes-key.pem kubernetes.pem 檔案
SSL:Secure Sockets Layer,標準化後叫"TLS",http協議預設情況下是不加密內容的,這樣就很可能在內容傳播的時候被別人監聽到,對於安全性要求較高的場合,必須要加密,https就是帶加密的http協議。
訊息-->[公鑰]-->加密後的資訊-->[私鑰]-->訊息
CA:certificate authority 認證證書的第三方機構。
X.509:證書標準,主要定義了證書中應該包含哪些內容.其詳情可以參考RFC5280,SSL使用的就是這種證書標準.
PEM: Privacy Enhanced Mail,同樣的X.509證書,可能有不同的編碼格式,pem是其中的一種編碼格式。該種格式以“------BEGIN------”開頭,以“------END------”結尾,中間內容是BASE64編碼。
CSR:Certificate Signing Request,即證書籤名請求,這個並不是證書,而是向權威證書頒發機構獲得簽名證書的申請
CRT/CER :certificate 證書。
PKI:public key infrastructure公鑰基礎設施。使用內部託管的認證中心(CA)PKI藉助數字證書和公鑰加密技術提供可信任的網路身份。通常,證書就是一個包含如下身份資訊的檔案:
- 證書所有組織的資訊
- 公鑰
- 證書頒發組織的資訊
- 證書頒發組織授予的許可權,如證書有效期、適用的主機名、用途等
- 使用證書頒發組織私鑰建立的數字簽名
二:CFSSL構建本地CA
1.建立自己的認證中心
CFSSL具有執行一個認證中心所需的全部功能。雖然CFSSL是為執行內部CA而建立,但它足夠健壯,可以用於公開的受信任CA。
執行認證中心需要一個CA證書(ca.pem)和相應的私鑰(ca-key.pem)。後者是極其敏感的資料。任何知道私鑰的人都可以充當CA頒發證書。因此,私鑰的保護至關重要。
2. 生成CA證書和私鑰
建立ca-csr.json檔案
點選(此處)摺疊或開啟
-
{
-
"CN": "kubernetes",
-
"key": {
-
"algo": "rsa",
-
"size": 2048
-
},
-
"names": [
-
{
-
"C": "CN",
-
"L": "BeiJing",
-
"ST": "BeiJing",
-
"O": "k8s",
-
"OU": "System"
-
}
-
]
- }
”CN“:Common Name,kube-apiserver 從證書中提取該欄位作為請求的?戶名 (User Name);瀏覽器使用該欄位驗證網站是否合法
"O":Organization ,kube-apiserver 從證書中提取該欄位作為請求?戶所屬的組 (Group);
執行命令 cfssl gencert -initca ca-csr.json | cfssljson -bare ca
生成: ca.pem ca-key.pem ca.csr(證書籤名請求,用於交叉簽名或重新簽名)
3.配置證書生成策略
配置證書生成策略,讓CA軟體知道頒發什麼樣的證書.建立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可以使用該CA對server提供的證書進行驗證
client auth : 表示server 可以用該CA對client提供的證書進行驗證
4.證書生成與簽名
截止目前,基於CFSSL的CA已經配置完成,該CA如何頒發證書呢?CFSSL提供了兩個命令:gencert和sign。gencert將自動處理整個證書生成過程。該過程需要兩個檔案,一個告訴CFSSL本地客戶端CA的位置以及如何驗證請求,即config檔案,另一個為CSR配置資訊,用於填充CSR 即csr檔案。
舉例:建立 kubernetes 證書籤名請求?件 kubernetes-csr.json (config檔案採用之前的ca-config.json)
點選(此處)摺疊或開啟
-
{
-
"CN": "kubernetes",
-
"hosts": [
-
"127.0.0.1",
-
"10.116.137.196",
-
"10.116.82.28",
-
"10.116.36.57",
-
"10.254.0.1",
-
"kubernetes",
-
"kubernetes.default",
-
"kubernetes.default.svc",
-
"kubernetes.default.svc.cluster",
-
"kubernetes.default.svc.cluster.local"
-
],
-
"key": {
-
"algo":"rsa",
-
"size":2048
-
},
-
"names": [
-
{
-
"C": "CN",
-
"L": "BeiJing",
-
"ST": "BeiJing",
-
"O": "k8s",
-
"OU": "System"
-
}
-
]
- }
hosts 中的內容可以為空,即使按照上面的配置,向叢集中增加新節點後也不需要重新生成證書。
執行命令:cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
生成 kubernetes.csr kubernetes-key.pem kubernetes.pem 檔案
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2152064/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實踐之十七:架構架構
- Kubernetes證書相關(CFSSL)
- Active Network實踐:構建Kubernetes平臺的最佳工具
- kubernetes實踐之十一:EFK
- PHP實踐之路(六)控制結構PHP
- Express 實戰(六):構建 API 介面ExpressAPI
- 構建與定製:唯品會PaaS基於Kubernetes的實踐
- kubernetes實踐之五十二:Helm
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之十九:API概述API
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- 實踐:GNU構建系統
- 使用 openssl 命令列構建 CA 及證書命令列
- kubernetes實踐之五十九:NetworkPolicy
- kubernetes實踐之六十四:CoreDNSDNS
- kubernetes實踐之九:kube-dnsDNS
- kubernetes實踐之五:網路模型模型
- kubernetes實踐之五十六:雲原生
- kubernetes實踐之四十二:StatefulSet
- 前端測試套件構建實踐前端套件
- Dockerfile 多階段構建實踐Docker
- CA 雲架構的實現之路架構
- kubernetes生產實踐之redis-clusterRedis
- GitOps實踐之kubernetes安裝argocdGitGo
- kubernetes實踐之六十二:Secret 使用
- kubernetes實踐之六十三:使用技巧
- kubernetes實踐之六十五:Service Mesh
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- kubernetes實踐之十二:部署Traefik Ingress
- kubernetes實踐之十四:Service Account與Secret
- 基於CFSSL工具建立CA證書,服務端證書,客戶端證書服務端客戶端
- LoadBalancer在kubernetes架構下的實踐架構
- Webpack自動化構建實踐指南Web
- 前端⼤規模構建演進實踐前端
- Docker多階段構建最佳實踐Docker
- kubernetes實踐之七十三:Istio之配置請求路由路由
- kubernetes實踐之七十二:Istio之策略與遙測