编辑:我直接在我的快速应用程序中对流畅的服务IP进行了编码,并且它的工作。如何在没有 Harcoding IP 的情况下让它工作?
我有几个pod(nodejs express服务器)在Kubernetes集群上运行。
我想将日志从我的nodejs pod发送到Fluentd DeamonSet。
但是我得到了这个错误:
Fluentd错误错误:连接ECONNREFUSED127.0.0.1:24224
我正在使用 https://github.com/fluent/fluent-logger-node,我的配置非常简单:
const logger = require('fluent-logger')
logger.configure('pptr', {
host: 'localhost',
port: 24224,
timeout: 3.0,
reconnectInterval: 600000
});
我的fluentd配置文件:
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
# Ignore fluent logs
<label @FLUENT_LOG>
<match fluent.*>
@type null
</match>
</label>
<match pptr.**>
@type elasticsearch
host "#{ENV['FLUENT_ELASTICSEARCH_HOST']}"
port "#{ENV['FLUENT_ELASTICSEARCH_PORT']}"
scheme "#{ENV['FLUENT_ELASTICSEARCH_SCHEME'] || 'http'}"
ssl_verify "#{ENV['FLUENT_ELASTICSEARCH_SSL_VERIFY'] || 'true'}"
user "#{ENV['FLUENT_ELASTICSEARCH_USER']}"
password "#{ENV['FLUENT_ELASTICSEARCH_PASSWORD']}"
reload_connections "#{ENV['FLUENT_ELASTICSEARCH_RELOAD_CONNECTIONS'] || 'true'}"
type_name fluentd
logstash_format true
</match>
这是Fluentd DeamonSet配置文件:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
labels:
k8s-app: fluentd-logging
version: v1
spec:
selector:
matchLabels:
k8s-app: fluentd-logging
version: v1
template:
metadata:
labels:
k8s-app: fluentd-logging
version: v1
spec:
serviceAccount: fluentd
serviceAccountName: fluentd
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch
ports:
- containerPort: 24224
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "xxx"
- name: FLUENT_ELASTICSEARCH_PORT
value: "xxx"
- name: FLUENT_ELASTICSEARCH_SCHEME
value: "https"
# Option to configure elasticsearch plugin with self signed certs
# ================================================================
- name: FLUENT_ELASTICSEARCH_SSL_VERIFY
value: "true"
# Option to configure elasticsearch plugin with tls
# ================================================================
- name: FLUENT_ELASTICSEARCH_SSL_VERSION
value: "TLSv1_2"
# X-Pack Authentication
# =====================
- name: FLUENT_ELASTICSEARCH_USER
value: "xxx"
- name: FLUENT_ELASTICSEARCH_PASSWORD
value: "xxx"
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: config-volume
mountPath: /fluentd/etc/kubernetes.conf
subPath: kubernetes.conf
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: config-volume
configMap:
name: fluentd-conf
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
我还尝试部署一个服务并公开24224端口:
apiVersion: v1
kind: Service
metadata:
name: fluentd
namespace: kube-system
labels:
app: fluentd
spec:
ports:
- name: "24224"
port: 24224
targetPort: 24224
selector:
k8s-app: fluentd-logging
status:
loadBalancer: {}
最后,我的快速应用程序(部署)在这里:
apiVersion: apps/v1
kind: Deployment
metadata:
name: puppet
labels:
app: puppet
spec:
replicas: 5
selector:
matchLabels:
app: puppet
template:
metadata:
labels:
app: puppet
spec:
containers:
- name: puppet
image: myrepo/my-image
ports:
- containerPort: 8080
编辑:我直接在我的快速应用程序中对流畅的服务IP进行了编码,并且它的工作。如何在没有 Harcoding IP 的情况下让它工作?
关注问题的以下部分:
我想将日志从我的nodejs pod发送到Fluentd DeamonSet。
编辑:我直接在我的快速应用程序中对流畅的服务IP进行了编码,并且它的工作。如何在没有 Harcoding IP 的情况下让它工作?
看起来pods和fluentd
服务之间的通信是正确的(硬编码IP有效)。这里的问题是他们相互沟通的方式。
您可以通过服务的名称与fluentd
进行通信。例如(从吊舱内部):
curl Fluentd: 24224
您只能在同一个命名空间中通过其名称(如Fluentd
)与服务进行通信。如果服务在另一个命名空间中,您需要使用它的完整DNS名称。它的模板和示例如下:
您还可以使用<code>ExternalName</code>类型的服务将服务的完整DNS名称映射到以下较短版本:
假设(示例):
nginx命名空间
命名空间:
$kubectl创建命名空间nginx命名空间
$kubectl创建部署nginx--image=nginx--namespace=nginx-namespace
$kubectl公开部署nginx--port=80--type=ClusterIP--namespace=nginx namespace
您可以选择与上面的pod通信:
Pod
的IP地址
10.98.132.201
ng in x-service
服务外部名称
类型的示例:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: default # <- the same as the pod communicating with the service
spec:
type: ExternalName
externalName: nginx.nginx-namespace.svc.cluster.local
您可以通过以下方式将此信息传递给pod:
其他资源:
我正在学习Flask和Postman,目前,我正在尝试解决这个问题。下面是Python的代码行: 运行之后,当我去邮递员处运行以下命令时:获取:http://127.0.0.1:5000/get_chain控制台向我显示以下消息:错误:connect econnrefered127.0.0.1:5000
我使用以下模块中的反向代理https://github.com/nodejitsu/node-http-proxy 我只需要代理调用到新的端口
有一个关于阿帕奇的 php 文件: 和节点js在同一个目录中 浏览器抛出错误:GEThttp://192.168.100.31/socket.io/?EIO=4 如果替换let套接字=io.connect('http://localhost:3000')在let套接字=io.connect('http://192.168.100.31:3000');浏览器将给出另一个错误:访问XMLHttp请求在
我试图使用任何NodeJS或NPM命令,但我总是得到以下错误: 套接字:(10106)无法加载或初始化请求的服务提供程序。 我正在运行Windows 10,我尝试再次重新安装nodejs,但仍然没有改变。
C:\Users\ramachandran.s oracledb@1.2.0安装C:\Users\ramachandran.s\node\u modules\oracledb node gyp rebuild C:\Users\ramachandran.s\node\u modules\oracledb 我错过了什么,请帮忙
EasyReact 的重点就是让节点之间的数据流动起来,所以连接节点是很重要的。 如何连接两个节点 两个节点是通过变换来连接的,在源码目录 EasyReact/Classes/Core/NodeTransforms 中我们默认实现了了很多的变换,你也可以通过继承 EZRTransform 类来实现自己的变换,一旦我们创建好一个变换后,就可以通过如下方式进行连接了: EZRMutableNode<N