在kubernetes上部署consul叢集
作者:歐陽廣陌 來源: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有兩種訪問方式:
-
透過port-forward把consul-0節點的8500埠暴露出來,這種方式類似nodeport模式,所有訪問consul-0節點所在伺服器8500埠的流量都被轉發到consul-0。弊端,節點重啟之後所在伺服器節點發生變化的話訪問IP也跟著變化。建議在實驗環境使用這種模式。
kubectl port-forward consul-0 8500:8500
執行以上命令之後,透過URL地址 訪問consul叢集web管理介面。
-
透過Ingress暴露外網訪問,我們配置了一個 的域名,暴露到了外網。這種模式,外網可以無限制進行consul叢集web管理介面訪問,所以建議在開發或者測試環境使用,不要在生產環境使用該模式。
清理
執行cleanup指令碼,會自動清除掉所有正在執行的consul相關的kubernetes資源。備註:根據實際情況調整下 cleanup指令碼。
bash cleanup
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31473948/viewspace-2212402/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes — 在 OpenStack 上使用 kubeadm 部署高可用叢集
- 在 Azure 上部署 Kubernetes 叢集
- 在 Azure 中部署 Kubernetes 容器叢集
- 教你在Kubernetes中快速部署ES叢集
- 容器化 | 在 Kubernetes 上部署 RadonDB MySQL 叢集MySql
- 使用Rancher在Kubernetes上部署EMQ X叢集MQ
- 使用Gardener在GoogleCloudPlatform上建立Kubernetes叢集GoCloudUDPPlatform
- Kubernetes 叢集搭建(上)
- 拆除kubeadm部署的Kubernetes 叢集
- Kubernetes部署叢集Mysql服務MySql
- 使用Gardener在Google Cloud Platform上建立Kubernetes叢集GoCloudPlatform
- 使用 Terraform 在 AWS 上快速部署 MQTT 叢集ORMMQQT
- docker搭建consul叢集Docker
- 安裝Consul叢集
- 將 .NET Aspire 部署到 Kubernetes 叢集
- 基於containerd 部署 kubernetes 1.28叢集AI
- 在 Minecraft 中管理 Kubernetes 叢集Raft
- 使用 Terraform 在阿里雲上快速部署 MQTT 叢集ORM阿里MQQT
- Kubernetes叢集部署史上最詳細(二)Prometheus監控Kubernetes叢集Prometheus
- 部署Kubernetes v1.22.10高可用叢集
- Kubernetes 部署 Nebula 圖資料庫叢集資料庫
- Docker中建立Consul叢集Docker
- 基於Ubuntu部署企業級kubernetes叢集---k8s叢集容部署UbuntuK8S
- 在滴滴雲上學習 Kubernetes v1.13.0:叢集搭建
- Ubuntu上kubeadm安裝Kubernetes叢集Ubuntu
- 如何在CentOS上建立Kubernetes叢集CentOS
- 在華為雲 OSC 上快速部署 EMQX MQTT 叢集MQQT
- kubeadm部署一主兩從的kubernetes叢集
- 使用 Kubeadm+Containerd 部署一個 Kubernetes 叢集AI
- 使用Minikube部署本地Kubernetes叢集(二十八)
- 利用 Kubeadm部署 Kubernetes 1.13.1 叢集實踐錄
- consul叢集docker版本指令碼Docker指令碼
- 在kubernetes叢集中部署open-falcon
- 在大規模 Kubernetes 叢集上實現高 SLO 的方法
- Kubernetes叢集部署
- PostgreSQL-HA 高可用叢集在 Rainbond 上的部署方案SQLAI
- Kubernetes(k8s)部署redis-cluster叢集K8SRedis
- Kubernetes實戰:高可用叢集的搭建和部署