![](/img/trans.png)
[英]How to access mongodb replicaset hosted on a kubernetes cluster from outside?
[英]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 並收到一條著名的消息:“看起來您正在嘗試通過本機驅動程序端口上的 HTTP 訪問 MongoDB。”。 但是我無法與 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的方式。
對於純TCP連接,入口定義中的任何信息都沒有多大意義, host
名和http URL paths
不適用於純TCP連接。
一些入口控制器(例如nginx-ingress )可以支持普通的TCP負載平衡器,但不能通過入口定義來支持。 他們使用自定義配置映射。
使用與服務type: loadBalancer
,如果您的托管環境支持或type: nodePort
如果不是。 穩定的mongodb掌舵圖中有一個示例及其相關值 。
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
有兩種方法可以做到這一點。
您可以創建mongo url並直接將其指向部署
您可以使用其中提到的mongo url創建名為服務類型(ExternalName)的服務。 然后可以在部署中定義此服務。
kind: Service
apiVersion: v1
metadata:
name: <service-name>
namespace: <namespace>
spec:
type: ExternalName
externalName: xx.xx.xx.xx
ports:
- port: xxxx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.