【问题标题】:Fluentd Kubernetes Nodejs : Error: connect ECONNREFUSED 127.0.0.1:24224Fluentd Kubernetes Nodejs:错误:连接 ECONNREFUSED 127.0.0.1:24224
【发布时间】:2021-01-04 07:23:15
【问题描述】:

编辑:我直接在我的 express 应用程序中对流利的服务 IP 进行了编码,它的工作原理......如何在不编码 ip 的情况下让它工作?

我有几个 pod (nodejs + express 服务器)在 Kubernetes 集群上运行。

我想将日志从我的 nodejs pod 发送到 Fluentd DeamonSet

但是我收到了这个错误:

Fluentd error Error: connect ECONNREFUSED 127.0.0.1:24224

我使用的是https://github.com/fluent/fluent-logger-node,我的配置非常简单:

const logger = require('fluent-logger')

logger.configure('pptr', {
   host: 'localhost',
   port: 24224,
   timeout: 3.0,
   reconnectInterval: 600000
});

我的 fluentd conf 文件:

<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>

这是 Fluentd DeamonSet 配置文件:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
    version: v1
spec:
  selector:
    matchLabels:
      k8s-app: fluentd-logging
      version: v1
  template:
    metadata:
      labels:
        k8s-app: fluentd-logging
        version: v1
    spec:
      serviceAccount: fluentd
      serviceAccountName: fluentd
      tolerations:
        - key: node-role.kubernetes.io/master
          effect: NoSchedule
      containers:
        - name: fluentd
          image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch
          ports:
            - containerPort: 24224
          env:
            - name:  FLUENT_ELASTICSEARCH_HOST
              value: "xxx"
            - name:  FLUENT_ELASTICSEARCH_PORT
              value: "xxx"
            - name: FLUENT_ELASTICSEARCH_SCHEME
              value: "https"
            # Option to configure elasticsearch plugin with self signed certs
            # ================================================================
            - name: FLUENT_ELASTICSEARCH_SSL_VERIFY
              value: "true"
            # Option to configure elasticsearch plugin with tls
            # ================================================================
            - name: FLUENT_ELASTICSEARCH_SSL_VERSION
              value: "TLSv1_2"
            # X-Pack Authentication
            # =====================
            - name: FLUENT_ELASTICSEARCH_USER
              value: "xxx"
            - name: FLUENT_ELASTICSEARCH_PASSWORD
              value: "xxx"
          resources:
            limits:
              memory: 200Mi
            requests:
              cpu: 100m
              memory: 200Mi
          volumeMounts:
            - name: config-volume
              mountPath: /fluentd/etc/kubernetes.conf
              subPath: kubernetes.conf
            - name: varlog
              mountPath: /var/log
            - name: varlibdockercontainers
              mountPath: /var/lib/docker/containers
              readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
        - name: config-volume
          configMap:
            name: fluentd-conf
        - name: varlog
          hostPath:
            path: /var/log
        - name: varlibdockercontainers
          hostPath:
            path: /var/lib/docker/containers

我也尝试部署一个服务并暴露 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 应用(部署)终于来了:

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

编辑:我直接在我的 express 应用程序中对流利的服务 IP 进行了编码,它的工作原理......如何在不编码 ip 的情况下让它工作?

【问题讨论】:

  • 您的fluentd Daemonset 在kube-system 中,而您的puppet 部署在default 命名空间中。要将数据发送到此守护程序集,您需要使用以下 FQDN:fluentd.kube-system.svc.cluster.local。你试过这种方式吗?
  • 谢谢,我可以将此 FQDN 作为环境变量放在我的 puppet 部署中吗?

标签: node.js kubernetes fluentd


【解决方案1】:

关注问题的以下部分:

我想将我的 nodejs pod 中的日志发送到 Fluentd DeamonSet。

编辑:我直接在我的 express 应用程序中对流利的服务 IP 进行了编码,并且它可以正常工作。如何在不编码 ip 的情况下让它工作?

看起来 pod 和 fluentd 服务之间的通信是正确的(硬编码 IP 有效)。这里的问题是他们可以相互交流的方式。

您可以通过服务名称与服务fluentd 进行通信。例如(从 pod 内部):

  • curl fluentd:24224

您只能在同一个命名空间中通过其名称(如fluentd)与服务进行通信。如果服务位于另一个命名空间中,则需要使用其完整的 DNS 名称。它的模板和示例如下:

  • 模板:service-name.namespace.svc.cluster.local
  • 示例:fluentd.kube-system.svc.cluster.local

您还可以使用ExternalName 类型的服务将您的服务的完整 DNS 名称映射到一个较短的版本,如下所示:


假设(示例):

  • 您已经创建了一个nginx-namespace 命名空间:
    • $ kubectl create namespace nginx-namespace
  • 您在nginx-namespace 中有一个nginx Deployment 和一个与之关联的服务:
    • $ kubectl create deployment nginx --image=nginx --namespace=nginx-namespace
    • $ kubectl expose deployment nginx --port=80 --type=ClusterIP --namespace=nginx-namespace
  • 您想从另一个命名空间(即default)与nginx Deployment 通信

您可以选择与上面的 pod 进行通信:

  • 通过Pod的IP地址
    • 10.98.132.201
  • 通过(完整)DNS 服务名称
    • nginx.nginx-namespace.svc.cluster.local
  • 通过指向(完整)DNS 服务名称的ExternalName 服务类型
    • nginx-service

ExternalName服务类型示例:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: default # <- the same as the pod communicating with the service
spec:
  type: ExternalName
  externalName: nginx.nginx-namespace.svc.cluster.local

您可以通过以下任一方式将此信息传递给 pod:


其他资源:

【讨论】:

    猜你喜欢
    • 2022-11-03
    • 2020-11-03
    • 1970-01-01
    • 2019-03-15
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2016-10-27
    相关资源
    最近更新 更多