您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何在kubernetes上部署consul集群”,在日常操作中,相信很多人在如何在kubernetes上部署consul集群問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何在kubernetes上部署consul集群”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
consul 集群的三個節點部署方式使用 StatefulSet
consul集群成員之間使用TLS進行安全通信 TLS and encryption keys
本教程利用了Kubernetes 1.7.0和更高版本的特性.
kubernetes 1.7.x
下客戶端必須安裝在本教程所使用的機器上:
consul 0.9.x
cfssl and cfssljson 1.2
Clone this repo:
git clone https://github.com/nicklv/consul_cluster_on_kubernetes.git
進入到 consul-on-kubernetes 目錄:
cd consul-on-kubernetes
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
Gossip communication Consul 集群成員之間使用共享的加密密鑰進行加密通信。使用以下命令生成加密密鑰:
GOSSIP_ENCRYPTION_KEY=$(consul keygen)
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
kubectl create -f pvc/pvc.yaml
通過創建一個service來暴露Consul 集群功能:
kubectl create -f services/consul.yaml
通過部署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集群的UI站點不支持權限驗證,所以為了安全起見不建議在生產環境把Web UI訪問暴露到外網。訪問Web-UI有兩種訪問方式:
通過port-forward把consul-0節點的8500端口暴露出來,這種方式類似nodeport模式,所有訪問consul-0節點所在服務器8500端口的流量都被轉發到consul-0。弊端,節點重啟之后所在服務器節點發生變化的話訪問IP也跟著變化。建議在實驗環境使用這種模式。
kubectl port-forward consul-0 8500:8500
執行以上命令之后,通過URL地址 http://127.0.0.1:8500訪問consul集群web管理界面。
通過Ingress暴露外網訪問,我們配置了一個 consul.xxxx.cn 的域名,暴露到了外網。這種模式,外網可以無限制進行consul集群web管理界面訪問,所以建議在開發或者測試環境使用,不要在生產環境使用該模式。
運行cleanup腳本,會自動清除掉所有正在運行的consul相關的kubernetes資源。備注:根據實際情況調整下 cleanup腳本。
bash cleanup
到此,關于“如何在kubernetes上部署consul集群”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。