Поделиться через


Руководство. Использование telepresence для разработки и тестирования микрослужб локально

Telepresence — это проект песочницы Cloud Native Computing Foundation (CNCF), созданный командой в Ambassador Labs. Telepresence позволяет разработчикам локально запускать службы на компьютере разработки при подключении к удаленному кластеру Kubernetes. Эта настройка упрощает разработку, отладку и тестирование приложений, взаимодействующих с другими службами в кластере, не выполняя повторное развертывание или перестроение всего приложения в Kubernetes при каждом внесении изменений.

Примечание.

Telepresence — это проект CNCF с открытым исходным кодом. Корпорация Майкрософт не предлагает поддержку проблем, которые могут возникнуть при использовании telepresence. Если у вас возникли проблемы с использованием telepresence, перейдите на страницу проблемы с Telepresence GitHub и откройте проблему.

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

Как работает telepresence

Telepresence внедряет агенты трафика в модуль pod рабочей нагрузки в качестве бокового автомобиля. Агенты трафика выполняют роль прокси-сервера, перенаправляя входящий и исходящий сетевой трафик из кластера AKS на локальный компьютер. Затем вы можете разрабатывать и тестировать в локальной среде, как если бы локальный компьютер был в кластере AKS. Процесс включает в себя:

  • Подключение к кластеру AKS к Telepresence.
  • Указание службы или развертывания, для которого требуется перехватывать входящий и исходящий трафик, а затем перенаправляется в локальную среду.
  • Запуск локальной версии службы. Telepresence подключает локальную версию службы к кластеру через прокси-модуль pod.

Необходимые компоненты

  • Кластер AKS. Если у вас нет кластера, который вы можете использовать для этого руководства, создайте его с помощью руководства. Создание кластера Служба Azure Kubernetes (AKS).
  • Kubectl устанавливается и находится на пути в среде командной строки, используемой для разработки. В этом руководстве используется kubectl для управления кластером Kubernetes. Если вы используете Azure Cloud Shell, kubectl уже установлен. Чтобы установить kubectl локально, используйте az aks install-cli команду.
  • Установите Node.js LTS. Выполнив команду node --version, убедитесь, что платформа Node.js установлена.

Подключение к кластеру с помощью kubectl

Примечание.

Задайте значения $MY_RESOURCE_GROUP_NAME и $MY_AKS_CLUSTER_NAME соответствующим образом.

Прежде чем установить telepresence и взаимодействовать с кластером AKS, убедитесь, что вы подключены к кластеру. Если вы не установили kubectl в разделе "Предварительные требования" , сделайте это, прежде чем продолжить.

  1. Настройте kubectl подключение к кластеру AKS с помощью команды az aks get-credentials . Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.

    az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAME
    
  2. Проверьте подключение к кластеру с помощью команды kubectl cluster-info . Эта команда отображает имя кластера, чтобы убедиться, что вы подключены к кластеру, с которым вы хотите работать.

    kubectl cluster-info
    

Клонируйте пример приложения и разверните его кластер AKS

Приложение aks-store-demo , используемое в этом руководстве, — это базовое приложение для магазина, включая следующие развертывания и службы Kubernetes:

Снимок экрана: пример архитектуры Магазина Azure.

  • Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
  • Служба продуктов: отображает сведения о продукте.
  • Служба заказов: помещает заказы.
  • Rabbit MQ: очередь сообщений для очереди заказов.
  1. Используйте git , чтобы клонировать пример приложения в среду разработки.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  2. Перейдите в клонированный каталог.

    cd aks-store-demo
    
  3. развернете приложение в кластере AKS;

    kubectl apply -f aks-store-quickstart.yaml
    

Установка telepresence

Чтобы перехватить трафик в кластер AKS и из него, необходимо установить клиент Telepresence на локальном компьютере и диспетчер трафика в кластер AKS.

Установка клиента Telepresence

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

Инструкции по установке см. в документации по telepresence.

Установка диспетчера трафика telepresence

Для маршрутизации облачного трафика на локальный компьютер telepresence использует диспетчер трафика. Helm используется для развертывания диспетчера трафика в кластере Kubernetes.

telepresence helm install

