连接拒绝尝试使用 "Forward" TCP 的主机名从 FluentBit 到 Kubernetes 中的 FluentD 实例
Connection refused trying to use hostnames for "Forward" TCP from FluentBit into a FluentD instance in Kubernetes
我将 fluentbit 部署为 sidecar。这个 fluentbit 有一个 Forward 类型的输出,假设将日志发送到部署为 DaemonSet 的 FluentD。
当使用 FluentD 的 PodIP 作为主机时实现有效,但当使用来自 Kubernetes 的服务主机名时我得到连接被拒绝。
这是使用上游方法时的错误:
[error] [net] TCP connection failed: fluentd.logging.svc.cluster.local:24224 (Connection refused)
[error] [net] socket #33 could not connect to fluentd.logging.svc.cluster.local:24224
[debug] [upstream] connection #-1 failed to fluentd.logging.svc.cluster.local:24224
[error] [output:forward:forward.0] no upstream connections available
这是使用常规 Host 方法时的错误:
[error] [output:forward:forward.0] could not write forward header
我尝试使用 Forward for Fluentbit 中的 Host 参数,以及具有相同结果的上游功能。
没有适当的网络政策。这是上游的配置。对于 Host,它将在 OUTPUT 部分中包含 Host 和 Port 而不是 Upstream。
[SERVICE]
Daemon Off
Flush 5
Log_Level debug
Parsers_File parsers.conf
Parsers_File custom_parsers.conf
HTTP_Server Off
[INPUT]
Name tail
Path /var/app-logs/*
Parser json
Tag app-logs.*
Mem_Buf_Limit 5MB
Skip_Long_Lines On
[OUTPUT]
Name forward
Match app-logs.*
Host fluentd.logging.svc.cluster.local
Port 24244
[PARSER]
Name json
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
FluentD 部署有一个 24244 TCP 端口连接到容器 TCP 端口 24244 的服务,FluentD 正在侦听。
一个简单的“nc”测试也显示我能够连接到 PodIP,但不能连接到服务主机名。
我的 FluenD daemonset 中还有一个用于 Prometheus 指标的额外端口,我可以使用主机名“nc”到那个端口。
这是 FluentD 服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
fluentd ClusterIP 10.102.255.48 <none> 24231/TCP,24244/TCP 4d6h
这是 FluentD 部署
Containers:
fluentd:
Container ID: xxxx
Image: xxxx
Image ID: xxxx
Ports: 24231/TCP, 24244/TCP
Host Ports: 0/TCP, 0/TCP
这是 FluentD 转发侦听器配置
<source>
@type forward
port 24224
bind 0.0.0.0
@label @applogs
tag applogs.*
</source>
我是不是漏掉了什么明显的东西?
好吧,愚蠢的错误,号码端口写错了,所以FluentBit中配置的与Kubernetes Service中定义的不匹配-.-
我将 fluentbit 部署为 sidecar。这个 fluentbit 有一个 Forward 类型的输出,假设将日志发送到部署为 DaemonSet 的 FluentD。
当使用 FluentD 的 PodIP 作为主机时实现有效,但当使用来自 Kubernetes 的服务主机名时我得到连接被拒绝。
这是使用上游方法时的错误:
[error] [net] TCP connection failed: fluentd.logging.svc.cluster.local:24224 (Connection refused)
[error] [net] socket #33 could not connect to fluentd.logging.svc.cluster.local:24224
[debug] [upstream] connection #-1 failed to fluentd.logging.svc.cluster.local:24224
[error] [output:forward:forward.0] no upstream connections available
这是使用常规 Host 方法时的错误:
[error] [output:forward:forward.0] could not write forward header
我尝试使用 Forward for Fluentbit 中的 Host 参数,以及具有相同结果的上游功能。
没有适当的网络政策。这是上游的配置。对于 Host,它将在 OUTPUT 部分中包含 Host 和 Port 而不是 Upstream。
[SERVICE]
Daemon Off
Flush 5
Log_Level debug
Parsers_File parsers.conf
Parsers_File custom_parsers.conf
HTTP_Server Off
[INPUT]
Name tail
Path /var/app-logs/*
Parser json
Tag app-logs.*
Mem_Buf_Limit 5MB
Skip_Long_Lines On
[OUTPUT]
Name forward
Match app-logs.*
Host fluentd.logging.svc.cluster.local
Port 24244
[PARSER]
Name json
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
FluentD 部署有一个 24244 TCP 端口连接到容器 TCP 端口 24244 的服务,FluentD 正在侦听。
一个简单的“nc”测试也显示我能够连接到 PodIP,但不能连接到服务主机名。
我的 FluenD daemonset 中还有一个用于 Prometheus 指标的额外端口,我可以使用主机名“nc”到那个端口。
这是 FluentD 服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
fluentd ClusterIP 10.102.255.48 <none> 24231/TCP,24244/TCP 4d6h
这是 FluentD 部署
Containers:
fluentd:
Container ID: xxxx
Image: xxxx
Image ID: xxxx
Ports: 24231/TCP, 24244/TCP
Host Ports: 0/TCP, 0/TCP
这是 FluentD 转发侦听器配置
<source>
@type forward
port 24224
bind 0.0.0.0
@label @applogs
tag applogs.*
</source>
我是不是漏掉了什么明显的东西?
好吧,愚蠢的错误,号码端口写错了,所以FluentBit中配置的与Kubernetes Service中定义的不匹配-.-