【问题标题】:How can I expose mongodb in a statefulset outside kubernetes如何在 kubernetes 之外的 statefulset 中公开 mongodb
【发布时间】:2021-09-26 20:39:48
【问题描述】:

我的 webprotege StatefulSet 有如下配置。

apiVersion: apps/v1
kind: StatefulSet
metadata:
   name: webprotege-test
   labels:
      app: webprotege-test
spec:
   serviceName: "webprotege-service-test"
   volumeClaimTemplates:
   - metadata:
       name: data
     spec:
       accessModes: [ "ReadWriteOnce" ]
       resources:
         requests:
           storage: 20Gi
   replicas: 1
   selector:
      matchLabels:
         app: webprotege-test
   template:
      metadata:
         labels:
            app: webprotege-test
      spec:
         containers:
         #
         # webprotege app
         - name: webprotege-test
           #image: alexmilowski/allegrograph-kubernetes:latest
           image: testwebprotege:4.0.2
           # Wait for database. Checks that the db is listening on port 27017.
           command: ["/bin/sh"]
           args: ["-c", "for i in {1..20}; do if nc -z localhost 27017; then catalina.sh run; fi; echo 'waiting for database...'; sleep 2; done; exit 1"]
           volumeMounts:
           - name: data
             mountPath: /srv/webprotege
           ports:
           - containerPort: 8080
             name: webprotege-http
           env:
           - name: webprotege.mongodb.host
             value: localhost
         #
         # mongodb
         - name: wpmongo-test
           image: mongo:4.1-bionic
           volumeMounts:
           - name: data
             mountPath: /data/db

我想使用 mongodb 客户端访问 kubernetes 外部的 mongo db 容器。如何将 mongodb 暴露给 Kubernetes 集群外的客户端。我尝试添加一个 containerPort,但这似乎不起作用。

【问题讨论】:

  • 您可以使用 nodeport 类型的服务公开您的 mongoDb 部署。这将在您可以访问容器的所有节点上打开一个高端口号。因为默认情况下这只会使您的 pod 可以通过 ip 访问,另一种方法是在集群上部署一个入口控制器,使用 nodeport 服务公开入口控制器并设置一个指向入口控制器的负载均衡器,然后创建入口资源暴露你的 mongodb 部署
  • 您是否在 GKE 上运行您的StatefulSet,因为添加到您的问题中的标签可能会暗示?如果是这样,请仔细查看Running MongoDB on Kubernetes with StatefulSets。它应该可以帮助您更好地理解它,包括如何将其暴露在外部。

标签: mongodb kubernetes google-kubernetes-engine kubernetes-pod


【解决方案1】:

有多种公开服务的方式。使用哪一个取决于您的用例。

根据the documentation,这是在集群外公开 Mongo DB pod 的两种可能方式:

  • NodePort - 使用 NAT 在集群中每个选定节点的同一端口上公开服务。使用 : 使服务可以从集群外部访问。 ClusterIP 的超集。
  • Lo​​adBalancer - 在当前云中创建一个外部负载平衡器(如果支持),并为服务分配一个固定的外部 IP。 NodePort 的超集。

请注意,您需要在支持LoadBalancers 的环境中运行集群才能使用它们。这通常意味着在受支持的云提供商(AWS、Azure、Google Cloud、Digital Ocean 等)或专门配置为支持负载均衡器的本地集群上运行。

【讨论】:

    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2019-05-19
    • 2021-10-18
    • 1970-01-01
    • 2023-03-14
    • 2022-01-26
    相关资源
    最近更新 更多