我在 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 内部访问外部资源:
-
创建服务和端点对象。在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
来自不同的命名空间。
- 创建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(使用前将#替换为@)