Kubernetes/Helm部署HashiCorp Vault出现HTTP发往HTTPS服务错误
问题根因定位
当前核心矛盾是Kubernetes集群内置的健康检查探针、服务端口转发逻辑和Vault开启TLS后的监听配置不匹配,同时存在HA存储配置冲突、端口映射混乱的问题,具体如下:
- 同时开启了raft和consul两种存储,Vault启动时会随机选择存储加载,直接导致部署不稳定、偶发正常的情况
- 服务配置端口映射混乱:service的port是8200,targetPort是443,但是Vault的TCP监听器两个配置分别监听8200和443且都开启了TLS,健康探针默认用HTTP请求访问127.0.0.1:8200,自然触发HTTP请求发送到HTTPS服务的报错
- Ingress未配置后端转发协议规则,导致域名无法正常访问
排查&解决步骤
第一步:清理冲突配置
删除ha.raft.config完整配置段,仅保留你需要的consul存储配置即可,避免多存储逻辑冲突。
第二步:修正健康检查探针配置
在server段下添加如下配置,让探针改用HTTPS协议请求,适配Vault的TLS配置:
server: readinessProbe: enabled: true path: "/v1/sys/health?standbyok=true&sealedcode=200&uninitcode=200" scheme: HTTPS failureThreshold: 2 initialDelaySeconds: 5 periodSeconds: 5 successThreshold: 1 timeoutSeconds: 3 livenessProbe: enabled: true path: "/v1/sys/health?standbyok=true" scheme: HTTPS failureThreshold: 2 initialDelaySeconds: 60 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 3
第三步:统一端口映射逻辑
修正service和listener的端口配置,避免映射混乱:
server: service: enabled: true port: 8200 targetPort: 8200 # 和listener的监听端口对齐 ha: config: | ui = true listener "tcp" { tls_disable = false address = "[::]:8200" # 统一监听8200端口 cluster_address = "[::]:8201" tls_cert_file = "/vault/userconfig/vault-server-tls/tls.crt" tls_key_file = "/vault/userconfig/vault-server-tls/tls.key" tls_client_ca_file = "/vault/userconfig/vault-server-tls/vault.ca" tls_require_and_verify_client_cert = false } storage "consul" { path = "vault" address = "HOST_IP:8500" } disable_mlock = true
第四步:修正Ingress配置,解决域名无法访问问题
补充Ingress转发规则和后端协议配置:
ingress: enabled: true annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" # 告知Ingress用HTTPS协议转发到后端Vault服务 # 保留原有cert、dns相关的annotation配置 hosts: - host: "vault.<hostname>" paths: - path: / pathType: Prefix backend: service: name: vault port: number: 8200
第五步:重新部署验证
卸载原有Vault release,删除遗留的PVC(避免残留封存数据影响),用修正后的values.yaml重新部署,完成后手动解封Vault即可恢复正常。
内容的提问来源于stack exchange,提问作者anonymousmonkey339
相关产品推荐
相关产品推荐

