Презентация
Работая над приложением Elixir Umbrella (обычное приложение, управляющее несколькими приложениями), я включил два веб-приложения в основное, каждое со своим собственным URL-адресом и портом (admin.example.com:8081 && www.example.com:8080).
Недавно я развернул приложение на Google Kubernetes Engine, следуя этому руководству. Хотя время от времени у меня возникали некоторые проблемы, мне удалось завершить его, и один веб-сайт был доступен в Интернете (не могу получить доступ к другому).
Конфигурация
Вот производственный Dockerfile
ИЗ эликсира:альпийский
имя_приложения ARG = продукт
ARG phoenix_subdir=.
ARG build_env = продукт
ENV MIX_ENV=${build_env} TERM=xterm
РАБОЧИЙ КАТАЛОГ /opt/приложение
ЗАПУСТИТЬ обновление apk --no-cache \
&& обновление apk --no-cache \
&& apk add --update --no-cache nodejs npm make build-base openssl ncurses-libs libgcc libstdc++ \
&& смешать local.rebar --force \
&& смешать local.hex --force
КОПИРОВАТЬ . .
RUN mix сделать deps.get, скомпилировать
ЗАПУСК cd apps/admin/assets\
&& npm перестроить узел-sass \
&& нпм установить \
&& ./node_modules/webpack/bin/webpack.js \
&& CD .. \
&& смешать phx.digest
ЗАПУСК cd apps/app/assets \
&& npm перестроить узел-sass \
&& нпм установить \
&& ./node_modules/webpack/bin/webpack.js \
&& CD .. \
&& смешать phx.digest
ВЫПОЛНИТЬ выпуск микса ${app_name} \
&& mv _build/${build_env}/rel/${app_name} /opt/release \
&& mv /opt/release/bin/${app_name} /opt/release/bin/start_server
ОТ альпийского: последний
Арг привет
ЗАПУСТИТЬ обновление apk --no-cache \
&& обновление apk --no-cache \
&& apk --no-cache --update добавить ca-сертификаты openssl-dev bash openssl libc6-compat libgcc libstdc++ ncurses-libs \
&& apk добавить --no-cache --virtual .erlang-build gcc g++ libc-dev \
&& mkdir -p /usr/local/bin \
&& wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 \
-O /usr/local/bin/cloud_sql_proxy \
# && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
# && wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.33-r0/glibc-2.33-r0.apk \
# && apk добавить --no-cache glibc-2.33-r0.apk \
&& chmod +x /usr/local/bin/cloud_sql_proxy \
&& mkdir -p /tmp/cloudsql
ENV GCLOUD_PROJECT_ID=${project_id} \
REPLACE_OS_VARS=истина
РАЗОБЛАЧИТЬ ${ПОРТ}
ВЫСТАВИТЬ 8081
РАБОЧИЙ КАТАЛОГ /opt/приложение
КОПИРОВАТЬ --from=0 /opt/release .
CMD (/usr/local/bin/cloud_sql_proxy \
-projects=${GCLOUD_PROJECT_ID} -dir=/tmp/cloudsql &); \
exec /opt/app/bin/start_server запуск
так же хорошо как облачная сборка.yaml
используется GKE для создания модуля.
шаги:
имя: "gcr.io/cloud-builders/docker"
аргументы: ["сборка", "-t", "gcr.io/next-borders-v1/prod:$_TAG",
"--build-arg", "project_id=next-borders-v1", ".",
"--file=./prod.Dockerfile"]
изображения: ["gcr.io/next-borders-v1/prod:$_TAG"]
Имея в руках эти два файла, я следую этому набору команд, чтобы открыть порт 8080 (веб-приложение), который работал:
gcloud builds submit --substitutions=_TAG=v0.2 .
kubectl запустить hello-web --image=gcr.io/${PROJECT_ID}/hello:v1 --port 8080
kubectl предоставляет модуль hello-web --type=LoadBalancer --port=80 --target-port=8080
Но я не мог получить доступ к приложению администратора. Итак, я попытался открыть несколько целевых портов:
# Удалите фактическую службу, чтобы она не создавала ошибку о том, что она уже существует
kubectl удалить svc hello-web
kubectl выставить pod hello-web --type=LoadBalancer --port=80,8080,8081 --target-port=8080,8081
И получил ошибку.
Затем я вернулся, чтобы попытаться открыть несколько портов и изменить целевой порт на сайт администратора (8081), который работал, хотя это был всего лишь один веб-сайт.
kubectl предоставляет модуль hello-web --type=LoadBalancer --port=80,8080,8081 --target-port=8081
Я также добавил IP-адрес в конфигурацию DNS, чтобы попытаться получить доступ к приложениям через назначенный им URL-адрес (они включают сервер, который может фильтровать запрос URL-адреса).
Вопросы
Итак, вот мои несколько вопросов как новичка:
Может ли модуль GKE обрабатывать несколько портов в одном приложении?
Если да, то можно ли это сделать через кли и как? Или мне нужно использовать файл конфигурации?
Если нет, то как лучше? Два модуля, один для приложения, а другой для веб-сайта администратора?
Наблюдение
На самом деле есть похожая тема, но в нем не говорится об интерфейсе командной строки GKE, а в руководстве, которому я следовал, не объясняется ни конфигурация файла, ни его использование. Будет ли файл конфигурации решением, я пока понятия не имею, как его написать или использовать.
Документация, которую я просмотрел, чтобы попытаться найти ответ
Редактировать
- 2021/08/15
- Добавьте попытку с несколькими целевыми портами в разделе «Конфигурация».
- Добавьте порт/веб-сайт, связанный с запросом на раскрытие kubectl, в разделе «Конфигурация».