Puncte:0

Cum să aveți o aplicație cu mai multe porturi în același pod GKE (folosind cli)?

drapel in

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
drapel jp
Da, păstăile pot expune mai multe păstăi. Din descrierea ta este greu să spui ce port îți lipsește. Este mai obișnuit să lucrezi cu manifeste declarative și să nu lucrezi cu comenzi imperative cli atunci când faci asta.
Aridjar avatar
drapel in
Multumesc pentru raspuns @Jonas. Portul lipsă este un port țintă (fie 8080 (aplicație web) fie 8081 (site de administrare)). Am editat întrebarea pentru a include o precizie asupra portului vizat, precum și o comandă cu porturi multiple vizate pe care le-am încercat, dar care nu a funcționat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.