kubernetes - 错误核心:查找令牌失败:错误=无法读取条目,拨打 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,认为这可能是由于连接百分比有限。但我仍然在保管库日志中看到此错误。
解决方案
再看一遍之后,问题似乎是 Vault 正试图通过 IPv6 环回地址联系 Consul——可能是因为存在 v4 和 v6 地址/etc/hosts
——但 Consul 只监听 IPv4 环回地址。
您可以通过以下方法之一解决此问题。
在 Vault 配置中使用
127.0.0.1
而不是localhost
Consul 的地址。backend "consul" { address = "127.0.0.1:8500" path = "app/vault/" }
将 Consul 配置为侦听 IPv4 和 IPv6 环回地址。
{ "client_addr": "127.0.0.1 [::1]" }
(为简洁起见,省略了其余配置。)
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
推荐阅读
- python - 如何在 Python 中对这个任务进行多线程处理?
- docker - 无法运行部署在 Docker 容器中的快速 API 应用程序
- snowflake-cloud-data-platform - 使用包含阿拉伯文本的数据行复制 S3 文件会导致记录结束并且复制失败
- json - 将查询结果转换为 json 对象
- spring - Spring + Hibernate:在更新条目时从存储库中选择
- python - 具有两个或更多输出的感知器
- typescript - 打字稿如何输出日志
- java - Hashtable - 获取索引之前的第一个元素
- javascript - 是否可以使用 workerpool 从网站获取?
- python - TypeError: 不支持的操作数类型 /: 'str' 和 'int' 仅适用于 KNN