Перехват трафика в службу

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

  1. В командной строке на локальном компьютере выполните команду telepresence connect , чтобы подключиться к кластеру AKS и серверу API Kubernetes.

    telepresence connect
    

    Успешный ответ от telepresence connect имени кластера и пространства имен по умолчанию, к которому подключено telepresence, аналогично следующему примеру.

    Connected to context myAKSCluster, namespace default (https://myAKSCluster-dns-ck7w5t5h.hcp.eastus2.azmk8s.io:443)
    
  2. telepresence list Используйте команду для отображения списка служб, которые можно перехватывать.

    telepresence list
    

    Успешный ответ отображает доступные службы, аналогичные следующему примеру.

    order-service  : ready to intercept (traffic-agent not yet installed)
    product-service: ready to intercept (traffic-agent not yet installed)
    rabbitmq       : ready to intercept (traffic-agent not yet installed)
    store-front    : ready to intercept (traffic-agent not yet installed)
    
  3. Найдите имя порта, с помощью kubectl get service service-name --output yamlкоторый необходимо перехватить трафик. В этом руководстве введите следующую команду в командной строке.

    kubectl get service store-front -ojsonpath='{.spec.ports[0].port}'
    

    В этом примере возвращается порт для перехвата 80.

    80
    
  4. Перехват трафика из службы в кластере AKS с помощью telepresence intercept команды следующего формата: $ telepresence intercept <service-name> --port <local-port>[:<remote-port>] --env-file <path-to-env-file>

    • --port указывает локальный порт и удаленный порт для кластера AKS.
    • --env-file указывает путь, в котором Telepresence создает env-файл, содержащий переменные среды, необходимые для перехвата трафика. Этот файл должен существовать для правильного перехвата трафика службы на локальный компьютер. Если файл не существует, telepresence создает его для вас.

    Примечание.

    sshfs требуется для правильной работы томов во время перехвата для версий Telepresence linux и macOS. Если у вас нет установленной версии, дополнительные сведения см. в документации по telepresence.

    В этом руководстве введите следующую команду для перехвата трафика.

    cd src/store-front
    telepresence intercept store-front --port 8080:80 --env-file .env
    

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

    Using Deployment store-front
    Intercept name         : store-front
    State                  : ACTIVE
    Workload kind          : Deployment
    Destination            : 127.0.0.1:8080
    Service Port Identifier: 80/TCP
    Volume Mount Point     : /tmp/telfs-3392425241
    Intercepting           : all TCP connections
    

Изменение локального кода и просмотр изменений в режиме реального времени

Настроив telepresence, вы можете легко изменить локальный код и просмотреть изменения, отраженные в режиме реального времени. Это позволяет выполнять локальное тестирование и отладку при использовании кластера AKS.

  1. Перейдите и откройте components/TopNav.Vue приложение, которое вы клонировали ранее.

  2. Измените Products элемент New Productsнавигации на ,как показано в следующем примере, и сохраните изменения.

    <template>
      <nav>
        <div class="logo">
          <router-link to="/">
            <img src="/contoso-pet-store-logo.png" alt="Contoso Pet Store Logo" />
          </router-link>
        </div>
        <button class="hamburger" @click="toggleNav">
          <span class="hamburger-icon"></span>
        </button>
        <ul class="nav-links" :class="{ 'nav-links--open': isNavOpen }">
          <li><router-link to="/" @click="closeNav">Products</router-link></li>
          <li>
            <router-link to="/cart" @click="closeNav">Cart ({{ cartItemCount }})</router-link>
          </li>
        </ul>
      </nav>
    </template>
    
  3. Выполните следующие команды, чтобы запустить приложение локально.

    1. npm install — устанавливает зависимости.
    2. npm run serve — запускает сервер разработки.

При переходе к общедоступному store-front IP-адресу службы в кластере AKS обновленная навигация присутствует и трафик направляется в локальную версию службы. Локальные изменения отражаются в режиме реального времени и взаимодействуют с другими службами в кластере AKS.

Демонстрация видео

В следующем видео представлено четкое и краткое пошаговое руководство по отладке Telepresence В F5.

Следующий шаг

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