在kubernetes上部署consul叢集

HitTwice發表於2018-08-20

作者:歐陽廣陌 來源:kubernetes中文社群

原文連結:


本教程將幫助你在kubernetes上部署一個擁有3個節點的consul叢集 備註:consul教程見 ;

預覽

  • consul 叢集的三個節點部署方式使用 

  • consul叢集成員之間使用TLS進行安全通訊 

預備知識

本教程利用了Kubernetes 1.7.0和更高版本的特性.

  •  1.7.x

下客戶端必須安裝在本教程所使用的機器上:

  •  0.9.x

  •  and   1.2

使用

Clone this repo:

git clone 

進入到 consul-on-kubernetes 目錄:

cd consul-on-kubernetes

生成 TLS 證書

Consul叢集中成員之間的RPC通訊使用TLS進行加密。透過以下命令初始化CA證書:

cfssl gencert -initca ca/ca-csr.json | cfssljson -bare ca

使用以下命令建立 TLS 證書 和 私有金鑰:

cfssl gencert \  -ca=ca.pem \  -ca-key=ca-key.pem \  -config=ca/ca-config.json \  -profile=default \
  ca/consul-csr.json | cfssljson -bare consul

執行完以上命令之後,在當前目錄你應該看到以下證書檔案:

ca-key.pem
ca.pem
consul-key.pem
consul.pem

生成 Consul Gossip 加密金鑰

 Consul 叢集成員之間使用共享的加密金鑰進行加密通訊。使用以下命令生成加密金鑰:

GOSSIP_ENCRYPTION_KEY=$(consul keygen)

使用以下命令生成Consul 叢集使用的Secret 和 Configmap

Consul叢集將透過CLI標誌、TLS證書和配置檔案來完成配置,這些內容透過Kubernetes的configmaps和secrets來儲存。

將 gossip 加密金鑰 和 TLS 證書 儲存在kubernetes的 Secret中:

kubectl create secret generic consul \  --from-literal="gossip-encryption-key=${GOSSIP_ENCRYPTION_KEY}" \  --from-file=ca.pem \  --from-file=consul.pem \  --from-file=consul-key.pem

將Consul叢集使用的配置檔案儲存在kubernetes的 ConfigMap中:

kubectl create configmap consul --from-file=configs/server.json

在建立Consul service和statefulSet之前,先建立Consul叢集使用到的pv(persistVolume)持久化儲存卷和pvc(persistVolumeClaim)持久化儲存卷宣告

kubectl create -f pvc/pvc.yaml

透過kubectl 命令建立Consul 叢集服務

透過建立一個service來暴露Consul 叢集功能:

kubectl create -f services/consul.yaml

建立 Consul 叢集 StatefulSet

透過部署StatefulSet(有狀態副本集)來啟動Consul叢集的3個例項節點:

kubectl create -f statefulsets/consul.yaml

所有的Consul節點都會被建立,在進入下一步操作之前,先驗證所有的節點都處在正常的 Running 狀態,執行以下命令可以看到如下結果:

kubectl get pods
NAME       READY     STATUS    RESTARTS   AGE
consul-0   1/1       Running   0          50sconsul-1   1/1       Running   0          29sconsul-2   1/1       Running   0          15s

核實節點狀態

在這個環節,Consule 叢集的所有節點都已經啟動。為了確定每個節點都已經正常的工作,可以透過檢視日誌的命令,檢視每個叢集的成員狀態。

kubectl logs consul-0

(這一步可不執行)可以使用Consul CLI檢查consul叢集的健康狀態,可以在新的命令視窗使用port-forward模式來透過IP訪問,在本教程的中我們的測試環境申請了域名,透過花生殼支援外網訪問。

kubectl port-forward consul-0 8400:8400
Forwarding from 127.0.0.1:8400 -> 8400Forwarding from [::1]:8400 -> 8400

(如果不執行上一步命令,可以透過以下命令進入到consul-0 pod,kubectl exec -it consul-0 /bin/sh) 執行consul members命令檢視consul叢集所有節點的狀態。

consul members
Node      Address           Status  Type    Build  Protocol  DC
consul-0  10.244.2.197:8301  alive   server  0.9.1  2        dc1
consul-1  10.244.1.231:8301  alive   server  0.9.1  2        dc1
consul-2  10.244.2.198:8301  alive   server  0.9.1  2        dc1

訪問consul 叢集Web UI

目前Consul叢集的UI站點不支援許可權驗證,所以為了安全起見不建議在生產環境把Web UI訪問暴露到外網。訪問Web-UI有兩種訪問方式:

  1. 透過port-forward把consul-0節點的8500埠暴露出來,這種方式類似nodeport模式,所有訪問consul-0節點所在伺服器8500埠的流量都被轉發到consul-0。弊端,節點重啟之後所在伺服器節點發生變化的話訪問IP也跟著變化。建議在實驗環境使用這種模式。

    kubectl port-forward consul-0 8500:8500
    
    執行以上命令之後,透過URL地址 訪問consul叢集web管理介面。
    
  2. 透過Ingress暴露外網訪問,我們配置了一個 的域名,暴露到了外網。這種模式,外網可以無限制進行consul叢集web管理介面訪問,所以建議在開發或者測試環境使用,不要在生產環境使用該模式。

Image of Consul UI

清理

執行cleanup指令碼,會自動清除掉所有正在執行的consul相關的kubernetes資源。備註:根據實際情況調整下 cleanup指令碼。

bash cleanup


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31473948/viewspace-2212402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章