无法将日志发送到Graylog kubernetes

时间:2019-08-19 10:26:48

标签: kubernetes kubernetes-ingress nginx-ingress graylog3

如何在入口处公开节点端口?

NAME                         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                                       AGE
logs-graylog                 NodePort    10.20.8.187   <none>        80:31300/TCP,12201:31301/UDP,1514:31302/TCP   5d3h
logs-graylog-elasticsearch   ClusterIP   None          <none>        9200/TCP,9300/TCP                             5d3h
logs-graylog-master          ClusterIP   None          <none>        9000/TCP                                      5d3h
logs-graylog-slave           ClusterIP   None          <none>        9000/TCP                                      5d3h
logs-mongodb-replicaset      ClusterIP   None          <none>        27017/TCP                                     5d3h

这是我的服务在有一些节点端口的情况下的样子。  Graylog Web界面在端口80上公开。

但是我无法在URL上发送日志。我的Graylog网站网址是https://logs.example.com

它在https上运行cert-manager在kubernertes入口上。

我无法在URl上发送Glef UDP日志。我是否缺少从入口或UDP过滤器打开端口的东西?

这是我的入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: logs-graylog-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: graylog
    nginx.ingress.kubernetes.io/ssl-redirect: "true"

spec:
  tls:
  - hosts:
    - logs.example.io
    secretName: graylog
  rules:
  - host: logs.example.io
    http:
      paths:
      - backend:
          serviceName: logs-graylog
          servicePort: 80
      - backend:
          serviceName: logs-graylog
          servicePort: 12201
      - backend:
          serviceName: logs-graylog
          servicePort: 31301

服务:

apiVersion: v1
kind: Service
metadata:

  labels:
    app: graylog
    chart: graylog-0.1.0
    component: graylog-service
    heritage: Tiller
    name: graylog
    release: logs
  name: logs-graylog

spec:
  clusterIP: 10.20.8.187
  externalTrafficPolicy: Cluster
  ports:
  - name: http
    nodePort: 31300
    port: 80
    protocol: TCP
    targetPort: 9000
  - name: udp-input
    nodePort: 31301
    port: 12201
    protocol: UDP
    targetPort: 12201
  - name: tcp-input
    nodePort: 31302
    port: 1514
    protocol: TCP
    targetPort: 1514
  selector:
    graylog: "true"
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

1 个答案:

答案 0 :(得分:1)

UDP服务通常不像TCP HTTP(S)服务那样通过入口控制器公开。我不确定任何入口控制器甚至都支持UDP,当然不能在单个入口定义中结合使用3种协议。

如果集群托管在云服务上,则大多数支持Service with type LoadBalancer来将外部连接映射到集群中。

apiVersion: v1
kind: Service
metadata:
  name: logs-direct-graylog
spec:
  selector:
    graylog: "true"
  ports:
  - name: udp-input
    port: 12201
    protocol: UDP
    targetPort: 12201
  - name: tcp-input
    port: 1514
    protocol: TCP
    targetPort: 1514
  type: LoadBalancer

如果您的环境中没有LoadBalancer类型的服务,则可以使用NodePort服务。您定义的nodePort将在每个节点的外部IP上可用。

http端口并非严格要求nodePort,因为nginx Ingress Controller会在自己服务的其他位置为您服务。

apiVersion: v1
kind: Service
metadata:
  name: logs-graylog
spec:
  selector:
    graylog: "true"
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 9000

可以从入口定义中删除80以外的端口。