Рубрики
Uncategorized

Контейнер послов

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

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

Эти внешние или внешние службы могут представить разные интерфейсы и имеют другие API. Вместо того, чтобы написать код внутри основного контейнера, который может иметь дело с несколькими интерфейсами и API на следующих внешних службах, вы реализуете его в контейнере посла. Контейнер послов знает, как поговорить и интерпретировать ответы с разных конечных точек и передавать их в основной контейнер. Основной контейнер должен только знать, как поговорить с контейнером посла. Затем вы можете повторно использовать контейнер посола с любым другим контейнером, который необходимо поговорить с этими сервисами, сохраняя при этом тот же внутренний интерфейс.

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

Чтобы продемонстрировать, как работает посол Pattern, мы будем использовать Фильм БД (TMBD) Отказ Перейдите на сайт и зарегистрируйтесь (это бесплатно), чтобы получить ключ API.

Сайт Movie DB предлагает API отдыха, где вы можете получить информацию о фильмах. Мы внедрили контейнер посла, который слушает на пути /фильмы И всякий раз, когда он получает запрос, он сделает аутентифицированный запрос на API фильма БД.

Вот фрагмент из кода контейнера посла:

func TheMovieDBServer(w http.ResponseWriter, r *http.Request) {
    apiKey := os.Getenv("API_KEY")
    resp, err := http.Get(fmt.Sprintf("https://api.themoviedb.org/3/discover/movie?api_key=%s", apiKey))
    // ...
    // Return the response
}

Мы читаем API_KEY Переменная среды, а затем сделайте запрос на получение URL. Примечание. Если вы попытаетесь запросить URL без клавиши API, вы получите следующую ошибку:

$ curl https://api.themoviedb.org/3/discover/movie
{"status_code":7,"status_message":"Invalid API key: You must be granted a valid key.","success":false}

Я подтолкнул образа докера посла на Startkubernetes/Посол: 0.1.0 Отказ

Как и с контейнером Sidecar, контейнер посола — это просто другой контейнер, который работает в POD. Мы проверим контейнер послов, позвонив Curl от основного контейнера.

Вот как выглядит файл yaml:

apiVersion: v1
kind: Pod
metadata:
  name: themoviedb
spec:
  containers:
    - name: main
      image: radial/busyboxplus:curl
      args:
        - sleep
        - "600"
    - name: ambassador
      image: startkubernetes/ambassador:0.1.0
      env:
        - name: API_KEY
          valueFrom:
            secretKeyRef:
              name: themoviedb
              key: apikey
      ports:
        - name: http
          containerPort: 8080

Прежде чем мы сможем создать POD, нам нужно создать секрет с ключом API. Давайте сделаем это первым:

$ kubectl create secret generic themoviedb --from-literal=apikey=
secret/themoviedb created

Теперь вы можете хранить POD YAML в Посол-контейнер. YAML Файл и создать его с Kubectl Apply Printe -F посол-контейнер. YAML Отказ

Когда Kubernetes создает POD (вы можете использовать Kubectl Получить Po Чтобы увидеть статус), вы можете использовать Exec Команда для запуска Curl Команда внутри Главная контейнер:

$ kubectl exec -it themoviedb -c main -- curl localhost:8080/movies

{"page":1,"total_results":10000,"total_pages":500,"results":[{"popularity":2068.491,"vote_count":
...

Поскольку контейнеры в том же POD имеют сеть, мы можем сделать запрос против localhost: 8080 , что соответствует порту на контейнере посла.

Вы можете представить себе запуск приложения или веб-сервера в основном контейнере, а вместо того, чтобы сделать запросы на API.themoviedb.org Прямой, вы делаете запросы на контейнер посола.

Аналогичным образом, если у вас была другая служба, необходимый доступ к API.themoviedb.org Вы можете добавить контейнер послов на POD и решить доступ таким образом.

Оригинал: «https://dev.to/peterj/ambassador-container-pattern-5pp»