Node.js Fluentd Kubernetes节点JS:错误:connect ECONREFUSSED 127.0.0.1:24224
编辑:我直接在我的express应用程序中对fluentd服务IP进行了编码,并对其进行了工作。。如何在无需对ip进行编码的情况下使其正常工作? 我有两个pod(nodejs+express服务器)运行在Kubernetes集群上 我想将日志从我的nodejs pods发送到Fluentd DeamonSet 但我得到了一个错误:Node.js Fluentd Kubernetes节点JS:错误:connect ECONREFUSSED 127.0.0.1:24224,node.js,kubernetes,fluentd,Node.js,Kubernetes,Fluentd,编辑:我直接在我的express应用程序中对fluentd服务IP进行了编码,并对其进行了工作。。如何在无需对ip进行编码的情况下使其正常工作? 我有两个pod(nodejs+express服务器)运行在Kubernetes集群上 我想将日志从我的nodejs pods发送到Fluentd DeamonSet 但我得到了一个错误: Fluentd错误:连接EConrefuse127.0.0.1:24224 我正在使用并且我的配置非常简单: const logger = require('flue
Fluentd错误:连接EConrefuse127.0.0.1:24224
我正在使用并且我的配置非常简单:
const logger = require('fluent-logger')
logger.configure('pptr', {
host: 'localhost',
port: 24224,
timeout: 3.0,
reconnectInterval: 600000
});
我的fluentd配置文件:
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
# Ignore fluent logs
<label @FLUENT_LOG>
<match fluent.*>
@type null
</match>
</label>
<match pptr.**>
@type elasticsearch
host "#{ENV['FLUENT_ELASTICSEARCH_HOST']}"
port "#{ENV['FLUENT_ELASTICSEARCH_PORT']}"
scheme "#{ENV['FLUENT_ELASTICSEARCH_SCHEME'] || 'http'}"
ssl_verify "#{ENV['FLUENT_ELASTICSEARCH_SSL_VERIFY'] || 'true'}"
user "#{ENV['FLUENT_ELASTICSEARCH_USER']}"
password "#{ENV['FLUENT_ELASTICSEARCH_PASSWORD']}"
reload_connections "#{ENV['FLUENT_ELASTICSEARCH_RELOAD_CONNECTIONS'] || 'true'}"
type_name fluentd
logstash_format true
</match>
我还尝试部署服务并公开24224端口:
apiVersion: v1
kind: Service
metadata:
name: fluentd
namespace: kube-system
labels:
app: fluentd
spec:
ports:
- name: "24224"
port: 24224
targetPort: 24224
selector:
k8s-app: fluentd-logging
status:
loadBalancer: {}
最后,我的express应用程序(部署)在这里:
编辑:我直接在我的express应用程序中对fluentd服务IP进行了编码,并对其进行了工作。。如何在无需对ip进行编码的情况下使其工作?重点关注问题的以下部分: 我想把我的nodejs吊舱里的日志发送给Fluentd执事 编辑:我直接在我的express应用程序中对fluentd服务IP进行了编码,并对其进行了工作。。如何在没有harip编码的情况下让它工作 看起来pods和
fluentd
服务之间的通信是正确的(对IP进行硬编码)。这里的问题是他们之间的沟通方式
您可以通过名称与servicefluentd
进行通信。例如(从吊舱内部):
curl fluentd:24224
fluentd
)与服务通信。如果服务位于另一名称空间中,则需要使用其DNS全名。其模板和示例如下所示:
- 模板:
service name.namespace.svc.cluster.local
- 示例:
fluentd.kube system.svc.cluster.local
ExternalName
类型的服务将您的服务的DNS全名映射到一个较短的版本,如下所示:
假设(例如):
- 您已经创建了
命名空间:nginx命名空间
$kubectl创建名称空间nginx名称空间
- 您在
nginx命名空间中有一个
nginx
,以及一个与之关联的服务:部署
$kubectl创建部署nginx--image=nginx--namespace=nginx namespace
$kubectl公开部署nginx--port=80--type=ClusterIP--namespace=nginx namespace
- 您想从另一个名称空间(即
默认值
通信)与
部署nginx
- 通过
Pod的IP地址
10.98.132.201
- 通过(完整)DNS服务名称
nginx.nginx namespace.svc.cluster.local
- 通过指向a(完整)DNS服务名称的
服务类型ExternalName
nginx服务
ExternalName
服务类型示例:
apiVersion:v1
种类:服务
元数据:
名称:nginx服务
命名空间:默认#您的
fluentd
守护程序位于kube系统中
,您的puppet
部署位于default
命名空间中。要将数据发送到此守护程序,您需要使用以下FQDN:fluentd.kube system.svc.cluster.local
。您尝试过这种方法吗?谢谢,我可以在puppet部署中将此FQDN作为env变量吗?
apiVersion: v1
kind: Service
metadata:
name: fluentd
namespace: kube-system
labels:
app: fluentd
spec:
ports:
- name: "24224"
port: 24224
targetPort: 24224
selector:
k8s-app: fluentd-logging
status:
loadBalancer: {}
apiVersion: apps/v1
kind: Deployment
metadata:
name: puppet
labels:
app: puppet
spec:
replicas: 5
selector:
matchLabels:
app: puppet
template:
metadata:
labels:
app: puppet
spec:
containers:
- name: puppet
image: myrepo/my-image
ports:
- containerPort: 8080