我在使用 elasticsearch JS 客户端的 Minikube 中遇到了这个错误:
getaddrinfo ENOTFOUND <CUSTOM_NAME>-es-default-0.<CUSTOM_NAME>-es-default.default.svc {"name":"ConnectionError","meta":{"body":null,"statusCode":null,"headers":null,"meta":{"context":null,"request":{"params":{"method":"HEAD","path":"/xxx","body":null,"querystring":"","headers":{"user-agent":"elasticsearch-js/7.12.0 (linux 5.11.16-arch1-1-x64; Node.js v16.1.0)","x-elastic-client-meta":"es=7.12.0,js=16.1.0,t=7.12.0,hc=16.1.0"},"timeout":30000},"options":{},"id":2}
以下解决方案不需要使用自签名证书在客户端禁用 TLS 验证。
es-stack yaml:
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: <CUSTOM_NAME>
namespace: default
spec:
version: 7.12.1
auth:
roles:
- secretName: roles
fileRealm:
- secretName: filerealm
http:
tls:
selfSignedCertificate:
subjectAltNames:
- ip: 127.0.0.1
- 访问ES集群的端口转发:
kubectl port-forward service/<CUSTOM_NAME>-es-http 9200:9200
- ES JS 客户端中的设置:
const client = new Client(
{
node: `https://127.0.0.1:9200`,
sniffOnStart: true,
ConnectionPool: MyConnectionPool,
auth: {
username,
password,
},
ssl: {
ca: fs.readFileSync("/tmp/ca.pem"),
rejectUnauthorized: true,
},
};
)
我使用for中的ca.crt
键。如果在启动 node.js 之前将系统环境设置为,也可以去掉这一行,如下所示:<CUSTOM_NAME>-es-http-certs-public
/tmp/ca.pem
NODE_EXTRA_CA_CERTS
/tmp/ca.pem
NODE_EXTRA_CA_CERTS=/tmp/ca.pem node index.js
如果您不确定需要参考什么 CA 证书,只需 ssh 进入 ES 容器,然后检查 .ca.crt 文件中的config/http-certs/
.
- 这是最重要的一步。将此行附加到
/etc/hosts
您的本地计算机上。
127.0.0.1 <CUSTOM_NAME>-es-default-0.<CUSTOM_NAME>-es-default.default.svc
你应该很高兴。在阅读了有关 Ingress 的本教程后,我想到了这个想法:
https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/