본문으로 건너뛰기
cccskills
무료GitHub에 공개

e2e-debug

Debug a failing relay end to end - inspect the kind cluster, relay logs and rendered coturn config, and run turnfleet-probe by hand. Use when a relay never forms, a probe fails, or an e2e case breaks.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Hazmi35/turnfleet스타 2(GitHub 2 + cccskills 0)
연동 도구Kubernetes

실행 점수 미검증

설치 방법 보기

포함된 파일(1)

  • SKILL.md3.1 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Debugging a relay

Symptom first, then the narrowest check that can distinguish the candidates. The failure this project exists to remove is silent, so work from evidence, not from "the pod is Running".

1. Cluster and pool state

kubectl --context kind-turnfleet get turnpools -A -o wide
kubectl --context kind-turnfleet -n <ns> get turnpool <pool> -o yaml

Read status.relays[]: ready, draining, relayAddress, portRange, portsInUse/portsTotal, and lastProbe.{succeeded,message}. A relay that is ready: false with a probe message is a data plane problem. A relay that is missing from status.relays is a planner problem. kubectl --context kind-turnfleet describe turnpool <pool> shows the conditions: Ready, ProbeSucceeded, CapacityPressure, AddressConflict, Degraded.

2. Rendered config

kubectl --context kind-turnfleet -n <ns> get secret <pool>-relay-config \
  -o jsonpath='{.data.<relay>}' | base64 -d

The Secret carries one key per relay, named after its pod. Check the listening address, --relay-ip/--external-ip, --min-port/--max-port, realm, and that --static-auth-secret matches the Secret the issuer uses. If the config looks right but the relay is not running, the pod is probably not on a labelled relay node.

3. Relay process

kubectl --context kind-turnfleet -n <ns> get pods -o wide | grep relay
kubectl --context kind-turnfleet -n <ns> logs <relay-pod> --tail=100
kubectl --context kind-turnfleet -n <ns> exec <relay-pod> -- \
  curl -s localhost:9641/metrics | grep turn_total_allocations

A relay that started but cannot bind its range logs a bind error and exits: that means another process on the node already owns those ports (see the partitioning rules in docs/adr/0001-addressing-modes.md).

4. Probe by hand

kubectl --context kind-turnfleet -n <ns> get secret <auth-secret> \
  -o jsonpath='{.data.<key>}' | base64 -d > /tmp/turn-secret
bin/turnfleet-probe --uri "turn:<relayAddress>:<port>?transport=udp" \
  --secret-file /tmp/turn-secret --expect-address <relayAddress> \
  --expect-port-range <start>-<end> --json

A failure from inside the cluster isolates configuration from reachability. What it cannot see is hairpin NAT and firewalls in front of the node, which is why docs/capacity-model.md says the external vantage point is the authoritative check. Run the same command from the host against the node address to test the external path.

5. Saturation

turnfleet_allocation_failures_total{code="508"} going up, with CapacityPressure true, means the relay's range is genuinely exhausted and the other relays are still serving. To reproduce it, allocate in a loop from a pion client until the relay answers 508. The e2e saturation case does exactly this.

Never widen a range or restart a relay to make a symptom disappear without naming the cause. That is how the capacity illusion comes back.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Add a new addressing mode to Turnfleet - implement Planner and Renderer, golden tests, an e2e case and an ADR. Use when a new way of assigning relay addresses or port ranges is needed.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Hazmi35/turnfleet22026년 10월 25일 업데이트

Change the TURNPool API types safely - edit types and markers, regenerate, update webhooks, tests and docs. Use whenever a field is added, removed or re-marked in api/v1alpha1.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Hazmi35/turnfleet22026년 10월 25일 업데이트

Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes: Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/spec asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to "review since X".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Hazmi35/turnfleet22026년 10월 25일 업데이트

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Hazmi35/turnfleet22026년 10월 25일 업데이트

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Hazmi35/turnfleet22026년 10월 25일 업데이트

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Hazmi35/turnfleet22026년 10월 25일 업데이트

Hazmi35의 스킬 모두 보기

이 스킬의 문제 신고