如何在入口处公开节点端口?
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: {}
答案 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以外的端口。