摘要:搭建集群前言安裝的集群,默認是一個單機的容器化的,并且和通信沒有經過加密和認證,這點是需要改造的。所以首先我們需要先部署一個三節點的集群,二進制部署,守護進程,并且需要生成證書。
搭建etcd集群 前言
kubeadm安裝的集群,默認etcd是一個單機的容器化的etcd,并且k8s和etcd通信沒有經過ssl加密和認證,這點是需要改造的。
所以首先我們需要先部署一個三節點的etcd集群,二進制部署,systemd守護進程,并且需要生成ca證書。
kuberntes 系統使用 etcd 存儲所有數據,此外calico網絡也使用該etcd集群,本文檔介紹部署一個三節點高可用 etcd 集群的步驟,分別命名為etcd-host1、etcd-host2、etcd-host3:
etcd-host1:172.16.120.151
etcd-host2:172.16.120.152
etcd-host3:172.16.120.153
本文檔用到的變量定義如下:
$ export NODE_NAME=etcd-host1 # 當前部署的機器名稱(隨便定義,只要能區分不同機器即可) $ export NODE_IP=172.16.120.151 # 當前部署的機器 IP $ export NODE_IPS="172.16.120.151 172.16.120.152 172.16.120.153" # etcd 集群所有機器 IP $ # etcd 集群間通信的IP和端口 $ export ETCD_NODES=etcd-host1=https://172.16.120.151:2380,etcd-host2=https://172.16.120.152:2380,etcd-host3=https://172.16.120.153:2380 $
本系列默認使用root用戶操作。
創建 CA 證書和秘鑰本文檔使用 CloudFlare 的 PKI 工具集 cfssl 來生成 Certificate Authority (CA) 證書和秘鑰文件,CA 是自簽名的證書,用來簽名后續創建的其它 TLS 證書。
安裝cfssl如果不希望將cfssl工具安裝到部署主機上,可以在其他的主機上進行該步驟,生成以后將證書拷貝到部署etcd的主機上即可。本教程就是采取這種方法,在一臺測試機上執行下面操作。
$ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 $ chmod +x cfssl_linux-amd64 $ mv cfssl_linux-amd64 /usr/local/bin/cfssl $ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 $ chmod +x cfssljson_linux-amd64 $ mv cfssljson_linux-amd64 /usr/local/bin/cfssljson $ wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 $ chmod +x cfssl-certinfo_linux-amd64 $ mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo $生成ETCD的TLS 秘鑰和證書
為了保證通信安全,客戶端(如 etcdctl) 與 etcd 集群、etcd 集群之間的通信需要使用 TLS 加密,本節創建 etcd TLS 加密所需的證書和私鑰。
創建 CA 配置文件:
$ cat > ca-config.json <ca-config.json:可以定義多個 profiles,分別指定不同的過期時間、使用場景等參數;后續在簽名證書時使用某個 profile;
signing:表示該證書可用于簽名其它證書;生成的 ca.pem 證書中 CA=TRUE;
server auth:表示 client 可以用該 CA 對 server 提供的證書進行驗證;
client auth:表示 server 可以用該 CA 對 client 提供的證書進行驗證;
創建 CA 證書簽名請求:
$ cat > ca-csr.json <"CN":Common Name,kube-apiserver 從證書中提取該字段作為請求的用戶名 (User Name);瀏覽器使用該字段驗證網站是否合法;
"O":Organization,kube-apiserver 從證書中提取該字段作為請求用戶所屬的組 (Group);
生成 CA 證書和私鑰:
$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca $ ls ca* ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem $創建 etcd 證書簽名請求:
$ cat > etcd-csr.json <hosts 字段指定授權使用該證書的 etcd 節點 IP;
生成 etcd 證書和私鑰:
$ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd $ ls etcd* etcd.csr etcd-csr.json etcd-key.pem etcd.pem ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem $ rm etcd.csr etcd-csr.json將生成好的etcd.pem和etcd-key.pem以及ca.pem三個文件拷貝到目標主機的/etc/etcd/ssl目錄下。
下載二進制文件到 https://github.com/coreos/etcd/releases 頁面下載最新版本的二進制文件:
$ wget https://github.com/coreos/etcd/releases/download/v3.2.11/etcd-v3.2.11-linux-amd64.tar.gz $ tar -xvf etcd-v3.2.11-linux-amd64.tar.gz $ mv etcd-v3.2.11-linux-amd64/etcd* /usr/local/bin $創建 etcd 的 systemd unit 文件$ mkdir -p /var/lib/etcd # 必須先創建工作目錄 $ cat > etcd.service <指定 etcd 的工作目錄和數據目錄為 /var/lib/etcd,需在啟動服務前創建這個目錄;
為了保證通信安全,需要指定 etcd 的公私鑰(cert-file和key-file)、Peers 通信的公私鑰和 CA 證書(peer-cert-file、peer-key-file、peer-trusted-ca-file)、客戶端的CA證書(trusted-ca-file);
--initial-cluster-state 值為 new 時,--name 的參數值必須位于 --initial-cluster 列表中;
啟動 etcd 服務$ mv etcd.service /etc/systemd/system/ $ systemctl daemon-reload $ systemctl enable etcd $ systemctl start etcd $ systemctl status etcd $驗證服務部署完 etcd 集群后,在任一 etcd 集群節點上執行如下命令:
$ etcdctl --endpoints=https://172.16.120.151:2379 --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem cluster-health預期結果:
member 71df888fdf6f0bb9 is healthy: got healthy result from https://172.16.120.153:2379 member 73b5207bc2491164 is healthy: got healthy result from https://172.16.120.151:2379 member 7a4ddb7c77253f4b is healthy: got healthy result from https://172.16.120.152:2379三臺 etcd 的輸出均為 healthy 時表示集群服務正常(忽略 warning 信息)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32623.html
摘要:搭建集群前言安裝的集群,默認是一個單機的容器化的,并且和通信沒有經過加密和認證,這點是需要改造的。所以首先我們需要先部署一個三節點的集群,二進制部署,守護進程,并且需要生成證書。 搭建etcd集群 前言 kubeadm安裝的集群,默認etcd是一個單機的容器化的etcd,并且k8s和etcd通信沒有經過ssl加密和認證,這點是需要改造的。所以首先我們需要先部署一個三節點的etcd集群,...
摘要:集群概述整個集群包括大部分集群節點節點集群主要作為集群和網絡的數據存儲。集群組件版本集群機器主從從后續計劃用替換。 前言 k8s部署的方式多種多樣,除去各家云廠商提供的工具,在bare metal中,也有二進制部署和一系列的自動化部署工具(kubeadm,kubespary,rke等)。具體二進制部署大家可以參考宋總的系列文章。而rke是由rancher提供的工具,由于剛剛出來,有不少...
摘要:集群概述整個集群包括大部分集群節點節點集群主要作為集群和網絡的數據存儲。集群組件版本集群機器主從從后續計劃用替換。 前言 k8s部署的方式多種多樣,除去各家云廠商提供的工具,在bare metal中,也有二進制部署和一系列的自動化部署工具(kubeadm,kubespary,rke等)。具體二進制部署大家可以參考宋總的系列文章。而rke是由rancher提供的工具,由于剛剛出來,有不少...
摘要:部署節點節點包含的組件本文檔介紹部署一個三節點高可用集群的步驟,分別命名為安裝在每臺主機安裝。出現如下錯誤解決辦法啟動參數增加參數增加在物理機上可能并不會出現該問題。至此一個完整的高可用集群搭建完畢。 部署master節點 kubernetes master 節點包含的組件: kube-apiserver kube-scheduler kube-controller-manager ...
閱讀 2364·2021-11-11 16:54
閱讀 2612·2021-09-26 09:47
閱讀 3987·2021-09-08 09:36
閱讀 2735·2021-07-25 21:37
閱讀 931·2019-08-30 15:54
閱讀 2542·2019-08-30 14:22
閱讀 3253·2019-08-30 13:57
閱讀 2580·2019-08-29 17:17