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

时间:2018-07-12 11:46:50

标签: elasticsearch kubernetes kibana fluentd

我在GCP中设置了三个kubernetes集群环境。 在所有这些环境中,我都已将Fluentd安装为守护程序集,以从所有Pod中收集日志。 我还在集群外部的单独服务器中安装了elasticsearch和kibana。 我需要将流利的日志输入远程服务器中的elasticsearch,从而运行集中式日志记录平台。

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

收到的错误是:

  

error_class = Fluent :: Plugin :: ElasticsearchOutput :: ConnectionFailure error =“无法到达Elasticsearch集群

1 个答案:

答案 0 :(得分:1)

documentation中提到了两种从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
    
  

注意::终结点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服务并在规范中指定外部资源的名称:
  

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来查看更多示例。