Prezentare
Lucrând la o aplicație Elixir Umbrella (o aplicație generală care gestionează mai multe aplicații), am inclus două aplicații web în cea principală, fiecare cu propriul URL și port (admin.example.com:8081 && www.example.com:8080).
Am implementat recent aplicația pe Google Kubernetes Engine, urmând acest tutorial. Deși am avut unele probleme din când în când, am reușit să-l completez și să am un site accesibil online (nu îl pot accesa pe celălalt).
Configurare
Aici este Dockerfile de producție
DIN elixir:alpin
ARG app_name=prod
ARG phoenix_subdir=.
ARG build_env=prod
ENV MIX_ENV=${build_env} TERM=xterm
WORKDIR /opt/app
RUN actualizare apk --no-cache \
&& upgrade apk --no-cache \
&& apk add --update --no-cache nodejs npm make build-base openssl ncurses-libs libgcc libstdc++ \
&& mix local.rebar --force \
&& mix local.hex --force
COPIE . .
RUN mix face deps.get, compila
RUN Cd apps/admin/assets \
&& npm reconstruiește node-sass \
&& npm install \
&& ./node_modules/webpack/bin/webpack.js \
&& cd .. \
&& mix phx.digest
RUN Cd apps/app/assets \
&& npm reconstruiește node-sass \
&& npm install \
&& ./node_modules/webpack/bin/webpack.js \
&& cd .. \
&& mix phx.digest
RUN lansarea mixului ${app_name} \
&& mv _build/${build_env}/rel/${app_name} /opt/release \
&& mv /opt/release/bin/${app_name} /opt/release/bin/start_server
DIN alpin: cel mai recent
ARG salut
RUN actualizare apk --no-cache \
&& upgrade apk --no-cache \
&& apk --no-cache --update add ca-certificates openssl-dev bash openssl libc6-compat libgcc libstdc++ ncurses-libs \
&& apk add --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 add --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=adevărat
EXPUNEȚI ${PORT}
EXPUNERE 8081
WORKDIR /opt/app
COPIE --from=0 /opt/release .
CMD (/usr/local/bin/cloud_sql_proxy \
-projects=${GCLOUD_PROJECT_ID} -dir=/tmp/cloudsql &); \
exec /opt/app/bin/start_server start
la fel de bine ca cloudbuild.yaml
folosit de GKE pentru a construi pod.
pași:
nume: „gcr.io/cloud-builders/docker”
args: ["build", "-t", "gcr.io/next-borders-v1/prod:$_TAG",
„--build-arg”, „project_id=next-borders-v1”, „.”,
„--file=./prod.Dockerfile”]
imagini: ["gcr.io/next-borders-v1/prod:$_TAG"]
Cu aceste două fișiere în mână, urmez acest set de comenzi pentru a le expune portul 8080 (aplicația web), care a funcționat:
gcloud builds submit --substitutions=_TAG=v0.2 .
kubectl rulează hello-web --image=gcr.io/${PROJECT_ID}/hello:v1 --port 8080
kubectl expune pod hello-web --type=LoadBalancer --port=80 --target-port=8080
Dar nu am putut accesa aplicația de administrare. Deci, am încercat să expun mai multe porturi țintă:
# Eliminați serviciul real, astfel încât să nu creeze o eroare care să spună că există deja
kubectl șterge svc hello-web
kubectl expune pod hello-web --type=LoadBalancer --port=80,8080,8081 --target-port=8080,8081
Și am primit o eroare.
Apoi m-am întors pentru a încerca să expun mai multe porturi și să schimb portul țintă în site administrativ (8081), care a funcționat, deși încă era doar un site web.
kubectl expune pod hello-web --type=LoadBalancer --port=80,8080,8081 --target-port=8081
De asemenea, am adăugat IP-ul în configurația DNS, astfel încât să pot încerca să accesez aplicațiile prin URL-ul lor desemnat (include un server care poate filtra prin solicitarea URL).
Întrebări
Deci, iată câteva întrebări ale mele ca începător:
Poate un pod GKE să gestioneze mai multe porturi într-o singură aplicație?
Dacă da, pot să o fac prin cli, și cum? Sau trebuie să folosesc un fișier de configurare?
Dacă nu, care este cea mai bună cale? Două poduri, unul pentru aplicație și celălalt pentru site-ul de administrare?
Observare
Există de fapt o fir similar, dar nu vorbește despre interfața de linie de comandă GKE, iar tutorialul pe care l-am urmat nu explică configurația fișierului și nici utilizarea lor. Dacă fișierul de configurare ar fi soluția, până acum nu am nicio idee despre cum să-l scriu sau să-l folosesc.
Am căutat documentația pentru a încerca să găsesc un răspuns
Editați | ×
- 2021/08/15
- Adăugați mai multe încercări de porturi țintă în secțiunea Configurare
- Adăugați portul/site-ul web asociat cu cererea de expunere kubectl în secțiunea Configurare