#docker #kubernetes #kubernetes-pod
#docker #kubernetes #kubernetes-pod
Вопрос:
Я хотел бы иметь возможность создать временный контейнер в существующем модуле для обработки произвольного кода от пользователя (соображения безопасности), однако этот контейнер также должен находиться в том же модуле из-за проблем с локальностью данных / производительностью.
Мой вопрос в том, каков правильный способ добиться этого? Эфемерные контейнеры описываются как «для проверки служб, а не для сборки приложений» и «Эфемерные контейнеры могут не иметь портов».
Поэтому я чувствую, что это неправильный способ сделать это. Мой временный контейнер должен иметь возможность обмениваться подключенными данными с исходным контейнером в том же модуле и должен иметь возможность обмениваться данными через порт, который открыт для исходного контейнера того же модуля.
Ответ №1:
Вы можете достичь этого, либо создав sidecar, который будет перехватывать трафик на ваш исходный модуль, либо просто создав второй модуль в вашем развертывании и способ автоматического запуска процесса, который вы хотите выполнить. Одно из предостережений заключается в том, что два модуля используют одну и ту же сеть, поэтому вы не можете использовать один и тот же порт для обоих контейнеров.
Недостатком обоих подходов является то, что у вас больше нет временного контейнера, теперь у вас будут оба запущенных.
Если вы хотите выполнить одноразовую задачу, когда ваш контейнер запущен, я настоятельно рекомендую предоставить API в вашем исходном модуле и выполнить вызов из задания.
Комментарии:
1. «Одно из предостережений заключается в том, что два модуля используют одну и ту же сеть, поэтому вы не можете использовать один и тот же порт для обоих контейнеров». Это относится к методу sidecar?
2. оба, если вы предоставляете порты в новом контейнере, он должен быть новым, отличным от исходного контейнера.
3. Спасибо, после некоторого поиска я считаю, что работа — это правильный подход здесь. Для нас это не идеально, поскольку наше приложение также должно быть развернуто в среде, отличной от Kubernetes, используя только контейнеры Docker. Но, по-видимому, правильным подходом является просто наличие двух бэкэндов, одного для заданий Kube и одного для контейнеров Docker.