Ошибка при доступе к Nextcloud в Kubernetes - PullRequest
0 голосов
/ 15 октября 2019

Моя цель:

  • создать модуль с помощью Nextcloud
  • создать сервис для доступа к этому модулю
  • с другого компьютера с помощью nginx и направить CNAME кservice

Я пытался развернуть модуль с помощью Nextcloud и службы для доступа к нему, но на самом деле я не могу получить к нему доступ. У меня есть ошибка:

сообщение ERR_SSL_PROTOCOL_ERROR.

Я только что следовал учебнику в начале, но я не хотел использовать nginx какэто было объяснено, потому что у меня это на другой машине.

Когда я смотрю на pods (nextcloud + db) и сервисы, они выглядят нормально, но я не отвечаю, когда пытаюсь получить доступ к nextcloud.

enter image description here (nc= nextcloud)

enter image description here

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nc
  name: nc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nc
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nc
    spec:
      containers:
      - env:
        - name: DEBUG
          value: "false"
        - name: NEXTCLOUD_URL
          value: http://test.fr
        - name: NEXTCLOUD_ADMIN_USER
          value: admin
        - name: NEXTCLOUD_ADMIN_PASSWORD
          valueFrom:
            secretKeyRef:
              name: nextcloud
              key: NEXTCLOUD_ADMIN_PASSWORD
        - name: NEXTCLOUD_UPLOAD_MAX_FILESIZE
          value: 4G
        - name: NEXTCLOUD_MAX_FILE_UPLOADS
          value: "20"
        - name: MYSQL_DATABASE
          value: nextcloud
        - name: MYSQL_HOST
          value: mariadb
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mariadb
              key: MYSQL_ROOT_PASSWORD
        - name: MYSQL_USER
          value: nextcloud
        name: nc
        image: nextcloud
        ports:
        - containerPort: 80
          protocol: TCP
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/www/html
          name: vnextcloud
          subPath: html
        - mountPath: /var/www/html/custom_apps
          name: vnextcloud
          subPath: apps
        - mountPath: /var/www/html/config
          name: vnextcloud
          subPath: config
        - mountPath: /var/www/html/data
          name: vimages
          subPath: imgnc
        - mountPath: /var/www/html/themes
          name: vnextcloud
          subPath: themes
      restartPolicy: Always
      volumes:
        - name: vnextcloud
          persistentVolumeClaim:
            claimName: nfs-pvcnextcloud
        - name: vimages
          persistentVolumeClaim:
            claimName: nfs-pvcimages

Для создания службы я использую эту командную строку:

kubectl expose deployment nc --type=NodePort --name=svc-nc --port 80

И для доступа к моейnextcloud Я попробовал адрес @IP_MASTER: 32500

Мои вопросы:

  • Как проверить, хорошо ли работает модуль? чтобы узнать, исходит ли проблема от службы или модуля
  • Что мне нужно сделать, чтобы получить доступ к моему следующему облаку? Я не делал туто-часть «Создание самозаверяющих сертификатов», потому что я не знаю, как управлять. Должно ли это быть на моем другом компьютере с Linux или в моем кластере Kubernetes

1 Ответ

1 голос
/ 15 октября 2019

1. Пожалуйста, рассмотрите возможность использования стабильной диаграммы управления nextcloud

2. Этот учебник немного устарел и его также можно найти здесь

В выпуске kubernetes 1.16 вы должны изменить во всех своих развертываниях apiVersion на apiVersion: apps/v1, пожалуйста, взгляните на Устаревания и удаления . Кроме того, вы должны получить ошибку ValidationError(Deployment.spec): missing required field "selector", поэтому, пожалуйста, добавьте селекторы в вашем развертывании под Deployment.spec, например:

selector:
  matchLabels:
    app: db

3. Наконец, создайте самозаверяющие сертификаты. В этом репо используется OMGWTFSSL - Самоподписанный генератор сертификатов SSL . Как только вы предоставите необходимую информацию, такую ​​как имя сервера, путь к вашему локальному hostpath и имена для ваших SSL-сертификатов, они будут автоматически созданы после одного запуска под указанным hostpath:

volumes:
  - name: certs
    hostPath:
      path: "/home/<someFolderLocation>/certs-pv"
  • эта информация должна быть повторно использована в разделе Обратный прокси-сервер Nginx для nginx.conf

4. В вашем nc-svc.yaml вы можете изменить тип сервиса на тип: NodePort

5. Как проверить, правильно ли работает ваша sercie:

kubectl get pods,svc,ep -o wide

Pods:
pod/nc-6d8694659d-5przx   1/1     Running     0          15m   10.244.0.6 
Svc: 
service/svc-nc       NodePort    10.102.90.88   <none>        80:32500/TCP
Endpoints: 
endpoints/svc-nc       10.244.0.6:80

Вы можете проверить свою службу внутри кластеразапустив отдельный модуль (например, ubuntu)

curl your_svc_name

, вы можете проверить, правильно ли работает обнаружение службы:

cat /etc/resolv.conf
nslokup svc_your_svc_name (your_svc_name.default.svc.cluster.local)

Из-за пределов кластера, используя NodePort:

curl NODE_IP:NODE_PORT ( if not please verify your firewall rules)
Once you provided hostname for your nextcloud service you should use
curl -vH 'Host:specified_hostname' http://external_ip/ (using http or https according to your configuration)

Кроме того, вы можете выполнить exec непосредственно в свой db pod

kuebctl exec -it db_pod -- /bin/bash  and run 

mysqladmin status -uroot -p$MARIADB_ROOT_PASSWORD
mysqlshow  -uroot -p$MYSQL_ROOT_PASSWORD --status nextcloud

6. Что мне нужно сделать, чтобы получить доступ к моему следующему облаку? Я не выполнял туто-часть «Создание самозаверяющих сертификатов», потому что не знаю, как управлять.

7. Как описано в пункте 3.

8. Эта часть мне не понятна: from another machine with nginx route a CNAME to the service

См.: Служба ExternalName - это особый случай Службы, в котором нет селекторови использует вместо них имена DNS.

Дополнительные ресурсы:

Надеюсь, эта помощь.

...