helm安装hashicorp的consul和vault
·
业务需求要将vault集群部署在consul上,所以consul也是集群模式的
一、Consul部署
1.1、准备vaules文件
consul-values.yaml
global:
name: consul
datacenter: dc1
ui:
enabled: true
service:
type: ClusterIP
server:
replicas: 3
bootstrapExpect: 3
disruptionBudget:
enabled: true
maxUnavailable: 0
client:
enabled: true
connectInject:
enabled: true
controller:
enabled: true
修改默认存储大小
# 默认pvc是10Gi,如果需要修改,在server字段下增加,修改存储类型和大小必须重新安装
dataStorage:
enabled: true
size: 20Gi
使用EFS存储
server:
dataStorage:
enabled: true
size: 50Gi
storageClass: "efs-sc"
Consul参数解释
| 参数 (Parameter) | 设置 (Setting) | 解释 (Description) |
|---|---|---|
| global.name | consul | 设置 Consul 部署的全局名称。 |
| datacenter | dc1 | 指定 Consul 所在的数据中心名称。 |
| ui.enabled | true | 是否启用 Consul 的 Web 用户界面。 |
| ui.service.type | ClusterIP | 指定 UI 服务的 Kubernetes 服务类型。ClusterIP 表示只能在集群内部访问。 |
| server.replicas | 3 | 设置 Consul 服务器节点的副本数。 |
| server.bootstrapExpect | 3 | 配置启动时期望的服务器节点数,用于集群的初始选举。 |
| server.disruptionBudget.enabled | true | 是否启用 Pod Disruption Budget 以管理维护和故障时的 Pod 可用性。 |
| server.disruptionBudget.maxUnavailable | 0 | 在维护期间或故障时,最多有多少个服务器 Pod 可以不可用。 |
| client.enabled | true | 是否启用 Consul 客户端节点。 |
| connectInject.enabled | true | 是否启用 Consul Connect 的自动注入功能。 |
| controller.enabled | true | 是否启用 Consul 控制器组件,用于服务同步等功能。 |
1.2、helm添加HashiCorp仓库
helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update
1.3、 安装 Consul
因为没有指定存储类型,会部署在EKS的gp2/3 storageclass
helm install consul hashicorp/consul -f consul-values.yaml --namespace consul --create-namespace
二、vault部署
2.1、准备values文件
custom-values.yaml
server:
dataStorage:
enabled: true
ha:
enabled: true
replicas: 3
raft:
enabled: false
config: |
ui = true
listener "tcp" {
address = "[::]:8200"
tls_disable = 1
}
storage "consul" {
address = "consul-server.consul:8500"
path = "vault/"
}
ui:
enabled: true
Vault 配置参数解释
| 参数 (Parameter) | 设置 (Setting) | 解释 (Description) |
|---|---|---|
| server.dataStorage.enabled | true | 启用或禁用服务器的数据存储。 |
| server.ha.enabled | true | 启用或禁用高可用性 (HA) 配置。 |
| server.ha.replicas | 3 | 设置高可用性模式下的副本数。 |
| server.ha.raft.enabled | false | 启用或禁用 Raft 协议用于高可用性的状态复制。 |
| server.config | - | 详细的服务器配置,配置为多行字符串。包括 UI, 监听器和存储配置。 |
| ui.enabled | true | 启用或禁用 Vault 的用户界面。 |
| listener | “tcp” | |
| listener.address | “[::]:8200” | 监听所有 IPv6 地址的 8200 端口,vault服务端口。 |
| listener.tls_disable | 1 | 禁用 TLS,不使用 SSL/TLS 加密通信。 |
| storage.consul | 配置使用 Consul 作为存储后端。 | |
| storage. address | “consul-server.consul:8500” | 设置 Consul 服务的地址和端口,用于数据存储。 |
| storage.path | “vault/” | 在 Consul 存储中为 Vault 数据指定的基础路径。 |
2.2、安装vault
上面已经添加了hashicorp的仓库
helm install vault hashicorp/vault -f custom-values.yaml --namespace=vault
consul做为后端时不需要像raft一样加入集群,只需要每个节点解禁
2.3、使用Raft协议实现高可用
helm install vault hashicorp/vault --set='server.ha.enabled=true' --set='server.ha.raft.enabled=true' --set='config.ui=true' -n vault
其他两个节点需要解禁后加入集群
kubectl exec -ti vault-1 -n vault -- vault operator raft join http://vault-0.vault-internal:8200
kubectl exec -ti vault-1 -n vault -- vault operator unseal
需要输入三个key
三、创建ingress资源暴露UI
新版本的ingress-nginx指定ClassName需要在spec下,之前是annotions
这里如果没有ui服务就使用consul-server
3.1、创建consul ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: vault-consul-ui
namespace: consul
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: $domain
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: consul-ui
port:
number: 80
3.2、创建vault ingress
vault的ingress创建以后还不能使用,需要初始化集群
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: vault-ui
namespace: vault
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: $domain
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: vault-ui
port:
number: 80
更多推荐



所有评论(0)