如何从集群外部访问 Kubernetes 中的 MongoDB
How access MongoDB in Kubernetes from outside the cluster
我使用此 helm chart 在 Kubernetes 集群中部署了 mongodb:https://github.com/helm/charts/tree/master/stable/mongodb。一切正常。我可以使用端口转发或 NodePort 服务从复制集容器内或集群外部连接到 mongo。但是我无法通过入口连接。
部署入口后,我可以 curl mongodb 并收到这条著名的消息:"It looks like you are trying to access MongoDB over HTTP on the native driver port."。但是我无法连接 mongo 客户端,连接卡住了,我可以在 mongodb 日志中看到我从未到达 mongo.
有人知道关于通过入口对象访问 mongodb 的任何信息吗?可能是协议问题?
入口清单:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ template "mongodb.fullname" . }}
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: {{ .Values.ingress.hostName }}
http:
paths:
- path: /
backend:
serviceName: "{{ template "mongodb.fullname" $ }}"
servicePort: mongodb
tls:
- hosts:
- {{ .Values.ingress.hostName }}
secretName: secret
非常感谢!
入口控制器是为 HTTP 连接设计的,正如错误提示的那样,入口不是访问的方式 mongodb。
None 入口定义中的信息对于普通 TCP 连接很有意义,host
名称和 http URL paths
不适用于普通TCP 连接。
一些入口控制器(如 nginx-ingress)可以支持普通 TCP 负载平衡器,但不能通过入口定义。他们使用自定义配置映射。
如果您的托管环境支持,请将服务与 type: loadBalancer
一起使用,如果不支持,请使用 type: nodePort
。有一个example in the stable mongodb helm chart and it's associated values。
apiVersion: v1
kind: Service
metadata:
name: {{ template "mongodb.fullname" . }}
labels:
app: {{ template "mongodb.name" . }}
spec:
type: loadBalancer
ports:
- name: mongodb
port: 27017
targetPort: mongodb
- name: metrics
port: 9216
targetPort: metrics
我使用此 helm chart 在 Kubernetes 集群中部署了 mongodb:https://github.com/helm/charts/tree/master/stable/mongodb。一切正常。我可以使用端口转发或 NodePort 服务从复制集容器内或集群外部连接到 mongo。但是我无法通过入口连接。
部署入口后,我可以 curl mongodb 并收到这条著名的消息:"It looks like you are trying to access MongoDB over HTTP on the native driver port."。但是我无法连接 mongo 客户端,连接卡住了,我可以在 mongodb 日志中看到我从未到达 mongo.
有人知道关于通过入口对象访问 mongodb 的任何信息吗?可能是协议问题?
入口清单:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ template "mongodb.fullname" . }}
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: {{ .Values.ingress.hostName }}
http:
paths:
- path: /
backend:
serviceName: "{{ template "mongodb.fullname" $ }}"
servicePort: mongodb
tls:
- hosts:
- {{ .Values.ingress.hostName }}
secretName: secret
非常感谢!
入口控制器是为 HTTP 连接设计的,正如错误提示的那样,入口不是访问的方式 mongodb。
None 入口定义中的信息对于普通 TCP 连接很有意义,host
名称和 http URL paths
不适用于普通TCP 连接。
一些入口控制器(如 nginx-ingress)可以支持普通 TCP 负载平衡器,但不能通过入口定义。他们使用自定义配置映射。
如果您的托管环境支持,请将服务与 type: loadBalancer
一起使用,如果不支持,请使用 type: nodePort
。有一个example in the stable mongodb helm chart and it's associated values。
apiVersion: v1
kind: Service
metadata:
name: {{ template "mongodb.fullname" . }}
labels:
app: {{ template "mongodb.name" . }}
spec:
type: loadBalancer
ports:
- name: mongodb
port: 27017
targetPort: mongodb
- name: metrics
port: 9216
targetPort: metrics