无法将日志发送到 Graylog kubernetes

Can't send log into Graylog kubernetes

如何在ingress上暴露节点端口?

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 weburl 是 https://logs.example.com

在 https cert-manager 上 运行 在 kubernertes ingress 上。

我无法在 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: {}

UDP 服务通常不会像 TCP HTTP(S) 服务那样通过 Ingress Controller 公开。我不确定是否有任何入口控制器甚至支持 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 服务。您定义的 nodePorts 将在每个节点的外部 IP 上可用。

A nodePort 对于 http 端口不是严格要求的,因为 nginx 入口控制器会在它自己的服务的其他地方为您处理。

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

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