การนำเสนอ
การทำงานกับแอป 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 ในส่วนการกำหนดค่า