簡體   English   中英

如何從集群外訪問 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 並收到一條著名的消息:“看起來您正在嘗試通過本機驅動程序端口上的 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

有兩種方法可以做到這一點。

  1. 您可以創建mongo url並直接將其指向部署

  2. 您可以使用其中提到的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM