MongoDB перестала быть доступной, когда начала использовать Kompose на Minikube - PullRequest
0 голосов
/ 09 марта 2019

У меня есть простое приложение, которое использует изображение док-станции MongoDB и вызывает 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:

Затем я начал мигрировать в Kubernetes, используя Minikube (поверх VMWare), генерируя следующий манифест 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), так как я мог использовать 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 может подключаться к mongo, но я все еще не могу подключиться с помощью Robo3t к кластеру через VMWare IP (192.168.99.1) и порт 30001.

1 Ответ

0 голосов
/ 12 апреля 2019

Чтобы это сработало, вы должны позвонить minikube service <servicename>, в моем случае имя сервера - mongo.

...