ตอนนี้ที่บ้านมีใช้ 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 เนี่ยแหล่ะ
ที่จะเล่าวันนี้คือ อยู่ ๆ ตัว cloudflared container (ที่รันอยู่บน k3s) ที่ทำหน้าที่ tunnel พออัพเกรด version ก็ใช้งานไม่ได้ ฟ้องว่าไม่ได้มีการ set ingress ผืด( ingress คือตัวที่บอกว่า ต้นทาง host หนึ่งๆ จะให้ forward request ไปที่ local server ตัวไหน) พยายามทำเท่าไหร่ก็ไม่สำเร็จ แก้ ingress ที่เป็น config.yaml ของมันยังไงก็ไม่เวิร์ค
ก่อนจะไปต่อ ต้องเกริ่นก่อนว่า Cloudflare tunnel นั้น setup ได้สองวิธี คือ
- สร้างผ่าน UI ของ Cloudflare ซึ่งจะได้ token มาใส่ service แล้ว start tunnel
- สร้างผ่าน 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 ไม่เสื่อเนี่ยแหล่ะ 😴
จบ … ไปนอนได้
ref: https://github.com/cloudflare/cloudflared/issues/974#issuecomment-1581134500