0

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

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 证书管理器上运行在 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: {}
4

1 回答 1

1

UDP 服务通常不会像 TCP HTTP(S) 服务那样通过入口控制器公开。我不确定是否有任何入口控制器支持 UDP,当然不是在一个入口定义中结合了 3 个协议。

如果集群托管在云服务上,大多数都支持将外部连接映射到集群的类型的服务。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 上可用。

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

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

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

于 2019-08-20T04:12:50.033 回答