由于 LB 健康检查,vault 节点中的连续 TLS 握手错误日志

Continuous TLS handshake error logs in vault nodes due to LB health check

由于我的负载均衡器每 5 秒 ping 保管库节点一次,我每 5 秒就会收到连续的 TLS 握手错误。 Kube 负载均衡器正在使用

ping 我的保管库节点

nc -vz podip podPort 每 5 秒

我已经在我的 config.hcl 中禁用了客户端证书验证,但在我的 kubectl 日志中仍然可以看到下面的 vault

日志
kubectl logs pod-0 -n mynamespace 
[INFO]  http: TLS handshake error from 10.x.x.x:60056: EOF 2020-09-02T01:13:32.957Z 
[INFO]  http: TLS handshake error from 10.x.x.x:23995: EOF 2020-09-02T01:13:37.957Z 
[INFO]  http: TLS handshake error from 10.x.x.x:54165: EOF 2020-09-02T01:13:42.957Z 

下面是我的config.hcl,我正在通过 kube config map

加载


apiVersion: v1
kind: ConfigMap
metadata:
  name: raft-config
  labels:
    name: raft-config
data:
  config.hcl: |
    storage "raft" {
      path  = "/vault-data"
      tls_skip_verify = "true"
      retry_join {
        leader_api_addr = "https://vault-cluster-0:8200"
        leader_ca_cert_file = "/opt/ca/vault.crt"
        leader_client_cert_file = "/opt/ca/vault.crt"
        leader_client_key_file = "/opt/ca/vault.key"
      }
      retry_join {
        leader_api_addr = "https://vault-cluster-1:8200"
        leader_ca_cert_file = "/opt/ca/vault.crt"
        leader_client_cert_file = "/opt/ca/vault.crt"
        leader_client_key_file = "/opt/ca/vault.key"
      }
      retry_join {
        leader_api_addr = "https://vault-cluster-2:8200"
        leader_ca_cert_file = "/opt/ca/vault.crt"
        leader_client_cert_file = "/opt/ca/vault.crt"
        leader_client_key_file = "/opt/ca/vault.key"
      }
    }
    seal "transit" {
     address = "https://vaulttransit:8200"
     disable_renewal = "false"
     key_name = "autounseal"
     mount_path = "transit/"
     tls_skip_verify = "true"
    }
    listener "tcp" {
     address = "0.0.0.0:8200"
     tls_cert_file = "/opt/ca/vault.crt"
     tls_key_file = "/opt/ca/vault.key"
     tls_skip_verify = "true"
     tls_disable_client_certs = "true"
    }
    ui=true
    disable_mlock = true

因为我使用的是外部开源库映像,而我的负载平衡器是一个内部 LB(具有内部 CA 证书)。我怀疑我的 vault pod 在尝试 ping 端口 8200 时无法识别我的负载均衡器提供的 CA 证书(TCP 侦听器由该端口上的 vault 启动)

这些日志是无害的,不会造成任何问题,但它们是我想避免的不必要的噪音。我的保险库节点正在 https 上工作,它们的功能似乎没有问题。

有人可以帮助理解为什么即使我已经明确指定 tls_disable_client_certs = "true"

vault TCP 侦听器仍在尝试进行 TLS 握手

当我的 LB 尝试使用 nc -vz podip podPort

对我的 pods 进行健康检查时,这些日志每 5 秒就会淹没我的 pods

我的库版本是 1.5.3

消息与客户端证书或 CA 证书无关,无论客户端是否提供证书,都会发生 TLS 握手。

相反,这是因为创建并建立了 TCP 连接并且 Go 库现在要开始 TLS 握手。相反,另一方(健康检查器)只是挂断,TLS 握手永远不会发生。 Go 然后记录此消息。

你说它无害是正确的,这纯粹是 port-liveness 健康检查的副作用。然而,它是垃圾邮件和烦人的。

你有两个基本的选择来解决这个问题:

  1. 在持久化时从日志中过滤掉消息
  2. 更改为不同类型的健康检查

我会推荐第二个选项:切换到不同的健康检查。 Vault 有一个 /sys/health 端点,可用于 HTTPS 健康检查。

除了消除 TLS 警告消息外,运行状况端点还允许您检查活动节点和未密封节点。