在Minikube上使用Kompose时,MongoDB无法访问

问题描述 投票:0回答:1

我有一个简单的应用程序,使用MongoDB docker镜像调用url:mongodb:// mongo:27017 /。它使用docker-compose工作正常:

泊坞窗,compose.yml

version: "3.3"
services:
  mongo:
    image: mongo
    restart: always
    container_name: mongo
    volumes:
      - /data/mongodb:/data/db
    ports:
     - "30001:27017"
  myapp:
    image: myapp:0.1.0
    restart: always
    links:
     - mongo # link this service to the database service
    depends_on:
     - mongo
networks:
  default:

然后,我开始使用Minikube(在VMWare之上)迁移到Kubernetes,生成以下清单YAML:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    name: mongo-claim0
  name: mongo-claim0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    name: mongo
  name: mongo
spec:
  ports:
  - name: "30001"
    port: 30001
    targetPort: 27017
  selector:
    name: mongo
status:
  loadBalancer: {}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    name: mongo
  name: mongo
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      creationTimestamp: null
      labels:
        name: mongo
    spec:
      containers:
      - image: mongo
        name: mongo
        ports:
        - containerPort: 27017
        resources: {}
        volumeMounts:
        - mountPath: /data/db
          name: mongo-claim0
      restartPolicy: Always
      volumes:
      - name: mongo-claim0
        persistentVolumeClaim:
          claimName: mongo-claim0
status: {}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    name: myapp
  name: myapp
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        name: myapp
    spec:
      containers:
        image: myapp:0.1.0
        name: myapp
        resources: {}
      restartPolicy: Always
status: {}

我的POD /服务正常运行(kubectl get pods,svc):

NAME                                 READY   STATUS             RESTARTS   AGE
pod/mongo-5d89cc6f7f-c2p4b           1/1     Running            0          43m
pod/myapp-6c9c4f89fb-gg68t           1/1     Running            0          43m

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
service/kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP           110m
service/mongo           NodePort    10.101.179.59    <none>        27017:30001/TCP   43m

我也无法通过Robo3T(MongoDB客户端)思想端口30001连接,因为我可以使用docker-compose(甚至使用vboxnet0 IP 192.168.99.1)。

我不知道会出现什么问题。

更新1:我发现Kompose创建了一个ClusterIP并将集群内部的端口转移到了30001,但这需要是从集群外部连接的端口。我将服务更改为NodePort,如下所示:

apiVersion: v1
kind: Service
metadata:
  labels:
    name: mongo
  name: mongo
spec:
  type: NodePort 
  ports:
    - port: 27017
      nodePort: 30001
      targetPort: 27017
  selector:
    name: mongo
status:
  loadBalancer: {}

现在myapp pod可以连接到mongo,但我仍然无法通过VMWare IP(192.168.99.1)和端口30001使用Robo3t连接到群集。

mongodb kubernetes minikube kompose
1个回答
0
投票

为了使它工作,你必须调用minikube service <servicename>,在我的情况下,servicename是mongo。

© www.soinside.com 2019 - 2024. All rights reserved.