Контроллер GitHub Actions Runner на Azure AKS и виртуальная машина, выступающая в качестве прокси-сервера для кластера AKS, не могут выполнять push-уведомления с помощью действия docker/build-push-action@v6

1
6

Я использую самостоятельную настройку GitHub Actions runner с Actions Runner Controller (ARC) на Azure AKS вместе с небольшой виртуальной машиной, выступающей в качестве прокси для AKS. Мой самостоятельный реестр Docker настроен с обратным прокси-сервером Nginx и настроен только на прием запросов от прокси-сервера виртуальной машины из Azure. У меня возникают проблемы при попытке отправить образы Docker в реестр с помощью docker/build-push-action@v6 в GitHub Actions. Отправка работает безупречно, когда я вручную собираю и отправляю образы Docker с помощью обычных команд Docker в скрипте конвейера, но при использовании действия GitHub возникает ошибка 403 Forbidden. Я подозреваю, что это связано с тем, что действие GitHub docker/build-push-action@v6 не использует прокси-машину, настроенную для кластера AKS.

Я также пытался включить прокси в builds-args, но это все равно не работает.

Что может быть причиной этого несоответствия и как его устранить?

name: poc
on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build-and-push:
    runs-on: selfhosted-ubuntu-runners

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to selfhosted-registry.com
        uses: docker/login-action@v3
        with:
          registry: selfhosted-registry.com
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASS }}  

      - name: Build and Push Docker Image
        id: push-tag
        uses: docker/build-push-action@v6
        with:
          context: .  
          push: true
          tags: "selfhosted-registry.com/testrepo:01"
          build-args: |
            http_proxy=${{ secrets.http_proxy }}
            https_proxy=${{ secrets.https_proxy }}
Егор
Вопрос задан19 февраля 2024 г.

1 Ответ

2

Проблема, которую вы описали, может быть вызвана несколькими факторами, когда вы пытаетесь выполнить push-уведомления Docker с помощью docker/build-push-action@v6 в GitHub Actions Runner на Azure AKS с виртуальной машиной, выступающей в качестве прокси-сервера:

1. Проблема с подключением к Docker Hub:

  • Прокси-сервер: Прокси-сервер на виртуальной машине может неправильно настроен или блокировать соединения с Docker Hub. 
  • Брандмауэр: Брандмауэр на виртуальной машине или AKS-кластере может блокировать исходящий трафик на Docker Hub.
  • Подключение к интернету: Runner или AKS-кластер может иметь ограниченный доступ к интернету или Docker Hub может быть недоступен.

2. Проблема с авторизацией:

  • Доступ к Docker Hub: Runner не имеет необходимых прав доступа для отправки изображений в ваш репозиторий Docker Hub. 
  • Токен доступа: Токен доступа к Docker Hub, используемый в действии, может быть неправильным, устаревшим или имеет недостаточно прав.

3. Проблема с конфигурацией AKS:

  • Порты: Порты, используемые Docker, могут быть закрыты в кластере AKS.
  • Сеть: Сеть, в которой развернут Runner, может не иметь правильного доступа к узлам AKS, где работает Docker.

Как исправить:

  1. Проверьте конфигурацию прокси-сервера

    • Настройка прокси: Убедитесь, что прокси-сервер настроен правильно. 
    • Проверка блокировки: Проверьте, блокирует ли прокси-сервер соединения с Docker Hub.
    • Логи: Проверьте журналы прокси-сервера, чтобы найти ошибки, связанные с соединениями с Docker Hub.
  2. Проверьте конфигурацию брандмауэра:

    • Открытие портов: Убедитесь, что брандмауэр на виртуальной машине и AKS-кластере открывает порты, необходимые для доступа к Docker Hub. 
    • Правила: Проверьте правила брандмауэра на наличие блокировок исходящего трафика на Docker Hub.
  3. Убедитесь, что Runner имеет доступ к Docker Hub:

    • Проверка прав: Проверьте, что вы залогинены на Docker Hub с необходимыми правами. 
    • Токен доступа: Используйте правильный и действующий токен доступа к Docker Hub.
  4. Проверьте конфигурацию AKS:

    • Доступные порты: Убедитесь, что порты, используемые Docker, открыты в кластере AKS.
    • Сеть: Убедитесь, что сеть Runner имеет правильный доступ к узлам AKS, где работает Docker.

Дополнительные рекомендации:

  • Используйте Docker Desktop: Если вы используете локальный Docker Desktop, убедитесь, что он настроен для использования прокси-сервера.
  • Используйте docker/build-push-action@v4: Попробуйте использовать более старую версию действия, чтобы исключить проблемы с совместимостью.
  • Проверьте журналы: Проверьте журналы Runner и AKS-кластера на наличие ошибок или предупреждений.
  • Дополнительные настройки: Добавьте дополнительные настройки в шаг docker/build-push-action@v6 для управления конфигурацией Docker и прокси-сервера.

Пример настройки прокси-сервера:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Login to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Build and Push
        uses: docker/build-push-action@v6
        with:
          context: .
          push: true
          tags: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ secrets.DOCKER_HUB_REPOSITORY }}:latest
          # Настройка прокси-сервера
          #  docker.proxy.http = http://<прокси-сервер>:<порт>
          #  docker.proxy.https = http://<прокси-сервер>:<порт>
          # docker.proxy.no_proxy = <список  исключений>

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

 

Мирослав
Ответ получен19 сентября 2024 г.

Ваш ответ

Загрузить файл.