首页 > 解决方案 > 错误核心:查找令牌失败:错误=无法读取条目,拨打 tcp [::1]:8500:getsockopt: Vault 日志中的连接被拒绝

问题描述

我们正在使用 Jmeter 对我们的应用程序执行负载测试,我们的应用程序使用 consul 和 vault 作为后端服务,用于读取/存储应用程序配置相关数据。在执行负载测试时,我们的应用程序会查询保险库以获取身份验证数据,并且每次传入请求都会发生这种情况。最初它可以正常运行一段时间(10 到 15 分钟),我可以在 Jmete 中看到成功响应,但最终在某个时间后,所有请求的响应都开始失败。我在保险库日志中看到每个请求的以下错误,但在领事日志中没有看到任何错误/异常。

保险柜日志中的错误

[错误]核心:查找令牌失败:错误=读取条目失败:获取http://localhost:8500/v1/kv//vault/sys/token/id/87f7b82131cb8fa1ef71aa52579f155d4cf9f095:拨打tcp [::1]:8500 :getsockopt:连接被拒绝

截至目前,负载为每 10 毫秒 100 个请求(用户),加速周期为 60 秒。这在一个循环中执行。此错误的原因可能是什么?是不是因为8500端口的连接有限

下面是我的保险库和领事配置 保险柜

backend "consul" {
 address = "localhost:8500"
 path = "app/vault/"
}

listener "tcp" {
 address = "10.88.97.216:8200"
 cluster_address = "10.88.97.216:8201"
 tls_disable = 0
 tls_min_version = "tls12"
 tls_cert_file = "/var/certs/vault.crt"
 tls_key_file = "/var/certs/vault.key"
}

领事

{
 "data_dir": "/var/consul",
 "log_level": "info",
 "server": true,
 "leave_on_terminate": true,
 "ui": true,
 "client_addr": "127.0.0.1",
 "ports": {
   "dns": 53,
   "serf_lan": 8301,
   "serf_wan" : 8302
 },
 "disable_update_check": true,
 "enable_script_checks": true,
 "disable_remote_exec": false,
 "domain": "primehome",
 "limits": {
   "http_max_conns_per_client": 1000,
   "rpc_max_conns_per_client": 1000
 },

 "service": {
   "name": "nginx-consul-https",
   "port": 443,
   "checks": [{
        "http": "https://localhost/nginx_status",
        "tls_skip_verify": true,
        "interval": "10s",
        "timeout": "5s",
        "status": "passing"
   }]
 }
}

我还配置了 http_max_conns_per_client 和 rpc_max_conns_per_client,认为这可能是由于连接百分比有限。但我仍然在保管库日志中看到此错误。

标签: kubernetesconsulhashicorp-vault

解决方案


再看一遍之后,问题似乎是 Vault 正试图通过 IPv6 环回地址联系 Consul——可能是因为存在 v4 和 v6 地址/etc/hosts——但 Consul 只监听 IPv4 环回地址。

您可以通过以下方法之一解决此问题。

  1. 在 Vault 配置中使用127.0.0.1而不是localhostConsul 的地址。

    backend "consul" {
     address = "127.0.0.1:8500"
     path = "app/vault/"
    }
    
  2. 将 Consul 配置为侦听 IPv4 和 IPv6 环回地址。

    {
      "client_addr": "127.0.0.1 [::1]"
    }
    

    (为简洁起见,省略了其余配置。)

  3. localhost从 IPv6 环回中删除主机名/etc/hosts

    127.0.0.1   localhost
    
    # Old hosts entry for ::1
    #::1        localhost ip6-localhost ip6-loopback
    
    # New entry
    ::1     ip6-localhost ip6-loopback
    

推荐阅读