我在GCP中设置了三个kubernetes集群环境。 在所有这些环境中,我都已将Fluentd安装为守护程序集,以从所有Pod中收集日志。 我还在集群外部的单独服务器中安装了elasticsearch和kibana。 我需要将流利的日志输入远程服务器中的elasticsearch,从而运行集中式日志记录平台。
如何将流利的数据发送到远程服务器中的elasticsearch?
收到的错误是:
error_class = Fluent :: Plugin :: ElasticsearchOutput :: ConnectionFailure error =“无法到达Elasticsearch集群
答案 0 :(得分:1)
documentation中提到了两种从Pod内部访问外部资源的常用方法:
创建服务和端点对象。在Endpoint的规范中设置外部IP地址:
kind: Service
apiVersion: v1
metadata:
name: ext-elastic
namespace: default
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9200
---
kind: Endpoints
apiVersion: v1
metadata:
name: ext-elastic
namespace: default
subsets:
- addresses:
- ip: 1.2.3.4
ports:
- port: 9200
注意::终结点IP可能不是环回(
127.0.0.0/8
),本地链接 (169.254.0.0/16
)或本地链接多播(224.0.0.0/24
)。他们不可以 成为其他Kubernetes服务的群集IP,因为 kube-proxy组件尚不支持将虚拟IP作为目标。
您可以通过在相同名称空间中使用http://ext-elastic
或从其他名称空间使用http://ext-elastic.default.svc.cluster.local
来访问此服务。
ExternalName服务是不提供服务的特殊情况 有选择器。它没有定义任何端口或端点。而是 用作将别名返回到驻留的外部服务的方法 在集群之外。
kind: Service
apiVersion: v1
metadata:
name: ext-elastic
namespace: default
spec:
type: ExternalName
externalName: my.external.elasticsearch.com
ports:
- port: 80
查找主机my-service.prod.svc.CLUSTER时,群集DNS 服务将返回带有值的CNAME记录 my.database.example.com。访问此类服务的工作原理相同 和其他方式一样,唯一的不同是重定向发生 在DNS级别,并且不会发生代理或转发。你应该 稍后决定将数据库移至群集中,您可以开始 其广告连播,添加适当的选择器或端点并更改 服务类型。
签出另一个article来查看更多示例。