Ana içeriğe geç

Org webhook'ları yapılandır

Downstream sistemlerin (Slack, custom backend, monitoring) uzun süren operasyonlar tamamlandığında veya başarısız olduğunda haber alması için organizasyonunuzun webhook receiver'ını bağlayın. Organizations → <org> → Webhooks sekmesinden ayarlanır. Yalnızca org admin.

Ne teslim edilir​

Webhook'lar bu org için tamamlanan veya başarısız her async operasyonda fırlar:

  • helm.install — marketplace paketi bir edge'e yüklendi
  • helm.upgrade — release yükseltildi
  • helm.uninstall — release kaldırıldı
  • vm.start / vm.stop / vm.restart / vm.migrate
  • velero.backup / velero.restore
  • edge.discover — kubeconfig-driven edge import
  • … ve gelecekteki her async operasyon

Her teslimat URL'ne JSON POST'tur:

{
"event": "operation.completed", // veya "operation.failed"
"operation_id": 12345,
"type": "helm.install",
"status": "completed",
"org_id": "org-uuid",
"user_id": "tetikleyen-kullanıcı-uuid",
"username": "alice@example.com",
"error": "", // failed'da dolar
"payload": { ... }, // orijinal request body
"result": { ... }, // execution result (sadece completed)
"timestamp": "2026-05-13T12:34:56Z"
}

Webhook'ta Bearer token yapılandırılırsa her POST Authorization: Bearer <token> taşır. Receiver'lar payload'u kabul etmeden önce doğrulamalı.

Adımlar​

Webhook ekle​

  1. Organizations → <org> → Webhooks sekmesi.
  2. + Add webhook.
  3. Doldur:
    • Name — insan etiketi, listede görünür (örn. "Slack ops channel", "Custom CRM").
    • URL — https://senin-receiver/dtedge-events. dtedge install'undan public internete erişilebilir olmalı (SSRF guard private IP'leri, cluster-internal hostname'leri, metadata endpoint'lerini reddeder).
    • Bearer token (opsiyonel) — her teslimde Authorization: Bearer <token> eklenir. AES şifreli olarak saklanır. Önerilir.
    • Active — satırı kaybetmeden teslimatları duraklatmak için kapatın.
  4. Save.

Webhook'u test et​

Save sonrası satırın actions menüsünde Test var. Bu örnek payload yollar:

{
"event": "test",
"operation_id": 0,
"type": "test",
"status": "test",
"org_id": "<senin-org-id'in>",
"timestamp": "<şimdi>"
}

Şunları doğrulamak için kullanın:

  • URL'iniz dtedge'den erişilebilir
  • Bearer token (varsa) doğru gönderiliyor
  • Receiver 2xx dönüyor (başka herhangi bir şey fail sayılır)

Yanıt status'u toast'ta görünür.

Teslimat geçmişini gör​

Her webhook satırının bir History drawer'ı var. Her giriş:

FieldNotlar
TimestampDenemenin ne zaman olduğu
Eventoperation.completed / operation.failed / test
Status codeURL'inden gelen HTTP yanıtı
Statussuccess / failed
AttemptsBu satırın final state'ine inmeden önce kaç deneme (1 = ilk seferde başarılı)

Başarısız teslimatı retry et​

status: failed ve retry'ları tükenmiş satırlar için actions menüsünde Retry var. Payload'u taze bir teslimat task'ı olarak yeniden kuyruğa atar. Kullanım:

  • Receiver'ınız orijinal pencerede down'dı
  • Receiver'da bir bug'ı fix ettiniz ve kaçırılan event'leri replay etmek istiyorsunuz

Retry semantiği​

Tek bir webhook teslimatı 5 retry denemesi + exponential backoff:

Deneme 1: anında
Deneme 2: ~1 dk sonra
Deneme 3: ~2 dk
Deneme 4: ~4 dk
Deneme 5: ~16 dk

Beşi de fail ederse (2xx hiç dönmezse) teslimat failed olarak işaretlenir ve geçmişte kalır. Receiver "bu event için down" olarak değerlendirilir — aynı webhook için sonraki event'ler bağımsız denenir, bir teslimat kaçırmak stream'i bozmaz.

2xx dönen bir receiver payload'u atsa bile başarı sayılır. Yanıt gövdesini parse etmeye çalışmıyoruz.

URL kısıtlamaları​

Save handler reddeder:

  • Cluster-internal hostname'ler (*.svc.cluster.local, .internal)
  • Private IP literal'lar (10.0.0.0/8, 192.168.0.0/16, vb.)
  • Loopback (127.0.0.0/8)
  • Metadata IP'leri (169.254.169.254, vb.)
  • Non-HTTPS URL'ler production'da (HTTP yalnızca dev mode'da)

DNS rebinding dial-time'da resolved IP yeniden kontrol edilerek defeat edilir; private IP'ye resolve eden public hostname save'de değil teslim'de yakalanır.

Bu kısıtlamalar SSRF'i kapatır — kötü niyetli (veya compromise olmuş) bir org admin internal servisleri probe etmek için webhook kullanamaz.

Yaygın hatalar​

BelirtiSebep
Save WEBHOOK_URL_BLOCKED döndürürURL private IP, cluster-internal hostname veya metadata endpoint'e işaret ediyor
Save WEBHOOK_URL_INVALID döndürürGeçerli bir http(s) URL değil
Test 401 failReceiver Bearer'dan farklı bir auth mekanizması istiyor
Test timeout failReceiver > 10 saniye sürdü; tek deneme içinde retry yapmıyoruz
Her teslimat failReceiver down, veya payload shape'imizi reddediyor. History drawer'ın Status code kolonunu kontrol et.

Bkz.​