TLS และโดเมน
gateway จะจัดการสิ้นสุดการเชื่อมต่อ TLS (terminate TLS) ภายในคลัสเตอร์ของคุณ โดยใช้ใบรับรอง wildcard certificate เพียงใบเดียวครอบคลุมทุกโดเมนย่อย ซึ่งคุณสามารถเลือกวิธีการออกใบรับรองดังกล่าวได้ ไม่ว่าจะเป็นแบบออกใบรับรองอัตโนมัติจาก Let's Encrypt, การระบุใบรับรองของคุณเอง หรือการใช้งานใบรับรองที่ลงนามด้วยตนเอง (self-signed) สำหรับการติดตั้งในระบบปิด (air-gapped)
เอกสารนี้เหมาะสำหรับใคร
วิศวกรแพลตฟอร์ม (platform engineer) เนื่องจากระบบ TLS และ DNS จะถูกตั้งค่าเฉพาะในช่วงเวลาการติดตั้งระบบครั้งแรกและมักไม่มีการแก้ไขหลังจากนั้น
โดเมนย่อย
บริการทั้งหมดจะทำงานอยู่ภายใต้ global.baseDomain ของคุณ ดังนี้
| โดเมนย่อย | บริการ | ค่ากำหนด |
|---|---|---|
api. | Endpoint ของ gateway ที่เข้ากันได้กับ OpenAI | global.subdomains.api |
console. | หน้าจอ web console | global.subdomains.console |
grafana. | แดชบอร์ดระบบตรวจสอบสถานะการทำงาน | global.subdomains.grafana |
auth. | Keycloak สำหรับระบบยืนยันตัวตน | global.subdomains.auth |
mcp. | ระบบ MCP gateway ในกรณีเปิดใช้งาน | global.subdomains.mcp |
ตัวคั่นระหว่างชื่อและโดเมนหลักจะกำหนดในคีย์ global.subdomainSeparator ดังนี้
"."(ค่าเริ่มต้น) →api.ai-gateway.example.comซึ่งจำเป็นต้องใช้งานใบรับรองที่ครอบคลุม*.ai-gateway.example.com"-"→api-ai-gateway.example.comซึ่งจะอยู่ภายใต้ wildcard หลักอันเดียว เช่น*.example.comสะดวกอย่างยิ่งในกรณีที่คุณมีใบรับรองแบบดังกล่าวอยู่แล้ว
โหมดการทำงานของ TLS
กำหนดค่าในคีย์ tls.mode เป็นค่าใดค่าหนึ่งดังต่อไปนี้
letsencrypt (ค่าเริ่มต้น)
cert-manager จะร้องขอใบรับรอง wildcard certificate จาก Let's Encrypt โดยใช้วิธีทดสอบ DNS-01 ทำให้ไม่จำเป็นต้องเปิดสิทธิ์การเข้าถึง HTTP ขาเข้าในระหว่างการออกใบรับรอง
tls:
mode: letsencrypt
letsencrypt:
issuer: letsencrypt-prod # หรือ letsencrypt-staging ในระหว่างขั้นตอนการทดสอบ
email: platform@example.com
dns01:
provider: cloudflare
dnsZone: example.com # โซนโดเมนที่โทเค็น DNS ของคุณมีสิทธิ์จัดการแนะนำให้ทดสอบกับสภาพแวดล้อม staging ก่อน
Let's Encrypt จะมีการจำกัดปริมาณการออกใบรับรองในระบบใช้งานจริง โปรดระบุค่า issuer: letsencrypt-staging ไว้ก่อนจนกว่าการตั้งค่า DNS และระบบตรวจสอบความถูกต้องจะทำงานผ่านได้สำเร็จเรียบร้อยดีทั้งหมด จากนั้นจึงสลับมาใช้ค่า letsencrypt-prod สำหรับใช้งานจริง
โหมด provided
คุณเป็นผู้จัดเตรียมใบรับรอง wildcard certificate ของตนเองในรูปแบบ Kubernetes Secret และกำหนดค่าให้แพลตฟอร์มอ้างอิงมายัง Secret ดังกล่าว โปรดเลือกใช้โหมดนี้เมื่อองค์กรของคุณออกใบรับรองผ่าน CA ภายในองค์กรหรือใช้บริการจากผู้ให้บริการเชิงพาณิชย์
tls:
mode: provided
wildcardSecretName: ai-gateway-wildcard-tls # Secret ที่คุณสร้างขึ้นซึ่งเก็บข้อมูล tls.crt และ tls.keyโหมด selfsigned
cert-manager จะทำหน้าที่ออกใบรับรอง wildcard แบบลงนามด้วยตนเอง (self-signed) โดยมีวัตถุประสงค์หลักสำหรับใช้ในระบบปิด (air-gapped) หรือสภาพแวดล้อมระบบเครือข่ายภายในองค์กรซึ่งไม่สามารถเข้าถึงหน่วยงาน CA สาธารณะได้ และฝั่งไคลเอนต์ปลายทางจะยอมรับความน่าเชื่อถือผ่านระบบ root CA ภายในของคุณเอง
tls:
mode: selfsignedช่องทางการเข้าถึงจากภายนอก
ใบรับรองจะทำหน้าที่ครอบคลุมพอร์ตเชื่อมต่อ (listener) ภายในคลัสเตอร์โดยไม่ขึ้นอยู่กับช่องทางที่ข้อมูลจะส่งมาถึง โดยมีรูปแบบที่นิยมใช้ 2 รูปแบบดังนี้
- Ingress หรือ Load Balancer ของคุณเอง: ดำเนินการชี้ระเบียน DNS wildcard มายังส่วนประกอบนี้
- Cloudflare Tunnel (
ingress.tunnel.enabled: true): สำหรับสภาพแวดล้อมที่ไม่มีไอพีสาธารณะขาเข้า โดยระบบอุโมงค์ข้อมูล (tunnel) จะทำหน้าที่ส่งต่อทราฟฟิกมายัง listener ภายในคลัสเตอร์ ซึ่งใบรับรองภายในคลัสเตอร์ของคุณจะยังคงทำหน้าที่ดูแลความปลอดภัยของการเชื่อมต่อตั้งแต่ต้นจนจบกระบวนการเช่นเดิม
ระบบ DNS
สร้าง ระเบียน wildcard (wildcard record) เช่น *.your-domain ชี้มายังที่อยู่ภายนอกของ gateway หรือในกรณีใช้งาน Cloudflare Tunnel จะปล่อยให้ระบบ tunnel เป็นตัวจัดการชื่อโฮสต์สาธารณะแทน สำหรับการออกใบรับรองด้วยวิธี DNS-01 โทเค็นผู้ให้บริการ DNS สำหรับออกใบรับรองจะต้องมีสิทธิ์ในการบริหารจัดการ dnsZone ที่คุณตั้งค่าไว้ด้วย
ขั้นตอนต่อไป
- ระบบความพร้อมใช้งานสูง (High availability) — โครงสร้าง replica และนโยบายการขัดข้องที่ยอมรับได้
- การติดตั้งในระบบปิด (Air-gapped install) — รายละเอียดระบบ TLS แบบ self-signed และการคัดลอกรูปคอนเทนเนอร์
- การเสริมสร้างความปลอดภัย (Hardening) — ความปลอดภัยของระบบ TLS ข้อมูลที่เป็นความลับ และระบบเครือข่าย