One place for hosting & domains

      помощи

      Мониторинг объявлений и мероприятий по BGP при помощи BGPalerter в Ubuntu 18.04


      Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations.

      Введение

      BGP (таблица пограничного межсетевого протокола) — один из ключевых протоколов, отвечающих за маршрутизацию пакетов через Интернет, поэтому когда он работает неправильно, могут возникать серьезные перебои с Интернетом. Например, в 2019 году небольшой интернет-провайдер создал неправильную конфигурацию BGP, которая, к сожалению, распространилась на более высокие уровни и вывела большие сегменты Cloudflare и AWS оффлайн более чем на час. Кроме того, годом ранее был осуществлен захват BGP, чтобы перехватить трафик к известному провайдеру криптовалютных кошельков и похитить средства ничего не подозревающих клиентов.

      BGPalerter — сетевое средство мониторинга с открытым исходным кодом, которое может предоставлять уведомления в реальном времени об активности BGP, включая видимость маршрутов и новые сообщения о маршрутах, а также потенциально опасную деятельность — например, перехваты маршрутов или утечки маршрутов. BGPalerter автоматически принимает общедоступную информацию о маршрутизации, т.е. ему не нужен какой-либо уровень привилегированного доступа или интеграции с сетью/сетями, которые вы хотите отслеживать.

      Примечание: BGPalerter автоматически принимает общедоступную информацию о маршрутизации, т.е. ему не нужен какой-либо уровень привилегированного доступа или интеграции с сетью/сетями, которые вы хотите отслеживать. Весь мониторинг полностью соответствует Закону о компьютерных злоупотреблениях, Закону о мошенничестве с использованием компьютеров и иным аналогичным законам. Тем не менее, рекомендуется ответственно относиться к передаче любой соответствующей информации пострадавшему сетевому оператору.

      В этом обучающем руководстве вы установите и настроите BGPalerter для мониторинга ваших важных сетей на предмет потенциально подозрительной деятельности.

      Предварительные требования

      Для данного обучающего руководства вам потребуется следующее:

      • Сервер Ubuntu 18.04, настроенный согласно руководству по первоначальной настройке сервера с Ubuntu 18.04, включая пользователя non-root user с привилегиями sudo.

      • Одна или несколько сетей и устройств, которые вы хотите отслеживать, например:

        • Ваш сервер
        • Сеть вашей компании
        • Ваш локальный интернет-провайдер

      Для каждого устройства или сети вам потребуется идентифицировать либо отдельный IP-адрес, диапазон IP-адресов, либо номер автономной системы в этом диапазоне. Эти действия рассматриваются в шаге 1.

      Подготовив все вышеперечисленное, войдите на сервер в качестве non-root user, чтобы начать подготовку.

      Шаг 1 — Определение сетей для мониторинга

      На этом шаге вы узнаете соответствующие данные о сетях, которые вы хотите отслеживать.

      BGPalerter может выполнять мониторинг на основе отдельных IP-адресов или сетевых префиксов. Он также может отслеживать целые сети на основе номера автономной системы — уникального в глобальном масштабе идентификатора сети, принадлежащего конкретному административному объекту.

      Для нахождения этой информации вы можете использовать службу пооиска IP-to-ASN WHOIS, которую предоставляет служба разведки угроз Team Cymru. Это пользовательский сервер WHOIS, предназначенный для просмотра IP-адресов и информации о сетевой маршрутизации.

      Если у вас не установлен whois, вы можете сделать это с помощью следующих команд:

      • sudo apt update
      • sudo apt install whois

      Как только вы убедились, что whois установлен, начните с поиска IP-адресов вашего собственного сервера с помощью аргумента -h для указания настраиваемого сервера:

      • whois -h whois.cymru.com your-ip-address

      Это выведет примерно следующий результат, где указано имя и номер AS, в котором находится ваш сервер. Как правило, это будет AS вашего хостинг-провайдера — например, DigitalOcean.

      Output

      AS | IP | AS Name 14061 | your-ip-address | DIGITALOCEAN-ASN, US

      Далее вы можете выполнить поиск для определения префикса/диапазона сети, в которой находится ваш сервер. Это можно сделать, добавив к запросу аргумент -p:

      • whois -h whois.cymru.com " -p your-ip-address"

      Вывод будет очень похож на предыдущую команду, но теперь он будет показывать префикс IP-адреса, к которому относится IP-адрес вашего сервера:

      Output

      AS | IP | BGP Prefix | AS Name 14061 | your-ip-address | 157.230.80.0/20 | DIGITALOCEAN-ASN, US

      В итоге, вы сможете найти дополнительные сведения об AS, в котором находится ваш сервер, включая географический регион и дату распределения.

      Подставьте номер AS, который вы определили с помощью предыдущих команд. Вы используете аргумент -v для активации вывода подробной информации с отображением всех соответствующих данных:

      • whois -h whois.cymru.com " -v as14061"

      При этом будет показана дополнительная информация об AS:

      Output

      AS | CC | Registry | Allocated | AS Name 14061 | US | arin | 2012-09-25 | DIGITALOCEAN-ASN, US

      Вы определили ключевую информацию о сетях, которые вы хотите отслеживать. Запишите эти данные, т.к. они потребуются вам позднее. Далее вы начнете настройку BGPalerter.

      Шаг 2 — Создание непривилегированного пользователя для BGPalerter

      На этом шаге вы создадите новую учетную запись непривилегированного пользователя для BGPalerter, т.к. для работы этой программы не требуются права sudo/root.

      Сначала создайте нового пользователя с отключенным паролем:

      • sudo adduser --disabled-password bgpalerter

      Вам не нужно настраивать пароль или ключи SSH, поскольку вы будете использовать этого пользователя только в качестве служебной учетной записи для работы/обслуживания BGPalerter.

      Войдите под именем нового пользователя с помощью команды su:

      Вы вошли как новый пользователь:

      bgpalerter@droplet:/home/user$
      

      Используйте команду cd для перехода в домашнюю директорию нового пользователя:

      bgpalerter@droplet:/home/user$ cd
      bgpalerter@droplet:~$
      

      Вы создали нового непривилегированного пользователя для BGPalerter. Далее вы установите и настроите BGPalerter в своей системе.

      Шаг 3 — Установка и настройка BGPalerter

      На этом шаге вы установите и настроите BGPalerter. Убедитесь, что вы все еще в системе под именем своего нового непривилегированного пользователя.

      Сначала вам нужно определить последний выпуск BGPalerter, чтобы убедиться, что вы загружаете актуальную версию. Перейдите на страницу Выпуски BGPalerter и скопируйте ссылки на загрузку самой последней версии Linux x64.

      Теперь вы можете загрузить копию BGPalerter с помощью wget, если подставите правильную ссылку на загрузку:

      • wget https://github.com/nttgin/BGPalerter/releases/download/v1.24.0/bgpalerter-linux-x64

      Когда файл загрузится, отметьте его как исполняемый:

      • chmod +x bgpalerter-linux-x64

      Затем убедитесь, что BGPalerter загружен и успешно установлен, сверив номер версии:

      • ./bgpalerter-linux-x64 --version

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

      Output

      1.24.0

      Чтобы корректно запустить BGPalerter, необходимо сначала определить сети, которые вы хотите отслеживать в файле конфигурации. Создайте и откройте файл prefixes.yml в предпочитаемом текстовом редакторе:

      В этом файле конфигурации вы укажете каждый пользовательский IP-адрес, диапазоны IP-адресов и номера AS, которые вы хотите отслеживать.

      Добавьте следующий пример и измените значения конфигурации, как необходимо, используя сетевую информацию, которую вы определили на шаге 1:

      ~/prefixes.yml

      your-ip-address/32:
        description: My Server
        asn:
          - 14061
        ignoreMorespecifics: false
      
      157.230.80.0/20:
        description: IP range for my Server
        asn:
          - 14061
        ignoreMorespecifics: false
      
      options:
        monitorASns:
          '14061':
            group: default
      

      Вы можете отслеживать столько диапазонов IP-адресов или номеров AS, сколько захотите. Чтобы отслеживать отдельные IP-адреса, указывайте /32 для IPv4 и /128 для IPvv6.

      Значение ignoreMorespecifics используется, чтобы контролировать, должен ли BGPalerter игнорировать деятельность на маршрутах, более специфичных (меньших) по сравнению с тем, который вы отслеживаете. Например, если вы отслеживаете /20, и изменение маршрутизации обнаружено в нем для /24, то это считается более специфичным маршрутом. В большинстве случаев их не нужно игнорировать, но если вы отслеживаете большую сеть с несколькими префиксами делегированных пользователей, то это может снизить фоновый шум.

      Теперь вы можете запустить BGPalerter в первый раз, чтобы начать отслеживать свои сети:

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

      Output

      Impossible to load config.yml. A default configuration file has been generated. BGPalerter, version: 1.24.0 environment: production Loaded config: /home/bgpalerter/config.yml Monitoring 157.230.80.0/20 Monitoring your-ip-address/32 Monitoring AS 14061

      BGPalerter будет продолжать работать, пока вы не остановите его нажатием Ctrl+C.

      На следующем шаге вы перейдете к интерпретации некоторых предупреждений, которые может создавать BGPalerter.

      Шаг 4 — Интерпретация интерфейсов BGPalerter

      На этом шаге вы рассмотрите несколько типовых предупреждений BGPalerter. BGPalerter будет выдавать предупреждения в основном потоке выдачи, а также, опционально, в любые дополнительные конечные точки отчетности, которые можно настроить в файле config.yml, как указано в документации BGPalerter.

      По умолчанию BGPalerter отслеживает и предупреждает о следующем:

      • Route hijacks: выдается в случае, когда AS объявляет запрещенный префикс, вызывая ошибочную маршрутизацию трафика. Это может быть либо преднамеренным нападением, либо случайной ошибки в конфигурации.

      • Потеря видимости маршрута: маршрут считается видимым, когда большинство маршрутизаторов BGP в Интернете может надежно создавать маршруты к нему. Потеря видимости указывает на потенциальную недоступность вашей сети — например, если ваш BGP peering прекращает работать.

      • Новые объявления субпрефиксов заключаются в том, что AS начинает объявлять префикс, который меньше ожидаемого. Это может свидетельствовать об изменении целевой конфигурации, случайной ошибочной конфигурации или, в некоторых случаях — о нападении.

      • Деятельность в рамках вашего AS: обычно используется для новых сообщений о маршрутах. Трафик считается «новым», если BGPalerter еще не знает о нем.

      Ниже представлены некоторые примеры предупреждений, а также краткое описание их значения:

      Alert #1

      The prefix 203.0.113.0/24 is announced by AS64496 instead of AS65540
      

      Это предупреждение свидетельствует о захвате маршрута, т.к. AS64496 объявил 203.013.0/24, хотя ожидается, что этот маршрут будет объявлен AS65540. Это надежный показатель ошибочной конфигурации, приводящей к утечке маршрута, либо преднамеренного захвата злоумышленником.

      Alert #2

      The prefix 203.0.113.0/24 has been withdrawn. It is no longer visible from 6 peers
      

      Это предупреждение говорит о том, что сеть 203.013.0/24 стала невидимой. Это может быть связано с проблемой исходящей маршрутизации, либо произошел сбой питания маршрутизатора.

      Alert #3

      A new prefix 203.0.113.0/25 is announced by AS64496. It should be instead 203.0.113.0/24 announced by AS64496
      

      Это предупреждение показывает, что был объявлен более специфичный префикс там, где это не ожидалось — например, /25, когда ожидалось только /24. Скорее всего, это ошибочная конфигурация, но в некоторых случаях это может свидетельствовать о захвате маршрута.

      Alert #4

      AS64496 is announcing 192.0.2.0/24 but this prefix is not in the configured list of announced prefixes
      

      Помимо этого, данное предупреждение показывает, что AS64496 объявил префикс, который BGPalerter еще не знает. Это может быть связано с тем, что вы обоснованно объявляете новый префикс, или может говорить об ошибочной конфигурации, из-за которой вы случайно объявили чужой префикс.

      На этом шаге вы рассмотрели несколько примеров предупреждений BGPalerter. Далее вы настроите BGPalerter для автоматического запуска во время начальной загрузки.

      Шаг 5 — Запуск BGPalerter во время начальной загрузки

      На этом последнем шаге вы настроите BGPalerter для запуска во время начальной загрузки.

      Убедитесь, что вы все еще в системе под именем нового непривилегированного пользователя, затем откройте crontab:

      Добавьте следующую строку внизу файла crontab:

      crontab

      @reboot sleep 10; screen -dmS bgpalerter "./bgpalerter-linux-x64"
      

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

      Сохраните изменения и закройте редактор crontab. Теперь можно перезагрузить систему, чтобы убедиться, что BGPalerter корректно запускается во время начальной загрузки.

      Сначала нужно выйти из вашего пользователя BGPalerter:

      Затем перезагрузите систему, как обычно:

      После перезагрузки системы снова войдите на сервер и при помощи su еще раз получите доступ к вашему пользователю BGPalerter:

      Затем можно в любой момент присоединиться к сессии для просмотра вывода BGPalerter:

      На этом последнем шаге вы настроили BGPalerter для запуска во время начальной загрузки.

      Заключение

      В этой статье вы настроили BGPalerter и использовали его для отслеживания сетей с целью внесения изменений в маршрутизацию BGP.

      Если хотите сделать BGPalerter более удобным для пользователя, то можно настроить его для отправки предупреждений через канал Slack посредством веб-хука:

      Если хотите узнать больше о самой системе BGP, но у нас нет доступа к производственной среде BGP, то вам может пригодиться DN42 для экспериментов с BGP в безопасной изолированной среде:



      Source link

      Выполнение бессерверных функций при помощи OpenFaas на DigitalOcean Kubernetes


      Автор выбрал фонд Free and Open Source Fund для получения пожертвования в рамках программы Write for DOnations.

      Введение

      Обычно для хостинга программного приложения в сети Интернет требуется наличие возможностей по управлению инфраструктурой, планированию и мониторингу для создания надежной системы. В отличие от такого традиционного подхода, бессерверная архитектура (также известная как function as a service или FaaS) разбивает ваше приложение на функции. Эти функции без сохранения состояния полностью независимы и срабатывают при событии. Контролируемое вами выполнение функций осуществляется через API, а не через явно выделенную инфраструктуру и базовые аппаратные средства. Функции обладают масштабируемой структурой, они портативны, их быстрее настроить и проверить по сравнению с обычными приложениями. Для работы бессерверной архитектуры в основном требуется независимый от платформы способ упаковки и контроля функций.

      OpenFaas – это система с открытым исходным кодом для внедрения бессерверной архитектуры на Kubernetes с использованием контейнеров Docker для хранения и запуска функций. Она позволяет упаковать любую программу в контейнер и обеспечить ее работу в виде функции с помощью командной строки или интегрированного веб-интерфейса пользователя. OpenFaaS отлично поддерживает метрику и автоматически масштабирует функции при увеличении нагрузки.

      В этом руководстве вы развернете OpenFaaS в кластере DigitalOcean Kubernetes на вашем домене и защитите ее при помощи сертификатов TLS от Let’s Encrypt. Вы также познакомитесь с веб-интерфейсом пользователя и развернете существующие и новые функции при помощи официального инструмента командной строки faas-cli. В результате вы получите гибкую систему для развертывания бессерверных функций.

      Предварительные требования

      • Кластер DigitalOcean Kubernetes с вашим подключением, настроенным с помощью kubectl по умолчанию. Кластер должен иметь минимум 8 Гб ОЗУ и 4 ядра процессора для работы OpenFaas (или более при увеличенной нагрузке). Инструкции по настройке kubectl описаны в шаге Подключение кластера, где вы создадите ваш кластер. Процесс создания кластера Kubernetes в DigitalOcean, см. Быстрое начало работы с Kubernetes.
      • Docker, установленный на вашем компьютере. В дополнение к шагам 1 и 2 см. Установка Docker.
      • В этом руководстве вы создадите учетную запись Docker Hub для хранения образов Docker.
      • faas-cli,официальный инструмент командной строки для управления OpenFaaS, установленный на вашем компьютере. Инструкции для различных платформ содержатся в официальной документации.
      • Диспетчер пакетов Helm, установленный на вашем компьютере. Для этого выполните шаг 1 и добавьте репозиторий stable из шага 2 из руководства Установка программного обеспечения в кластерах Kubernetes с помощью диспетчера пакетов Helm 3.
      • Nginx Ingress-контроллер и Cert-Manager, установленные на вашем кластере с помощью Helm, для опубликования OpenFaaS с использованием ресурсов Ingress. Инструкции содержатся в Настройка Nginx Ingress на DigitalOcean Kubernetes с помощью Helm.
      • Зарегистрированное полное доменное имя для хостинга OpenFaaS, указывающее на средство балансировки нагрузки, используемое в Nginx Ingress. В этом руководстве мы будем использовать имя openfaas.your_domain. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или воспользоваться услугами любого предпочитаемого регистратора доменных имен.

      Примечание. Доменное имя, которое вы будете использовать в этом руководстве, должно отличаться от имени из предварительного руководства “Настройка Nginx Ingress на DigitalOcean Kubernetes с помощью Helm”.

      Шаг 1 — Установка OpenFaaS с помощью Helm

      На этом шаге вы установите OpenFaaS для кластера Kubernetes с помощью Helm и опубликуете ее на вашем домене.

      В предварительном руководстве по контроллеру Nginx Ingress вы создали образцы Services и Ingress. Они не нужны в этом руководстве, удалите их, выполнив следующие команды:

      • kubectl delete -f hello-kubernetes-first.yaml
      • kubectl delete -f hello-kubernetes-second.yaml
      • kubectl delete -f hello-kubernetes-ingress.yaml

      Поскольку вы развертываете функции в виде объектов Kubernetes, сохраняйте их и OpenFaaS в отдельных пространствах имен в вашем кластере. Пространство имен для OpenFaaS будет называться openfaas, а пространство имен для функций openfaas-fn. Создайте пространства в кластере, выполнив следующую команду:

      • kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml

      Вывод должен выглядеть так:

      Output

      namespace/openfaas created namespace/openfaas-fn created

      Далее вам необходимо добавить репозиторий OpenFaaS в Helm для хостинга чарта OpenFaaS. Для этого запустите следующую команду:

      • helm repo add openfaas https://openfaas.github.io/faas-netes/

      В результате в Helm появится следующее:

      Output

      "openfaas" has been added to your repositories

      Обновите кэш чарта в Helm:

      Вывод должен выглядеть так:

      Output

      Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "openfaas" chart repository ...Successfully got an update from the "jetstack" chart repository ...Successfully got an update from the "stable" chart repository Update Complete. ⎈ Happy Helming!⎈

      Перед установкой OpenFaaS вам необходимо настроить некоторые параметры чарта. Параметры хранятся в файле values.yaml на вашем компьютере. Создайте и откройте этот файл в текстовом редакторе:

      Добавьте следующие строки:

      values.yaml

      functionNamespace: openfaas-fn
      generateBasicAuth: true
      
      ingress:
        enabled: true
        annotations:
          kubernetes.io/ingress.class: "nginx"
        hosts:
          - host: openfaas.your_domain
            serviceName: gateway
            servicePort: 8080
            path: /
      

      Сначала укажите пространство имен для сохранения функций, присвоив значение openfaas-fn​​​​​​ переменной functionNamespace. Установка значения true для generateBasicAuth приведет к тому, что Helm будет запрашивать обязательную аутентификацию при доступе к веб-интерфейсу пользователя OpenFaaS и создаст имя администратора и пароль для доступа.

      Далее активируйте создание Ingress и продолжите настройку конфигурации для использования контроллера Nginx Ingress и обслуживания шлюза OpenFaaS на вашем домене.

      Замените openfaas.your_domain на предпочтительный для вас домен из предварительного руководства. После внесения изменений сохраните и закройте файл.

      Установите OpenFaaS в пространство имен openfaas с заданными значениями:

      • helm upgrade openfaas --install openfaas/openfaas --namespace openfaas -f values.yaml

      Результат будет выглядеть следующим образом:

      Output

      Release "openfaas" does not exist. Installing it now. NAME: openfaas LAST DEPLOYED: ... NAMESPACE: openfaas STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: To verify that openfaas has started, run: kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas" To retrieve the admin password, run: echo $(kubectl -n openfaas get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode)

      В результате вам сообщат, что установка выполнена успешно. Выполните следующую команду для получения пароля для учетной записи admin.

      • echo $(kubectl -n openfaas get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode) | tee openfaas-password.txt

      В результате вы получите декодированный пароль, который будет одновременно записан в файл openfaas-password.txt при помощи tee. Запомните пароль для учетной записи admin в OpenFaas.

      Для отображения контейнеров OpenFaaS выполните следующую команду:

      • kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"

      Когда все перечисленные развертывания получат статус ready, нажмите CTRL + C для выхода.

      Далее перейдите к домену через ваш веб-браузер. При запросе введите имя пользователя admin и соответствующий пароль. Вы увидите веб-интерфейс пользователя OpenFaaS:

      OpenFaaS — пустая панель управления

      Вы успешно установили OpenFaaS и опубликовали ее панель управления в вашем домене. Защитите ее при помощи сертификатов TLS от Let’s Encrypt.

      Шаг 2 — Активация TLS для вашего домена

      На этом шаге вы защитите ваш опубликованный домен при помощи сертификатов Let’s Encrypt от Cert-Manager.

      Измените конфигурацию Ingress в values.yaml. Откройте его для редактирования:

      Добавьте выделенные строки:

      values.yaml

      generateBasicAuth: true
      
      ingress:
        enabled: true
        annotations:
          kubernetes.io/ingress.class: "nginx"
          cert-manager.io/cluster-issuer: letsencrypt-prod
        tls:
          - hosts:
              - openfaas.your_domain
            secretName: openfaas-crt
        hosts:
          - host: openfaas.your_domain
            serviceName: gateway
            servicePort: 8080
            path: /
      

      В блоке tls определяется Secret, где сертификаты для ваших сайтов (перечислены под hosts) будут сохранять сертификаты, выпущенные letsencrypt-prod ClusterIssuer. В общем, каждый Ingress в вашем кластере должен иметь свой Secret.

      Замените openfaas.your_domain на желаемый домен, а затем сохраните и закройте файл.

      Примените изменения, внесенные в ваш кластер, с помощью следующей команды:

      • helm upgrade openfaas --install openfaas/openfaas --namespace openfaas -f values.yaml

      Вывод должен выглядеть так:

      Output

      Release "openfaas" has been upgraded. Happy Helming! NAME: openfaas LAST DEPLOYED: ... NAMESPACE: openfaas STATUS: deployed REVISION: 2 TEST SUITE: None NOTES: To verify that openfaas has started, run: kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas" To retrieve the admin password, run: echo $(kubectl -n openfaas get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode)

      Дождитесь, пока серверы Let’s Encrypt выпустят сертификат для вашего домена. Обычно это занимает несколько минут. Вы можете отслеживать прогресс выполнения задачи при помощи следующей команды:

      • kubectl describe certificate openfaas-crt -n openfaas

      Конечная часть полученного результата будет выглядеть примерно так:

      Output

      Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal GeneratedKey 24m cert-manager Generated a new private key Normal Requested 16m cert-manager Created new CertificateRequest resource "openfaas-crt-1017759607" Normal Issued 16m cert-manager Certificate issued successfully

      Когда в последней строке полученного результата отобразится Certificate issued successfully​​​, выполните выход, нажав CTRL + C. Обновите домен в браузере для тестирования. Слева от адресной строки появится замок, это будет обозначать, что ваше соединение защищено.

      Вы защитили ваш домен OpenFaaS при помощи бесплатных сертификатов TLS от Let’s Encrypt. Далее вы сможете использовать веб-интерфейс пользователя для управления функциями.

      Шаг 3 — Развертывание функций через веб-интерфейс пользователя

      В этом разделе вы познакомитесь с веб-интерфейсом пользователя OpenFaaS, научитесь разворачивать, управлять и вызывать функции.

      Веб-интерфейс пользователя OpenFaaS состоит из двух частей: в левой части указаны все развернутые функции, а в центральной части находится подробная информация о выбранной функции, с которой можно взаимодействовать.

      Для развертывания новой функции нажмите кнопку Deploy New Function под логотипом OpenFaaS вверху слева. На экране появится диалоговое окно, где вас попросят выбрать функцию:

      OpenFaaS — диалоговое окно для развертывания новой функции

      На вкладке FROM STORE находятся готовые функции из официального магазина функций OpenFaaS. Вы можете использовать их. Каждая функция имеет короткое описание, также можно увидеть исходный код, нажав на значок ссылки справа от нужной функции. Для развертывания функции из списка в магазине, выберите ее, а затем нажмите кнопку DEPLOY.

      Вы можете также использовать собственную функцию, для этого перейдите на вкладку CUSTOM:

      OpenFaaS - Развертывание пользовательской функции

      Здесь необходимо указать образ Docker вашей функции, специально настроенный для OpenFaaS и доступный в реестре Docker (например в Docker Hub). На этом шаге вы развернете готовую функцию из магазина OpenFaaS, далее вы научитесь создавать и разворачивать пользовательские функции в Docker Hub.

      Вы развернете функцию NodeInfo, которая возвращает информацию о компьютере, где она развернута. Информация может включать, например, данные об архитектуре ЦП, количестве ядер, общем объеме ОЗУ и времени работы (в секундах).

      Выберите NodeInfo из списка готовых функций в магазине и нажмите DEPLOY. На экране появится список развернутых функций.

      OpenFaaS - Развернутая функция NodeInfo

      Выберите развернутую функцию в центральной части экрана, чтобы получить основную информацию о ней.

      OpenFaaS - Информация о развернутой функции

      Статус функции обновляется в режиме реального времени и должен быстро переключиться на Ready. Если статус Not Ready сохраняется, это может означать, что в вашем кластере недостаточно ресурсов для приема нового пода. См. Как изменить размер дроплета для решения этой проблемы.

      После появления Ready развернутая функция станет доступна по указанному URL-адресу. Для проверки перейдите по URL в вашем браузере, или выполните вызов функции с панели Invoke function под информацией о функции.

      OpenFaaS — вызов развернутой функции

      Вы можете выбирать между Text, JSON и Download, чтобы указать тип ожидаемого ответа. Если необходим запрос POST вместо GET, введите данные по запросу в поле Request body.

      Для вызова функции nodeinfo нажмите кнопку INVOKE. OpenFaaS создаст и выполнит запрос HTTP согласно выбранным опциям, а также заполнит поля ответа полученными данными.

      OpenFaaS - Ответ функции nodeinfo

      Ответ HTTP 200 OK означает, что запрос был выполнен успешно. Тело ответа будет содержать системную информацию, собранную функцией NodeInfo. Это будет означать, что функция доступна и работает правильно.

      Для удаления функции выберите ее из списка и нажмите на значок корзины в правом верхнем углу страницы. Нажмите OK при запросе для подтверждения действия. После чего статус функции изменится на Not Ready​​​ (это будет означать, что функция была удалена из кластера).В скором времени функция пропадет из пользовательского интерфейса.

      На этом шаге вы использовали веб-интерфейс пользователя OpenFaaS для развертывания и управления функциями. Далее вы научитесь развертывать и управлять функциями OpenFaaS при помощи командной строки.

      Шаг 4 — Управление функциями с помощью faas-cli

      В этом разделе вы настроите faas-cli для работы с вашим кластером. Далее вы научитесь развертывать и управлять функциями с помощью командной строки.

      Сохраните домен OpenFaas в переменной среды OPENFAAS_URL, чтобы не указывать его при каждом использовании faas-cli. Значение домена будет автоматически браться из переменной среды и использоваться во время выполнения функции.

      Откройте .bash_profile в вашей домашней директории для редактирования:

      Добавьте следующую строку:

      ~/.bash_profile

      . . .
      export OPENFAAS_URL=https://openfaas.your_domain
      

      Замените openfaas.your_domain на желаемый домен, а затем сохраните и закройте файл.

      Чтобы не входить в систему еще раз, самостоятельно оцените файл:

      Убедитесь, что faas-cli установлен на вашем компьютере. Если он не установлен, следуйте инструкциям из официальной документации.

      Настройте ваши учетные данные для входа, выполнив следующую команду:

      • cat ~/openfaas-password.txt | faas-cli login --username admin --password-stdin

      Вывод будет выглядеть следующим образом:

      Output

      Calling the OpenFaaS server to validate the credentials... credentials saved for admin https://openfaas.your_domain

      Для развертывания функции из магазина, выполните следующую команду:

      • faas store deploy function_name

      Разверните nodeinfo, выполнив:

      • faas store deploy nodeinfo

      Результат будет выглядеть примерно следующим образом:

      Output

      Deployed. 202 Accepted. URL: https://openfaas.your_domain/function/nodeinfo

      Для получения списка развернутых функций выполните faas list​​​:

      На экране появятся установленные функции:

      Output

      Function Invocations Replicas nodeinfo 0 1

      Для подробной информации по развернутой функции выполните faas describe:

      Результат будет выглядеть примерно следующим образом:

      Name:                nodeinfo
      Status:              Ready
      Replicas:            1
      Available replicas:  1
      Invocations:         0
      Image:               functions/nodeinfo-http:latest
      Function process:
      URL:                 https://openfaas.your_domain/function/nodeinfo
      Async URL:           https://openfaas.your_domain/async-function/nodeinfo
      Labels:              faas_function : nodeinfo
                           uid : 514253614
      Annotations:         prometheus.io.scrape : false
      

      Для вызова функции выполните faas invoke​​​:

      На экране появится следующее сообщение:

      Output

      Reading from STDIN - hit (Control + D) to stop.

      Далее можно сделать запрос. Для запроса используйте POST вместо GET. После ввода данных или в случае, если вы захотите сделать запрос GET, нажмите CTRL + D. Интерфейс faas-cli выполнит необходимый запрос и отобразит ответ наподобие ответа веб-интерфейса пользователя.

      Для удаления функции выполните faas remove:

      На экране появится следующее сообщение:

      Output

      Deleting: nodeinfo. Removing old function.

      Выполните faas list​​​ еще раз, чтобы убедится в удалении nodeinfo:

      Output

      Function Invocations Replicas

      На этом шаге вы научились развертывать, выводить в виде списка, вызывать и удалять функции в кластере при помощи командной строки faas-cli. На следующем шаге вы создадите свою функцию и развернете ее в кластере.

      Шаг 5 — Создание и развертывание новой функции

      Сейчас вы создадите образец функции Node.JS при помощи командной строки faas-cli и развернете его в кластере.

      Созданная функция будет упакована в виде контейнера Docker и опубликована в Docker Hub. Для публикования контейнеров войдите в систему, выполнив следующую команду:

      Для завершения процесса входа введите ваше имя пользователя и пароль Docker Hub.

      Образец функции Node.JS сохраняется в папке sample-js-function​​​. Создайте файл с помощью следующей команды:

      Перейдите в директорию:

      Поместите шаблон JS функции в директорию, выполнив следующую команду:

      • faas new sample-js --lang node

      Итоговый результат будет выглядеть следующим образом:

      Output

      2020/03/24 17:06:08 No templates found in current directory. 2020/03/24 17:06:08 Attempting to expand templates from https://github.com/openfaas/templates.git 2020/03/24 17:06:10 Fetched 19 template(s) : [csharp csharp-armhf dockerfile go go-armhf java11 java11-vert -x java8 node node-arm64 node-armhf node12 php7 python python-armhf python3 python3-armhf python3-debian ru by] from https://github.com/openfaas/templates.git Folder: sample-js created. ___ _____ ____ / _ _ __ ___ _ __ | ___|_ _ __ _/ ___| | | | | '_ / _ '_ | |_ / _` |/ _` ___ | |_| | |_) | __/ | | | _| (_| | (_| |___) | ___/| .__/ ___|_| |_|_| __,_|__,_|____/ |_| Function created in folder: sample-js Stack file written: sample-js.yml ...

      Код самой функции находится в папке sample-js​​​, а конфигурация OpenFaas для нее в файле sample-js.yaml​​​. В директории sample-js (которая напоминает обычный проект Node.JS) находятся два файла — handler.js и package.json.

      handler.js​​​ содержит фактический код JS для возврата ответа при вызове функции. Содержимое handler выглядит следующим образом:

      sample-js-function/sample-js/handler.js

      "use strict"
      
      module.exports = async (context, callback) => {
          return {status: "done"}
      }
      

      Он экспортирует lambda function с двумя параметрами, context с данными запроса и callback, которые вы можете использовать для обратной передачи данных запроса вместо выполнения обычного возврата.

      Откройте этот файл для редактирования:

      • nano sample-js/handler.js

      Измените выделенную строку следующим образом:

      sample-js-function/sample-js/handler.js

      "use strict"
      
      module.exports = async (context, callback) => {
          return {status: "<h1>Hello Sammy!</h1>"}
      }
      

      После внесения изменений сохраните и закройте файл. При вызове этой функции OpenFaaS на экране появится сообщение Hello Sammy!​​​ в ответ на запрос.

      Далее откройте файл конфигурации для редактирования:

      Он будет выглядеть следующим образом:

      sample-js-function/sample-js.yml

      version: 1.0
      provider:
        name: openfaas
        gateway: https://openfaas.your_domain
      functions:
        sample-js:
          lang: node
          handler: ./sample-js
          image: sample-js:latest
      

      Он определяет openfaas и шлюз по умолчанию для provider. Затем определяет функцию sample-js, ее язык (node), handler и имя образа Docker, которые необходимо изменить для включения вашего имени пользователя учетной записи Docker Hub, например:

      sample-js-function/sample-js.yml

      version: 1.0
      provider:
        name: openfaas
        gateway: http://127.0.0.1:8080
      functions:
        sample-js:
          lang: node
          handler: ./sample-js
          image: your_docker_hub_username/sample-js:latest
      

      Сохраните и закройте файл.

      Создайте образ Docker, переместите его в Docker Hub и разверните в вашем кластере. Выполните все действия одновременно, используя следующую команду:

      На экране появится большой объем данных (в основном из Docker), которые будут завершаться примерно следующим:

      Output

      . . . [0] < Pushing sample-js [your_docker_hub_username/sample-js:latest] done. [0] Worker done. Deploying: sample-js. Deployed. 202 Accepted. URL: https://openfaas.your_domain/function/sample-js

      Вызовите вашу новую развернутую функцию, чтобы проверить, что она работает:

      Нажмите CTRL + D. На экране появится следующее:

      Output

      <h1>Hello Sammy!</h1>

      Это означает, что функция упакована и развернута правильно.

      Вы можете удалить функцию, выполнив команду:

      Вы успешно создали и развернули пользовательскую функцию Node.JS в OpenFaaS в вашем кластере.

      Заключение

      Вы развернули OpenFaaS в вашем кластере DigitalOcean Kubernetes и готовы развернуть и начать пользоваться как готовыми, так и пользовательскими функциями. Вы научились внедрять архитектуру Function as a Service, которая поможет вам оптимизировать использование ресурсов и увеличит производительность ваших приложений.

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



      Source link

      Как записывать сеансы терминала и обмениваться ими при помощи Terminalizer в Ubuntu 18.04


      Автор выбрал фонд Electronic Frontier Foundation для получения пожертвований в рамках программы Write for DOnations.

      Введение

      Terminalizer — приложение записи терминала, позволяющее записывать сеанс терминала в реальном времени и воспроизводить его позже. Он работает таким же образом, как и устройство записи рабочего стола, но в терминале.

      Запись сеанса терминала полезна, если вы хотите просмотреть конкретную деятельность снова или поспособствовать в отладке особенно сложной ошибки. Записи, выполняемые при помощи Terminalizer, могут также экспортироваться в качестве анимированных GIF, которые полезны для обмена в онлайн-режиме или добавления в маркетинговые материалы вашего программного обеспечения.

      В этом обучающем руководстве вы установите Terminalizer, используете его для записи и воспроизведения сеансов терминала, настроите свои записи и затем экспортируете их для обмена в онлайн-режиме.

      Предварительные требования

      Для данного обучающего руководства вам потребуется следующее:

      Если вы хотите поделиться своими записями в онлайн-режиме, вам понадобится следующее:

      Подготовив все вышеперечисленное, войдите на сервер без привилегий root, чтобы начать подготовку.

      Шаг 1 — Установка Terminalizer

      На этом шаге вы скачаете и установите Terminalizer в вашей системе. Terminalizer написан с помощью Node.js и может быть установлен с помощью диспетчера пакетов npm.

      Чтобы установить Terminalizer на глобальном уровне в вашей системе, выполните следующую команду:

      • sudo npm install --global --allow-root --unsafe-perm=true terminalizer

      Terminalizer использует каркас приложений Electron для экспорта зарегистрированных сеансов терминала в формат GIF. Для установки Electron на глобальном уровне в вашей системе требуется аргумент команды --unsafe-perms=true.

      После установки Terminalizer вы увидите примерно следующий вывод:

      Output

      . . . /usr/local/lib └── terminalizer@0.7.1

      Далее проверьте установку Terminalizer, запустив следующую команду:

      Будет выведен текст следующего вида:

      Output

      0.7.1

      В заключение сгенерируйте файл конфигурации Terminalizer по умолчанию, который можно использовать для расширенной настройки Terminalizer (подробнее см. в шаге 4):

      Результат будет выглядеть примерно следующим образом:

      Output

      The global config directory is created at /home/user/.terminalizer

      Теперь, когда вы установили Terminalizer, можно сделать первую запись терминала.

      Шаг 2 — Запись и воспроизведение сеанса терминала

      На этом шаге вы записываете и воспроизводите сеанс терминала.

      В начале настройте новую запись Terminalizer с помощью имени на ваш выбор:

      • terminalizer record your-recording

      В результате будет выведено следующее, чтобы указать, что запись началась:

      Output

      The recording session has started Press Ctrl+D to exit and save the recording

      Теперь вы можете перейти к любым необходимым действиям в вашем терминале. Каждое нажатие клавиши и команда будут записываться в реальном времени в Terminalizer.

      Например:

      • pwd
      • date
      • whoami
      • echo "Hello, world!"

      Когда хотите остановить запись, нажмите CTRL+D. Затем Terminalizer сохранит запись в указанном файле в формате YAML, например your-recording.yml.

      Output

      Successfully Recorded The recording data is saved into the file: /home/user/your-recording.yml

      Возможно, Terminalizer предложит поделиться записью в онлайн-режиме. Сейчас нажмите CTRL+C для отмены этого, поскольку вы можете сначала воспроизвести запись терминала локально.

      Далее воспроизведите ваш записанный сеанс терминала при помощи следующей команды:

      • terminalizer play your-recording

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

      Output

      user@droplet:~$ pwd /home/user user@droplet:~$ date Sun Mar 8 14:55:36 UTC 2020 user@droplet:~$ whoami user user@droplet:~$ echo "Hello, world!" Hello, world! user@droplet:~$ logout

      Также вы можете изменять скорость воспроизведения вашей записи при помощи опции --speed-factor.

      Например, следующее действие будет воспроизводить вашу запись в два раза медленнее (½ скорости):

      • terminalizer play your-recording --speed-factor 2

      Также вы можете воспроизвести запись в два раза быстрее (скорость х 2):

      • terminalizer play your-recording --speed-factor 0.5

      Вы записали и воспроизвели сеанс терминала. Далее вы можете поделиться записью терминала в онлайн-режиме.

      Шаг 3 — Обмен записанными сеансами терминала

      На этом шаге вы поделитесь своим записанным сеансом терминала в онлайн-режиме на странице изучения Terminalizer.

      Сначала выберите записанный сеанс, которым вы хотите поделиться:

      • terminalizer share your-recording

      Затем вам будет предложено предоставить несколько базовых метаданных по вашей записи, в том числе название и описание:

      Output

      Please enter some details about your recording ? Title Title of Your Recording ? Description Description of Your Recording ? Tags such as git,bash,game Comma-separated Tags for Your Recording

      Предупреждение. Записи Terminalizer выкладываются в публичный доступ по умолчанию, поэтому убедитесь, что в вашей записи терминала отсутствуют личные или конфиденциальные данные, которыми вы не хотите делиться.

      Если вы впервые поделились записанным сеансом с помощью Terminalizer, вам нужно будет привязать свою учетную запись Terminalizer. Terminalizer отобразит ссылку для подтверждения, если это потребуется:

      Output

      Open the following link in your browser and login into your account https://terminalizer.com/token?token=your-token When you do it, press any key to continue

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

      После того как вы прошли по ссылке в вашем браузере и вошли в вашу учетную запись Terminalizer, нажмите любую клавишу, чтобы продолжить.

      Теперь Terminalizer загрузит вашу запись и предоставит ссылку для ее просмотра:

      Output

      Successfully Uploaded The recording is available on the link: https://terminalizer.com/view/your-recording-id

      Пройдя по ссылке в браузере на настольном компьютере, вы сможете просматривать записи, которыми вы поделились:

      Скриншот веб-сайта Terminalizer, показывающий пример записи терминала, которой вы поделились

      Вы поделились записанным сеансом терминала на веб-сайте Terminalizer и просмотрели его в браузере.

      Шаг 4 — Настройка расширенной конфигурации Terminalizer

      Теперь, когда вы ознакомились с Terminalizer, вы можете начинать рассматривать некоторые более расширенные опции персонализации, такие как способность изменять цвета и стили отображения.

      Каждая запись наследует конфигурацию по умолчанию из глобального файла конфигурации Terminalizer, который находится в ~/.terminalizer/config.yml​​​. Это означает, что вы можете изменять конфигурацию для отдельных записей напрямую, изменяя файл записи (например, your-recording.yml). Также вы можете изменять глобальную конфигурацию, которая будет влиять на все новые записи.

      В этом примере вы измените глобальный файл конфигурации, но те же указания применяются и к отдельным файлам записи.

      Сначала откройте файл глобальной конфигурации Terminalizer в текстовом редакторе, например nano:

      • nano ~/.terminalizer/config.yml

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

      Есть несколько стандартных вариантов конфигурации, которые вы, возможно, захотите изменить по вашему желанию:

      • cols: в явном виде задает количество столбцов терминала, используемых для записи.
      • rows: в явном виде задает количество строк терминала, используемых для записи.
      • frameDelay: переопределяет задержку между каждым нажатием клавиши во время воспроизведения.
      • maxIdleTime: указывает максимальное время между нажатиями клавиш во время воспроизведения.
      • cursorStyle: указывает стиль курсора умолчанию на выбор из прямоугольника, полосы и подчеркивания.
      • fontFamily: указывает список предпочитаемых шрифтов воспроизведения в порядке предпочтения.
      • theme: изменяет цветовую схему воспроизведения, например для создания черно-белого терминала и т. п.

      Например, вы можете сделать бело-черный дисплей терминала, настроив следующие опции:

      config.yml

      . . .
      theme:
        background: "white"
        foreground: "black"
      . . .
      

      Результат будет выглядеть примерно так:

      Скриншот веб-сайта Terminalizer, показывающий пример записи с черно-белой темой

      Вы можете изменять стиль курсора, упрощая понимание записи, например, посредством изменения курсора по умолчанию в виде прямоугольника на курсор в виде подчеркивания:

      config.yml

      . . .
      cursorStyle: underline
      . . .
      

      Результат будет выглядеть примерно так:

      Скриншот веб-сайта Terminalizer, показывающий пример записи с курсором в виде подчеркивания​​

      После внесения всех необходимых изменений сохраните файл и возвращайтесь в терминал.

      Если вы изменили глобальную конфигурацию Terminalizer, эти настройки будут применяться ко всем новым записям, выполняемым далее. Если вы изменяете конфигурацию конкретной записи, Terminalizer немедленно применяет изменения к этой конкретной записи.

      Обратите внимание, что настраиваемый стиль воспроизведения применяется только к сеансам записи, которыми поделились. Их воспроизведение непосредственно в вашем терминале всегда будет происходить со стилем и цветовой схемой вашего терминала по умолчанию.

      На этом последнем шаге вы рассмотрели некоторые из расширенных вариантов настройки конфигурации в Terminalizer.

      Заключение

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

      Если вы хотите сделать рендеринг и экспорт записей Terminalizer в формат GIF, вы можете установить Terminalizer на компьютере с графическим интерфейсом пользователя/на настольном компьютере и использовать встроенные функции рендеринга:

      Также вы можете посетить веб-сайт Terminalizer, чтобы увидеть записанные сеансы терминала, которыми поделились другие пользователи:



      Source link