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> → Webhookssekmesinden 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üklendihelm.upgrade— release yükseltildihelm.uninstall— release kaldırıldıvm.start/vm.stop/vm.restart/vm.migratevelero.backup/velero.restoreedge.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
Organizations → <org> → Webhookssekmesi.- + Add webhook.
- 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.
- 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ş:
| Field | Notlar |
|---|---|
| Timestamp | Denemenin ne zaman olduğu |
| Event | operation.completed / operation.failed / test |
| Status code | URL'inden gelen HTTP yanıtı |
| Status | success / failed |
| Attempts | Bu 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
devmode'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
| Belirti | Sebep |
|---|---|
Save WEBHOOK_URL_BLOCKED döndürür | URL private IP, cluster-internal hostname veya metadata endpoint'e işaret ediyor |
Save WEBHOOK_URL_INVALID döndürür | Geçerli bir http(s) URL değil |
| Test 401 fail | Receiver Bearer'dan farklı bir auth mekanizması istiyor |
| Test timeout fail | Receiver > 10 saniye sürdü; tek deneme içinde retry yapmıyoruz |
| Her teslimat fail | Receiver down, veya payload shape'imizi reddediyor. History drawer'ın Status code kolonunu kontrol et. |
Bkz.
- Referans → Hata mesajları
- dtedge backend'inin webhook alt sistemi (concepts page'i) retry queue, dead letter, audit log'u kapsar.