ว่าด้วยเรื่อง Cloudflare tunnel และ configuration ของมัน

ตอนนี้ที่บ้านมีใช้ Cloudflare tunnel สำหรับทำให้ Home Assistant เข้าถึงได้จากนอกบ้าน (ถ้าเป็นสมัยก่อนเราจะใช้การทำ dynamic dns + forward port จาก router) แต่ท่า Cloudflare tunnel นี้ทำอะไรได้มากกว่า แถมไม่ต้องไปพึ่งพาทั้ง dynamic dns และ configuration ของ router ที่ดีบ้างไม่ดีบ้างด้วย

ที่ผ่านมามีการใช้งานตัว tunnel ผ่าน cloudflared (ของแท้ต้องมี -ed) ที่เป็น docker image ของทาง Cloudflare เอามาทำสองอย่างคือ ทำตัว DNS ร่วมกับ Pi-hole กับเอามาทำ Tunnel เนี่ยแหล่ะ

ภาพอธิบายการทำงานของ cloudflare tunnel

ที่จะเล่าวันนี้คือ อยู่ ๆ ตัว cloudflared container (ที่รันอยู่บน k3s) ที่ทำหน้าที่ tunnel พออัพเกรด version ก็ใช้งานไม่ได้ ฟ้องว่าไม่ได้มีการ set ingress ผืด( ingress คือตัวที่บอกว่า ต้นทาง host หนึ่งๆ จะให้ forward request ไปที่ local server ตัวไหน) พยายามทำเท่าไหร่ก็ไม่สำเร็จ แก้ ingress ที่เป็น config.yaml ของมันยังไงก็ไม่เวิร์ค

ก่อนจะไปต่อ ต้องเกริ่นก่อนว่า Cloudflare tunnel นั้น setup ได้สองวิธี คือ

  1. สร้างผ่าน UI ของ Cloudflare ซึ่งจะได้ token มาใส่ service แล้ว start tunnel
  2. สร้างผ่าน command line ตัว cloudflare cli ซึ่งจะได้ไฟล์ credential.json มา เพื่อเอามาให้ service load แล้ว start tunnel

สิ่งที่ทำมาตลอดคือไปสร้าง token ผ่านหน้าจอ แล้วเอามาให้ service start แล้วก็ set ค่า ingress ต่างๆใน configuration file (config.yaml) หน้าตาประมาณด้านล่าง ที่ทำแบบนี้เพราะไม่อยากลง cli ที่ใช้งานครั้งเดียว ซึ่งทำยังไงก็ไม่เวิร์ค ขึ้นว่าไม่ได้ set ingress ตลอดเวลา

    tunnel: 11111111-1111-1111-1111-111111111111
    token: {DEDUCTED}
    metrics: 0.0.0.0:2000
    no-autoupdate: true
    ingress:
    - hostname: foo.bar.org
      service: http://{alocalhostaddress}:{port}
    - service: http_status:404

ด้านล่างนี่เป็นตัวอย่าง log ที่เจอ (เวลาเป็น UTC เห็นมั๊ยว่าเสียเวลานอนขนาดไหน)

2023-06-26T17:33:17Z WRN No ingress rules were defined in provided config (if any) nor from the cli, cloudflared will return 503 for all incoming HTTP requests
2023-06-26T17:33:29Z WRN No ingress rules were defined in provided config (if any) nor from the cli, cloudflared will return 503 for all incoming HTTP requests
2023-06-26T17:33:32Z WRN No ingress rules were defined in provided config (if any) nor from the cli, cloudflared will return 503 for all incoming HTTP requests
2023-06-26T17:33:43Z WRN No ingress rules were defined in provided config (if any) nor from the cli, cloudflared will return 503 for all incoming HTTP requests
2023-06-26T17:33:45Z WRN No ingress rules were defined in provided config (if any) nor from the cli, cloudflared will return 503 for all incoming HTTP requests

บทสรุป

ตอนหลังไปพบความจริงว่า cloudflared ที่รันโดยใช้ token ที่ได้จากการสร้างผ่าน Web UI นั้น จะต้องทำการตั้งค่า ingress ผ่านหน้า UI ของเว็บเท่านั้น และในทางกลับกันคือ cloudflared tunnel ที่สร้างผ่าน command line ก็จะต้องตั้งค่า ingress ผ่าน config.yaml เท่านั้นเช่นกัน !

หายไปหลายวันเลยจากการงมสิ่งนี้ เพราะว่า error message ไม่เสื่อเนี่ยแหล่ะ 😴

หน้าจอ set ingress ของ tunnel ที่ส้รางจากหน้าเว้บ

จบ … ไปนอนได้

ref: https://github.com/cloudflare/cloudflared/issues/974#issuecomment-1581134500

Scroll to top
Exit mobile version