LINUX.ORG.RU

nextcloud и vaultwarden в кубере

 ,


0

1

Привет, ЛОР! Чё как? Какие дела на раёне? Надеюсь всё ровно! Слух, вот в чём дело. ЕОН (есть одна нода)и на ней должны работать два пода с разными приложениями - nextcloud и vaultwarden. Дело в том, что не получается настроить ингресс контроллер.

Смотри, вот c таким конфигом не работает

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vaultwarden
  namespace: nc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vaultwarden
  template:
    metadata:
      name: vaultwarden
      labels:
        app: vaultwarden
    spec:
      containers:
        - image: vaultwarden/server:latest
          name: vaultwarden
---
apiVersion: v1
kind: Service
metadata:
  name: vaultwarden-nodeport
  namespace: nc
spec:
  type: NodePort
  sessionAffinity: ClientIP
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: vaultwarden
---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mysite
  namespace: nc
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/connection-proxy-header: "keep-alive"
    ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30s"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "20s"
    nginx.ingress.kubernetes.io/proxy-body-size: 512m
    cert-manager.io/issuer: "letsencrypt-production"
spec:
  tls:
    - hosts:
      - mysite.ru
      secretName: mysite.tls
  rules:
  - host: mysite.ru
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nc-nodeport
            port:
              number: 80
      - path: /vaultwarden
        pathType: Prefix
        backend:
          service:
            name: vaultwarden-nodeport
            port:
              number: 80

, и обращение к mysite.ru/vaultwarden выдаёт вот такую страницу. Это вроде как не 404 от нжинкса, поэтому смею предположить, что до пода таки доходит запрос.

Ежели конфиг ингресса немного модифицировать, в корень поставив службу vaultwarden-nodeport, то вольфварден начинает прекрасно работать, но нет доступа до некстклауда, что логично.

      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: vaultwarden-nodeport
            port:
              number: 80

Собственно вопрос - почему обращение mysite.ru/vaultwarden не работает и как исправить?

★★★

Последнее исправление: SpaceRanger (всего исправлений: 3)
Ответ на: комментарий от MagicMirror

Тем не менее, ты натолкнулд меня на мысль. Добавил

nginx.ingress.kubernetes.io/rewrite-target: /

и доступ mysite.ru/vaultwarden появился. Однако теперь просто крутится значок загрузки вардена. МОж ещё чего надо сделоть?)

SpaceRanger ★★★
() автор топика

Проблема решена. Как и подозревал @MagicMirror, причина была в относительных ссылках. Типа, запрос был mysite.ru/vaultwarden/app, а ответ mysite.ru/app. Это исправляется параметром DOMAIN в VW, установив который в mysite.ru/vw - я делаю это базой. Ну и rewrite-target надо убрать.

То есть нужно создать конфигмап и указать его поду

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: vaultwarden-cm
  namespace: nc
data:
  DOMAIN: 'https://mysite.ru/vwrd'
  DATA_FOLDER: '/data'
  WEB_VAULT_ENABLED: 'true'
  SIGNUPS_ALLOWED: 'false'
  INVITATIONS_ALLOWED: 'false'
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vaultwarden
  namespace: nc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vaultwarden
  template:
    metadata:
      name: vaultwarden
      labels:
        app: vaultwarden
    spec:
      volumes:
        - name: vwstorage
          hostPath:
            path: /home/observer/BKP/vaultwarden
      containers:
        - image: vaultwarden/server:latest
          name: vaultwarden
          volumeMounts:
            - name: vwstorage
              mountPath: /data
          envFrom:
            - configMapRef:
                name: vaultwarden-cm

Настройки ингреса вот такие

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mysite
  namespace: nc
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "Request-Id: $req_id";
    nginx.ingress.kubernetes.io/connection-proxy-header: "keep-alive"
      #    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30s"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "20s"
    nginx.ingress.kubernetes.io/proxy-body-size: 512m
    cert-manager.io/issuer: "letsencrypt-production"
spec:
  tls:
    - hosts:
      - mysite.ru
      secretName: mysite.tls
  rules:
  - host: mysite.ru
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nc-nodeport
            port:
              number: 80
      - path: /vwrd/
        pathType: Prefix
        backend:
          service:
            name: vw-nodeport
            port:
              number: 80
SpaceRanger ★★★
() автор топика