Score:0

จะมีแอพหลายพอร์ตในพ็อด GKE เดียวกัน (โดยใช้ cli) ได้อย่างไร

ธง in

การนำเสนอ

การทำงานกับแอป Elixir Umbrella (แอปทั่วไปที่จัดการหลายแอป) ฉันได้รวมเว็บแอปสองแอปไว้ในแอปหลัก แต่ละแอปมี URL และพอร์ตของตัวเอง (admin.example.com:8081 && www.example.com:8080).

ฉันเพิ่งปรับใช้แอปบน Google Kubernetes Engine ตามบทช่วยสอนนี้. แม้ว่าฉันจะมีปัญหาในบางครั้ง แต่ฉันก็จัดการจนเสร็จและมีเว็บไซต์หนึ่งออนไลน์ที่สามารถเข้าถึงได้ (อีกเว็บหนึ่งไม่สามารถเข้าถึงได้)

การกำหนดค่า

นี่คือ Dockerfile การผลิต

จากน้ำอมฤต:อัลไพน์

ARG app_name=ผลิตภัณฑ์
ARG ฟีนิกซ์_subdir=.
ARG build_env=ผลิตภัณฑ์

ENV MIX_ENV=${build_env} TERM=xterm
เวิร์กดีอาร์ /opt/app
อัปเดต RUN apk --no-cache \
  && อัปเกรด apk --ไม่มีแคช \
  && apk เพิ่ม --update --no-cache nodejs npm สร้าง build-base openssl ncurses-libs libgcc libstdc++ \
  && ผสม local.rebar --force \
  && ผสม local.hex --force
สำเนา .

RUN ผสมทำ deps.get คอมไพล์
RUN cd แอพ/admin/assets \
  && npm สร้าง node-sass ใหม่ \
  && npm ติดตั้ง \
  && ./node_modules/webpack/bin/webpack.js \
  && ซีดี .. \
  && ผสม phx.digest

RUN cd แอพ/แอพ/สินทรัพย์ \
  && npm สร้าง node-sass ใหม่ \
  && npm ติดตั้ง \
  && ./node_modules/webpack/bin/webpack.js \
  && ซีดี .. \
  && ผสม phx.digest
RUN มิกซ์เปิดตัว ${app_name} \
  && mv _build/${build_env}/rel/${app_name} /opt/release \
  && mv /opt/release/bin/${app_name} /opt/release/bin/start_server


จากเทือกเขาแอลป์:ล่าสุด

ARG สวัสดี

อัปเดต RUN apk --no-cache \
  && อัปเกรด apk --ไม่มีแคช \
  && 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=จริง
เปิดเผย ${PORT}
เปิดเผย 8081
เวิร์กดีอาร์ /opt/app
COPY --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.exec /opt/app/bin/start_server

เช่นเดียวกับ cloudbuild.yaml ใช้โดย GKE เพื่อสร้างพ็อด

ขั้นตอน:
  ชื่อ: "gcr.io/cloud-builders/docker"
  หาเรื่อง: ["build", "-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 ส่ง --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 สวัสดีเว็บ
kubectl เปิดเผยพ็อด 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 สามารถรองรับหลายพอร์ตในแอปเดียวได้หรือไม่ ถ้าได้ จะทำผ่าน cli ได้ไหม และทำอย่างไร? หรือฉันต้องใช้ไฟล์กำหนดค่า? ถ้าไม่ วิธีที่ดีที่สุดคืออะไร? พ็อดสองอัน อันหนึ่งสำหรับแอพและอีกอันสำหรับเว็บไซต์ผู้ดูแลระบบ

การสังเกต

มีอยู่จริง กระทู้ที่คล้ายกันแต่ไม่ได้พูดถึงอินเทอร์เฟซบรรทัดคำสั่ง GKE และบทช่วยสอนที่ฉันติดตามไม่ได้อธิบายการกำหนดค่าไฟล์และการใช้งาน ไฟล์การกำหนดค่าจะเป็นวิธีแก้ปัญหาหรือไม่ ฉันยังไม่มีเงื่อนงำเกี่ยวกับวิธีเขียนหรือใช้งาน

เอกสารที่ฉันค้นหาเพื่อพยายามหาคำตอบ

แก้ไข

  • 2021/08/15
    • ลองเพิ่มพอร์ตเป้าหมายหลายพอร์ตในส่วนการกำหนดค่า
    • เพิ่มพอร์ต/เว็บไซต์ที่เกี่ยวข้องกับคำขอเปิดเผย kubectl ในส่วนการกำหนดค่า
jp flag
ใช่ พ็อดสามารถแสดงพ็อดได้หลายตัว จากคำอธิบายของคุณ เป็นการยากที่จะบอกได้ว่าพอร์ตใดที่คุณขาดหายไป เป็นเรื่องปกติมากขึ้นที่จะทำงานกับรายการที่เปิดเผยและไม่ทำงานกับคำสั่ง cli ที่จำเป็นเมื่อทำสิ่งนี้
Aridjar avatar
in flag
ขอบคุณสำหรับการตอบกลับของคุณ @Jonas พอร์ตที่หายไปคือพอร์ตเป้าหมาย (8080 (เว็บแอป) หรือ 8081 (เว็บไซต์ผู้ดูแลระบบ)) ฉันแก้ไขคำถามเพื่อรวมความแม่นยำของพอร์ตเป้าหมายรวมถึงคำสั่งที่มีพอร์ตเป้าหมายหลายพอร์ตที่ฉันลอง แต่ไม่ได้ผล

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา