gpt4 book ai didi

mongodb - 如何从集群外访问 Kubernetes 中的 MongoDB

转载 作者:行者123 更新时间:2023-12-02 11:51:57 53 4
gpt4 key购买 nike

我使用这个 Helm chart 在 Kubernetes 集群中部署了 mongodb:https://github.com/helm/charts/tree/master/stable/mongodb .一切正常。我可以从副本集容器内或从集群外部通过端口转发或 NodePort 服务连接到 mongo。但我无法通过入口连接。

部署入口后,我可以 curl mongodb 并收到这条著名的消息:“看起来您正试图在 native 驱动程序端口上通过 HTTP 访问 MongoDB。”。但是我无法与 mongo 客户端连接,连接卡住了,我可以在 mongodb 日志中看到我从未到达 mongo。

有人有任何关于通过入口对象访问 mongodb 的信息吗?也许这是一个协议(protocol)问题?

入口体现:

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

非常感谢你 !

最佳答案

入口 Controller 是为 HTTP 连接设计的,正如错误提示的那样,入口不是访问 mongodb 的方式。

入口定义中的任何信息对于普通 TCP 连接都没有多大意义,host名称和 http URL paths不适用于普通 TCP 连接。

一些入口 Controller (如 nginx-ingress )可以支持普通的 TCP 负载平衡器,但不能通过入口定义。他们使用自定义配置映射。

通过 type: loadBalancer 使用服务如果您的托管环境支持它或type: nodePort如果不。有一个example in the stable mongodb helm chart并且它是关联的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

关于mongodb - 如何从集群外访问 Kubernetes 中的 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57623894/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com