如何将数据从kubernetes集群中的fluidd发送到集群外远程独立服务器中的elasticsearch?

2024-01-01

我在 GCP 中设置了三个 kubernetes 集群环境。 我已在所有这些环境中安装 Fluentd 作为 daemonset,以从所有 pod 收集日志。 我还在集群外的单独服务器中安装了elasticsearch和kibana。 我需要将 fluidd 中的日志提供给远程服务器中的 elasticsearch,从而运行一个集中式日志平台。

如何将数据从 fluidd 发送到远程服务器中的 elasticsearch?

收到的错误是:

error_class=Fluent::Plugin::ElasticsearchOutput::ConnectionFailure 错误=“无法访问 Elasticsearch 集群”


里面提到了两种常见的方式文档 https://kubernetes.io/docs/concepts/services-networking/service/从 Pod 内部访问外部资源:

  1. 创建服务和端点对象。在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
    

NOTE:端点 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来自不同的命名空间。

  1. 创建ExternalName Service并在规范中指定外部资源的名称:

外部名称服务是一种特殊的服务,它不 有选择器。它没有定义任何端口或端点。相反,它 用作将别名返回到驻留的外部服务的一种方式 集群外。

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 级别,不会发生代理或转发。你应该 稍后决定将数据库移至集群中,您可以开始 它的 pod,添加适当的选择器或端点并更改 服务类型。

看看另一个article https://akomljen.com/kubernetes-tips-part-1/查看更多示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将数据从kubernetes集群中的fluidd发送到集群外远程独立服务器中的elasticsearch? 的相关文章

随机推荐