Конфигурация, позволяющая веб-серверу использовать сертификаты, установленные при развертывании Kubernetes

Я хочу, чтобы мое приложение, работающее в кластере Kubernetes, использовало сертификат, смонтированный в томе, определенном в моем файле Deployment.yaml.

Я не использую вход, вместо этого у меня настроен сервис как LoadBalancer. Я не могу найти, как заставить эту службу обрабатывать завершение tls. Поэтому я пошел другим путем, где мне нужно смонтировать и использовать сертификат внутри модуля.

Я установил секрет, содержащий информацию о сертификате, в файле Deployment.yaml приложения. Модуль запущен и работает и успешно нашел этот секрет. Единственная проблема заключается в том, что веб-сервер не настроен на использование сертификата, поэтому мой сайт недоступен. Как настроить веб-сервер на использование сертификата? Можно ли это установить с помощью команды в файле докеров?

Веб-сервер работает: предварительный просмотр запуска npm

Проверяем файл package.json, это: "preview": "предварительный просмотр"

Могу ли я настроить Vite для использования сертификатов, хранящихся в контейнере Kubernetes? Можно ли установить это в моем файле докеров?

раздел развертывания, в котором установлен сертификат

          volumeMounts:
            - name: cert-volume
              mountPath: "/etc/ssl/certs"
              readOnly: true
      volumes:
        - name: cert-volume
          secret:
            secretName: my-secret

Я проверил онлайн и не вижу особого способа заставить мой веб-сервер npm использовать этот сертификат для завершения TLS. Я подозреваю, что я могу добавить что-то в package.json или непосредственно в файл docker, чтобы указать на этот каталог в моем контейнере kubernetes.

Есть ли у кого-нибудь подобная установка или опыт работы в этом направлении?


50
2

Ответы:

Решено

Для ViteJS вам необходимо настроить параметр server.https, как указано в https://vitejs.dev/config/server-options.html#server-https

Как минимум, вам необходимо передать ключ и сертификат этому параметру, как показано в https://nodejs.org/api/https.html#httpscreateserveroptions-requestlistener.

Пример:

import { defineConfig } from 'vite';
import fs from 'fs';

export default defineConfig({
  server: {
    https: {
      key: fs.readFileSync('/path/to/key.pem'),
      cert: fs.readFileSync('/path/to/cert.pem'),
    },
  },
});

Поскольку вы используете Vite в качестве веб-сервера, вам необходимо будет выполнить некоторые настройки, специфичные для Vite. Сервер Vite можно настроить на использование TLS/SSL, изменив ваш vite.config.js, однако вам необходимо указать путь к вашему сертификату. Обратитесь к этой официальной документации для настройки Vite, включая параметры сервера.

А поскольку веб-сервер запущен: npm runПредварительный просмотр, проще всего использовать пакет vite-plugin-mkcert. Ниже приведена команда для этого:

  • npm и vite-plugin-mkcert -D

Как только это будет сделано, ваш vite.config.js будет выглядеть так:

import { defineConfig } from 'vite'
import mkcert from 'vite-plugin-mkcert'

export default defineConfig({
  server: { https: true }, // Not needed for Vite 5+
  plugins: [ mkcert() ]
})

После этого он установит локальный сертификат в вашу систему и в количество установленных браузеров.

Вы также можете запустить свой сервер Vite с помощью следующей команды:

$ npm run dev -- --host

При этом флаг --host передается в командную строку vite. Вы увидите такой вывод:

vite v2.7.9 dev server running at:

  > Local:    http://localhost:3000/
  > Network:  http://192.168.4.68:3000/

  ready in 237ms.