【发布时间】: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