Keydra’yı dağıtma
Keydra'nın gereksinimleri, yayımlanan üç imajdan hangisini seçeceğiniz ve kurulumu dışarı açmadan önce yapılandırmanız gerekenler.
Gereksinimler#
| Bileşen | Gereksinim |
|---|---|
Java |
Kaynaktan derleme için 21. Yayımlanan imaj kendi çalışma zamanıyla gelir. |
PostgreSQL |
Zorunlu ve alternatifi yok. Keydra kendi verisini burada tutar; uygulama uçtan uca bloklamayan bir yapıdadır ve reaktif bir PostgreSQL sürücüsü kullanır. |
Kapsayıcı motoru |
İmajı çalıştırmak için Podman ya da Docker. Depo Podman ile derlenir; manifestleri Compose dosyası değil, Kubernetes Pod manifestidir. |
Bir hedef |
Keydra’nın çalıştığı yerden erişilebilen en az bir sunucu. Redis, Valkey ya da uyumlu bir türev, bir Aerospike veya bir TiKV. |
Keydra’nın deposu için Redis |
İsteğe bağlı. Yalnızca aynı veritabanına birden fazla örnek bağlanacaksa gerekir. Bu depo hedeflerinizden biri olmamalıdır. |
ClickHouse |
İsteğe bağlı. Yalnızca ölçüm kayıtlarının yeniden başlatmadan sonra da durması gerekiyorsa. |
SMTP aktarıcısı |
İsteğe bağlı. Yalnızca davet ve parola sıfırlama bağlantıları e-postayla gidecekse. |
Node 24.19.0 ve yarn yalnızca ön ucu kaynaktan derlerken gerekir. Yayımlanan imajı çalıştıran bir kurulumda ikisine de ihtiyaç yoktur.
Yayımlanan imajlar#
Keydra, quay.io/keydrahq adresinde üç imaj olarak yayımlanır. Hangisini seçeceğiniz,
arayüzü Keydra’nın mı yoksa başka bir sunucunun mu sunacağına bağlıdır.
| İmaj | İçeriği |
|---|---|
|
Arayüz, API’nin statik kaynakları içine gömülüdür; tek kapsayıcı ikisini birden sunar. Olağan kurulum budur ve depodaki manifestler de bu imajı kullanır. |
|
Yalnızca API. Arayüzü ayrı sunan kurulumlar içindir: bir CDN’den, mevcut bir web sunucusundan ya da kendi pod’undan. |
|
Arayüz ve ihtiyaç duyduğu vekil sunucu. İmaj nginx taşır: statik dosyaları sunar,
|
Arayüz, /api/v1 ve /graphql adreslerini göreli yol olarak çağırır. Onu başka bir
yerdeki API’ye yönlendiren bir ayar bilinçli olarak yoktur: statik bir pakete gömülen mutlak
API adresi, çalışma zamanına ait bir bilgiyi derleme zamanında sabitlemek olur; üstelik
çerezleri çapraz kökene taşır.
Bu yüzden arayüz ile API’nin tek bir adres üzerinden cevap vermesi gerekir. quay.io/keydrahq/keydra-ui tam
olarak bu adres olmak için hazırlanmıştır: arayüzü / altında sunar, /api/v1 ve
/graphql isteklerini — üzerlerindeki WebSocket yükseltmeleriyle birlikte —
KEYDRA_BACKEND’e iletir. Oturum çerezi böylece birinci taraf çerezi olarak kalır ve
`SameSite=Lax beklendiği gibi çalışır.
Elinizde bir vekil sunucu varsa onu bu imajın önüne koyabilirsiniz; ama ikisinin arasına koymayın: yönlendirme zaten yapılmış durumdadır.
İkisini ayrı çalıştırmak için bir nedeniniz yoksa quay.io/keydrahq/keydra imajını kullanın.
Buradaki örneklerde latest kullanılıyor. Kurulumlarda bunun yerine bir sürüm sabitleyin;
aksi hâlde yeniden başlatma, kimsenin planlamadığı bir yükseltmeye dönüşebilir.
Keydra’yı dağıtma#
-
Podman ya da OCI imajı çalıştırabilen başka bir motor.
-
Keydra’nın erişebileceği bir PostgreSQL; ya da aşağıdaki manifestteki kapsayıcı.
-
Sırları oluşturun.
KEYDRA_SECRET_KEY, saklanan bütün kimlik bilgilerini şifreler:printf 'keydra' | podman secret create keydra-db-password - openssl rand -base64 32 | podman secret create keydra-secret-key -Önemli:Önemli`KEYDRA_SECRET_KEY’i kaybetmek, saklanan bütün kimlik bilgilerini kaybetmek demektir; paylaşmak ise hepsini paylaşmak. Diğer sırlarınızı nerede tutuyorsanız orada tutun, depoda değil.
-
İmajı çekin:
podman pull quay.io/keydrahq/keydra:latest -
PostgreSQL ile birlikte çalıştırın:
podman play kube deploy/keydra-prod.yamlManifest yerel olarak derlenmiş bir imajı gösterir. Yayımlanan imajı kullanmak için satırı değiştirin:
- name: keydra image: quay.io/keydrahq/keydra:latest
curl -s http://localhost:8181/q/health/readyArdından http://localhost:8181 adresini açın.
Helm ile Kubernetes’e kurulum#
Chart iki biçimi de kurar: API ile onu çağıran arayüzü tek imajda sunan biçimi ya da ikisini
ayrı çalıştıran biçimi. Başlatamayacağı bir kurulumu kurmaz; aşağıdaki adımlardan ikisi,
yoksa CrashLoopBackOff olarak karşınıza çıkacak reddedişlerdir.
-
Bir Kubernetes kümesi ve Helm 3.
-
Kümenin erişebildiği bir PostgreSQL. Chart bunu kurmaz: orada her bağlantı profili, hesap, yetki ve denetim kaydı durur; bir uygulamanın chart’ına paketlenmiş veritabanı ise kimsenin yedeklemediği ve yükseltmenin yerine yenisini koyduğu bir pod’da çalışan veritabanıdır.
-
Secret’ı oluşturun. Chart anahtarı üretmez ve bu bilinçlidir: üretilmiş bir anahtar bir sonraki yükseltmede yeniden üretilir, örnek de kayıtlı tek bir kimlik bilgisini okuyamadan açılır — üstelik bunu bir başlatma hatası olarak değil, hedef hedef bildirir.
kubectl create secret generic keydra \ --from-literal=secret-key="$(openssl rand -base64 32)" \ --from-literal=database-password='...'Önemli:ÖnemliO anahtarı kaybetmek, kayıtlı bütün kimlik bilgilerini kaybetmek demektir. Paylaşmak da onları paylaşmak demektir.
-
Chart deposunu ekleyin:
helm repo add keydra https://keydrahq.github.io/keydra-helm helm repo updateAynı paket, her şeyi tek bir sicilden çeken kümeler için OCI artefaktı olarak da yayımlanır:
helm install keydra oci://quay.io/keydrahq/charts/keydra --version <sürüm>. -
Kurun:
helm install keydra keydra/keydra \ --set database.url=postgresql://postgres:5432/keydra \ --set existingSecret.name=keydra -
Bir vekil sunucunun arkasında olduğunu söyleyin; Ingress altında her zaman öyledir:
helm upgrade keydra keydra/keydra --reuse-values \ --set proxy.enabled=true \ --set proxy.trusted=10.0.0.0/8 \ --set publicUrl=https://keydra.example.com \ --set ingress.enabled=true \ --set ingress.hosts[0].host=keydra.example.comSöylenmezse Keydra her oturum açmayı ingress denetleyicisinden geliyormuş gibi görür: bir oturum açmayı öncekilerle karşılaştıran denetimler herkesi herkesle karşılaştırmaya başlar ve deneme sınırı bütün kümeyi tek bir ağ sayar. Vekil sunucuları adlandırmak seçimlik değildir; anahtar açıkken kimse adlandırılmamışsa her istemci her adresi iddia edebilir ve chart kurulumu üretmeyi reddeder.
-
helm test keydra, sürüme yalnızca çalışan bir kurulumun cevaplayabileceğini soran bir pod başlatır: hazır olduğunu, arayüzün sunulduğunu ve insanlara verilen adreste/q/metricsadresinin 404 döndüğünü. -
Henüz hiç hesap yoktur. İlk yöneticiyi bir kez oluşturun; o uç, bir yönetici olduğu anda çalışmayı bırakır:
curl -fsS -X POST https://keydra.example.com/api/v1/auth/setup \ -H 'Content-Type: application/json' \ -d '{"username":"siz","password":"..."}'
mode: standalone varsayılandır ve tek imajdır. mode: split, quay.io/keydrahq/keydra-backend ile
quay.io/keydrahq/keydra-ui imajlarını iki Service arkasında iki Deployment olarak kurar. İkincisi, ikisi
farklı ölçekleniyorsa — tek bir statik dosya kümesinin arkasında birden çok API kopyası —
ya da arayüz API’nin bulunmadığı bir yere aitse anlamlıdır.
helm install keydra keydra/keydra --set mode=split ...İmajları siz adlandırmazsınız; chart’ı biçimden seçer. Çünkü bir biçim için doğru olan varsayılan diğeri için yanlıştır ve hepsi bir arada imajın sessizce ayrık bir kuruluma çekilmesi, çalışıyormuş gibi görünürdü.
Operator ile Kubernetes’e kurulum#
Operator, chart’ın oluşturduğu nesnelerin aynısını oluşturur; farkı, bunları Helm’in tuttuğu bir sürümden değil, kümenin sahip olduğu bir kaynaktan üretmesidir. Keydra kurmak söz konusu olduğunda ikisi aynı işi yapar; operator’ü, kurulumun sonrasında da kümece öyle tutulmasını istediğinizde ya da bir hedefin forma yazılan bir şey değil bir kaynak olmasını istediğinizde seçersiniz.
-
Bir Kubernetes kümesi ya da bir OpenShift.
-
Kümenin erişebildiği bir PostgreSQL. Operator bunu kurmaz, chart’ın kurmadığı gerekçeyle: orada her bağlantı profili, hesap, yetki ve denetim kaydı durur; bir uygulamanın yanına kendi getirdiği veritabanı ise kimsenin yedeklemediği veritabanıdır.
-
Operator’ü kurun. OpenShift’te OperatorHub içinde Keydra girdisini bulup oradan kurun; bu adımın altındaki hiçbir şeye gerek kalmaz. Diğer kümelerde:
kubectl create namespace keydra-operator kubectl apply -f https://github.com/keydrahq/keydra-operator/releases/latest/download/crds.yaml kubectl apply -f https://github.com/keydrahq/keydra-operator/releases/latest/download/operator.yamlTek dosya değil iki dosya, çünkü ikisini farklı zamanlarda farklı kişiler uygular: özel kaynak tanımları küme genelindedir ve bir kez girer, yönetici ise birinin yükselttiği bir Deployment’tır.
-
Kurulumun yaşayacağı ad alanında Secret’ı oluşturun. Operator bunu yazmaz ve chart’tan ayrıldığı bu nokta bilinçlidir: özel kaynağa konan bir anahtarı, o ad alanında
get keydradiyebilen herkes okur — Secret okuyabilenlerden daha geniş ve en az düşünülmüş kitle.kubectl create secret generic keydra \ --from-literal=secret-key="$(openssl rand -base64 32)" \ --from-literal=database-password='...'Önemli:ÖnemliO anahtarı kaybetmek, kayıtlı bütün kimlik bilgilerini kaybetmek demektir. Paylaşmak da onları paylaşmak demektir.
-
Kurulumu tarif edip uygulayın:
apiVersion: keydra.io/v1alpha1 kind: Keydra metadata: name: keydra spec: database: url: postgresql://keydra-db:5432/keydra secret: name: keydra route: # <1> enabled: true proxy: # <2> enabled: true trusted: 10.0.0.0/81 OpenShift’te. Diğer kümelerde ingress.enabledileingress.hostskullanın vepublicUrlalanına tarayıcının ulaşacağı adresi yazın: yönlendirme adresi kimlik sağlayıcıyla önceden anlaşılır ve harfi harfine tutmak zorundadır.2 Ingress ya da Route’un ardında her zaman önde bir şey vardır. Kendisine bir şey söylenmediğinde Keydra her oturum açmayı ingress denetleyicisinden geliyormuş gibi görür: bir oturum açmayı öncekilerle karşılaştıran denetimler böylece herkesi herkesle karşılaştırır, deneme sınırı da bütün kümeyi tek ağ sayar. Vekilleri adlandırmak isteğe bağlı değildir — API sunucusu, anahtarı açıp kimseyi adlandırmayan bir kaynağı reddeder.
-
Sonucu kaynağın kendisi söyler, öğrenmek için başka bir şey okumak gerekmez:
$ kubectl get keydra NAME READY REPLICAS URL AGE keydra True 1 https://keydra.apps.example.com 2mBir şey ters gittiği sürece
READYdeğeriFalseolur ve gerekçesikubectl describe keydra keydraçıktısında durur. İlk beklenmesi gereken, Secret’ta eksik olan anahtarı adlandıran birDegradedkoşuludur. -
Henüz hiç hesap yoktur. İlk yöneticiyi, bir tane olduğu anda çalışmayı bırakan uç nokta üzerinden bir kez oluşturun:
curl -fsS -X POST https://keydra.apps.example.com/api/v1/auth/setup \ -H 'Content-Type: application/json' \ -d '{"username":"you","password":"..."}'
Chart’ın yapamadığı kısım budur. Kümede başka bir şeyin oluşturduğu bir sunucu, Keydra’ya onu oluşturan manifest’in kendisiyle devredilir ve aynı silmeyle geri alınır: bir kaynak öyle diyor diye var olan profil, kaynak gittiğinde var olmayı da bırakır.
Bunun için operator’ün oturum açacağı bir hesap gerekir, çünkü Keydra’da makine çağıranı diye bir kavram yoktur: operator tarayıcının açtığı gibi oturum açar ve oturumu saklar. Ona bir kişinin hesabını değil kendi hesabını verin ki denetim kaydı hangi değişikliğin birinin yazması, hangisinin bir kaynağın uygulanması olduğunu söyleyebilsin. Bağlantı profili yazmak yöneticiye ait bir izin olduğundan, hesabın o rolü taşıması gerekir.
kubectl create secret generic keydra-api \
--from-literal=api-username=operator \
--from-literal=api-password='...'Kurulumda adlandırın ve hedefleri beyan edin:
apiVersion: keydra.io/v1alpha1
kind: Keydra
metadata:
name: keydra
spec:
apiAccount:
secretName: keydra-api
# …
---
apiVersion: keydra.io/v1alpha1
kind: KeydraConnection
metadata:
name: orders-cache
spec:
keydraRef: keydra
host: orders-redis
port: 6379
guarded: true
passwordSecret:
name: orders-redis
key: passwordkeydraRef aynı ad alanındaki bir kurulumu adlandırır; ad alanları arası referans bilinçli
olarak mümkün değildir, çünkü kendi ad alanında kaynak oluşturabilen herkesin başkasının
konsoluna hedef eklemesi anlamına gelirdi.
Operator, kendi oluşturmadığı bir profili sahiplenmez. O adda bir hedef Keydra içinde zaten varsa — biri arayüzden eklemişse — kaynak reddedilir; sahiplenip sonra kaynak gittiğinde silmek yerine.
Mevcut bir profili kaynağa çevirmek bu yüzden düzenleme değil bilinçli bir karardır ve bir bedeli vardır: silip yeniden oluşturmak profilin kimliğini değiştirir, kapsamı o bağlantı olan yetkiler de sunucu grubu üyelikleri de o kimliğe bağlıdır. O hedefi görebilen kişiler görememeye başlar.
İkisi aynı adlarla ve aynı etiketlerle aynı nesneleri üretir; geçişi silip yeniden kurmak değil sahiplenmek yapan da budur. Adımlar operator’ün kendi belgelerinde, çünkü önemli olan kısımlar Keydra ile değil Helm ile ilgilidir: sürüme nesnelerini geride bırakması söylenmeli ve chart’ın ürettiği Secret, operator’e gösterilebilecek bir Secret’a kopyalanmalıdır.
Keydra’yı dışarı açmadan önce kimlik doğrulamayı yapılandırma#
Güvenlik denetimi varsayılan olarak açıktır. deploy/keydra-prod.yaml bunu kapalı getirir;
böylece manifest, yalnızca sizin erişebildiğiniz bir makinede hiçbir ayar yapmadan çalışır. Bu
durumda arayüz her sayfada "güvenlik kapalı" uyarısı gösterir: güvenli görünen ama açık olan
bir kurulum, ifşa olmanın en yaygın yoludur.
-
Kullanıcıların nasıl giriş yapacağına karar verin. Her biri tek başına yeterlidir:
-
Yerel hesaplar. Yapılandırma gerektirmez. İlk çalıştırmada yöneticiyi oluşturun, geri kalan kullanıcıları davet edin.
-
Kimlik sağlayıcı. Ortam değişkeniyle değil, Keydra çalışırken arayüzden tanımlanır — bkz. Kimlik sağlayıcıları.
-
-
Manifestten
KEYDRA_SECURITY_ENABLEDsatırını kaldırarak ya datrueyaparak denetimi açın. -
Keydra’ya genel adresini bildirin; sağlayıcı yönlendirmesi bu adrese döner:
KEYDRA_PUBLIC_URL=https://keydra.example.com -
Keydra ters vekil sunucu arkasındaysa bunu belirtin ve istemci adresi konusunda hangi vekillere güvenileceğini yazın:
KEYDRA_BEHIND_PROXY=true KEYDRA_TRUSTED_PROXIES=10.0.0.0/8 -
HTTPS üzerinden sunun. Oturum çerezi üretimde
Secureişaretlidir; düz HTTP üzerinden giden bir oturum çerezi ağda açıkta gider.
Keydra’yı gizli pencerede açın. Arayüz yerine giriş formu ya da sağlayıcı düğmesi görünmeli, hiçbir sayfada "güvenlik kapalı" uyarısı bulunmamalıdır.
KEYDRA_SECURITY_ENABLED=false ayarı, adrese erişebilen herkesi bütün izinlerle içeri alır.
Bunu yalnızca gösterim için ya da yalnızca sizin erişebildiğiniz bir makinede kullanın; dışarı
açık hiçbir kurulumda kullanmayın.
Bir kurulumun ayarlayabileceği her şey#
Aşağıda Keydra’nın okuduğu bütün ortam değişkenleri, ilgili oldukları karara göre gruplanmış hâlde ve paketlenmiş çalışma zamanının başlangıç değerleriyle birlikte listelenir. Varsayılanı ve değeri boş olan ayarlar kapalıdır ya da tanımsızdır.
İki grup diğerlerinden önce okunmalıdır. Zorunlu ayarlar, çünkü Keydra onlar olmadan başlamaz. Güvenlik denetimi, çerezler ve oturumlar, çünkü varsayılanları güvenlidir ve birini kapatmak ince ayar değil karardır.
| Ortam değişkeni | Varsayılan | Açıklama |
|---|---|---|
|
|
Reaktif PostgreSQL adresi; |
|
|
Veritabanı kullanıcısı. |
|
Veritabanı parolası. |
|
|
Saklanan her kimlik bilgisini şifreleyen anahtar — hedef parolaları, tünel anahtarları, sağlayıcı sırları, hedef kimlik bilgileri. 32 rastgele bayt, base64. Varsayılanı yoktur: o olmadan saklanan hiçbir şey okunamaz. |
| Ortam değişkeni | Varsayılan | Açıklama |
|---|---|---|
|
Tarayıcının gördüğü biçimiyle Keydra’nın adresi. Sağlayıcı yönlendirmeleri ve giden postadaki bağlantılar bu adresten üretilir; sürecin bağlandığı adres değil, kullanıcıların gerçekten yazdığı adres olmalıdır. |
|
|
|
|
|
O başlıkları hangi vekillerin ayarlayabileceği; adres ya da CIDR aralığı olarak. Bu olmadan onlara inanmak, herkese inanmak demektir. |
|
|
|
Tarayıcıya uygulatılan içerik güvenliği politikası. Sabit metin yerine bir özellik olması, varlıkları başka yerden sunan bir kurulumun başlığı kapatmak yerine ihtiyaç duyduğu tek yönergeyi genişletebilmesi içindir. Birini genişletmek hepsini yeniden yazmak demektir; asıl nokta da budur: politika ya bütündür ya hiçtir. |
|
|
Kabul edilen en büyük istek gövdesi. Bir anahtar içe aktarımını ve bir yedek geri yüklemesini sınırlayan budur. |
|
|
Her isteğin günlüğe yazılıp yazılmayacağı. Bir istek satırı bir yol taşır ve buradaki bir yol bir anahtarı adlandırabilir. |
| Ortam değişkeni | Varsayılan | Açıklama |
|---|---|---|
|
|
Keydra’nın kimin neyi yapabileceğini uygulayıp uygulamadığı. Kapatmak, adrese erişebilen herkesi bütün izinlerle içeri alır ve her sayfa bunu söyler — güvenli görünen açık bir örnek, insanın ifşa olma biçimidir. |
|
|
Oturum çerezinin Secure olarak işaretlenip işaretlenmediği. Üretimde açık: düz HTTP üzerinden giden bir oturum çerezi, hat üzerindeki bir oturum çerezidir. |
|
|
Bir WebSocket el sıkışmasının, Keydra’nın tanıdığı bir kaynaktan gelmesinin zorunlu olup olmadığı. Bir soket, bir fetch gibi aynı köken politikasının kapsamında değildir; bu, onun yerine geçen kontroldür. |
|
Genel adresin dışında, bir WebSocket’in açılabileceği kaynaklar. Arayüzün başka bir yerden sunulduğu kurulumlar için. |
|
|
|
Art arda gelen giriş hatalarının sayılıp reddedilip reddedilmediği. Sınır, parola özetinden önce yanıtlanır; çünkü Argon2id bilerek yavaştır ve sınırsız deneme, parola tahmin etmenin yanında sunucunun belleğini harcamanın da yoludur. |
|
Varsa bir GeoIP veritabanı. Bir girişin öncekilerle karşılaştırılırken nereden geldiğini söylemek için kullanılır. |
|
|
|
Süresi dolmuş oturum satırlarının ne sıklıkta silindiği. Kimsenin budamadığı bir oturum tablosu, uygulama çalıştığı sürece büyüyen bir tablodur. |
|
|
Davet ve parola sıfırlama bağlantılarının geçerlilik süresi. Süresiz bir bağlantı, adım sayısı fazla bir paroladır. |
|
Hâlâ okunabilen ama artık yazma yapmayan anahtarlar. Anahtar değişimini kesintiden ayıran özellik budur: yeni anahtar yazar, eskiler kendi yazdıklarını çözmeyi sürdürür ve yeniden şifreleme bütün kayıtları kurulum ayaktayken taşır. |
| Ortam değişkeni | Varsayılan | Açıklama |
|---|---|---|
|
|
Birinin yazdığı bir adresin özel bir ağda olup olamayacağı. Genelde evet: iç bir sohbet aktarıcısına giden webhook ve aynı alt ağdaki S3 uyumlu depo olağan durumlardır. Link-local her hâlükârda reddedilir ve ayarı yoktur. |
|
|
Birinin yazdığı bir adresin Keydra’nın çalıştığı makineyi gösterip gösteremeyeceği. Geliştirme dışında kapalı. |
|
Yukarıdaki kurallardan bağımsız olarak izin verilen sunucular. Bir kurulumun erişmek zorunda olduğu tek bir iç adres için kaçış kapağı. |
| Ortam değişkeni | Varsayılan | Açıklama |
|---|---|---|
|
Açılışta yapılandırılan tek bir OIDC sağlayıcının yayıncısı. Desteklenen yol arayüzden eklenen sağlayıcılardır ve bu dördüne ihtiyaç duymaz; bu, henüz giriş yapıp sağlayıcı ekleyecek kimse yokken bir sağlayıcı tanımlayan kurulumlar içindir. |
|
|
|
O sağlayıcıdaki istemci kimliği. |
|
O sağlayıcıdaki istemci sırrı. |
|
|
|
Rollerin belirteç içindeki yeri; bir yol olarak. |
| Ortam değişkeni | Varsayılan | Açıklama |
|---|---|---|
|
Örneğin kendine verdiği ad. Hakkında sayfasında, her günlük satırında ve ürettiği her ölçümde görünür. Ayarlanmadığında kendiliğinden üretilir. |
|
|
|
Ortak önbellek ve örnekler arası bildirim yayını için Keydra’nın kendi Redis adresi. Hedeflerinizden biri olmamalıdır: birinin göz attığı bir sunucuda duran önbellek, birinin toplu silme yaparken boşalttığı önbellek olur. Tek örnekli kurulumlarda boş bırakın. |
|
|
Lider kirasının yenilenmeden önce ne kadar tutulduğu. Yenilemeyi bırakan örnek, kirayı sonraki isteyene kaptırır; dolayısıyla bu aynı zamanda bir çökmenin işi ne kadar kesintiye uğratabileceğidir. |
|
|
Örneğin, lider işlerini üstlenip üstlenmemesi gerektiğini hangi sıklıkta denetlediği. Kirayı kimse tutmuyorsa alır; kaybettiyse zamanlanmış işleri bırakır. |
| Ortam değişkeni | Varsayılan | Açıklama |
|---|---|---|
|
Giden postanın geçtiği SMTP aktarıcısı — davetler, parola sıfırlamaları ve e-posta uyarı gönderimleri. |
|
|
|
Aktarıcı portu. |
|
|
Aktarıcıya TLS ile bağlanılıp bağlanılmayacağı. |
|
Keydra’nın aktarıcıya kimliğini doğrularken kullandığı hesap. |
|
|
Aktarıcı parolası ya da API anahtarı. |
|
|
Giden postanın gönderildiği adres. Çoğu aktarıcı bu olmadan bir mesajı reddeder. |
| Ortam değişkeni | Varsayılan | Açıklama |
|---|---|---|
|
|
Yerel bir yedek hedefinin içine yazdığı dizin. Hedefler dizini buna göreli olarak adlandırır; böylece hiçbir hedef makinedeki rastgele bir yola yönlendirilemez. |
|
|
Okumaların ayrıca yeniden başlatmaya dayanan bir yere yazılıp yazılmayacağı. Varsayılan olarak kapalı: bir kuruluma ikinci bir servis eklemek gerçek bir maliyettir ve bunu istemeyen bir örneğe gerekli olduğu söylenmemelidir. |
|
ClickHouse’un HTTP arabirimi. JDBC sürücüsü yerine HTTP, çünkü sürücü bloklayıcıdır — bu uygulama ise değildir. |
|
|
|
ClickHouse kullanıcısı. |
|
ClickHouse parolası. |
| Ortam değişkeni | Varsayılan | Açıklama |
|---|---|---|
|
OpenTelemetry izlerinin aktarılacağı yer. İzlemeyi açan şey bunun ayarlanmasıdır; ikinci bir bayrak yoktur. |
|
|
|
İnsan okuyabilir biçim yerine konsolda JSON; böylece bir günlük toplayıcı, insan için yazılmış bir düzeni ayrıştırmak zorunda kalmaz. |
Aynı ayarlar, her birinin ayarladığı özellikle birlikte alfabetik olarak Yapılandırma referansında listelenir. Bu sayfa onları verdiğiniz karara göre gruplar; o sayfa "bu nedir" sorusunu yanıtlar.
Eksiksiz bir örnek#
Hiçbir ayar tahmin edilmek zorunda kalmasın diye bütün gruplar bir arada verilmiştir. Çoğu kurulum bunun küçük bir bölümünü kullanır: Zorunlu ayarlar altındaki dört değişken, bir adres ve gerçekten çalıştırdıkları bileşenler.
env:
# --- Zorunlu --------------------------------------------------------------
- name: KEYDRA_DB_URL
value: postgresql://db.internal:5432/keydra
- name: KEYDRA_DB_USERNAME
value: keydra
- name: KEYDRA_DB_PASSWORD
valueFrom: { secretKeyRef: { name: keydra-db-password, key: keydra-db-password } }
# 32 rastgele bayt, base64. Kaybetmek, saklanan bütün kimlik bilgilerini kaybetmektir.
- name: KEYDRA_SECRET_KEY
valueFrom: { secretKeyRef: { name: keydra-secret-key, key: keydra-secret-key } }
# --- Adres ve ters vekil sunucu -------------------------------------------
- name: KEYDRA_PUBLIC_URL
value: https://keydra.example.com
- name: KEYDRA_BEHIND_PROXY
value: "true"
- name: KEYDRA_TRUSTED_PROXIES
value: 10.0.0.0/8
# Yalnızca bir anahtar içe aktarımı ya da bir yedek geri yüklemesi bundan büyükse artırın.
- name: KEYDRA_MAX_BODY_SIZE
value: 25M
# --- Güvenlik denetimi ----------------------------------------------------
# Varsayılan olarak açık. Kapalıysa adrese erişebilen herkesi içeri alır.
- name: KEYDRA_SECURITY_ENABLED
value: "true"
- name: KEYDRA_COOKIE_SECURE
value: "true"
# --- Birden fazla örnek ---------------------------------------------------
- name: KEYDRA_INSTANCE_ID
value: keydra-a
# Keydra'nın kendi Redis'i. Asla hedeflerinizden biri değil.
- name: KEYDRA_STORE_URL
value: redis://store.internal:6379
# --- Giden posta ----------------------------------------------------------
- name: KEYDRA_MAIL_HOST
value: smtp.example.com
- name: KEYDRA_MAIL_PORT
value: "587"
- name: KEYDRA_MAIL_TLS
value: "true"
- name: KEYDRA_MAIL_USERNAME
value: keydra
- name: KEYDRA_MAIL_API_KEY
valueFrom: { secretKeyRef: { name: keydra-mail-key, key: keydra-mail-key } }
- name: KEYDRA_MAIL_FROM
value: keydra@example.com
# --- Ölçüm deposu ---------------------------------------------------------
- name: KEYDRA_CLICKHOUSE_ENABLED
value: "true"
- name: KEYDRA_CLICKHOUSE_URL
value: http://clickhouse.internal:8123
- name: KEYDRA_CLICKHOUSE_USER
value: keydra
- name: KEYDRA_CLICKHOUSE_PASSWORD
valueFrom: { secretKeyRef: { name: keydra-clickhouse, key: keydra-clickhouse } }
# --- Gözlemlenebilirlik ---------------------------------------------------
- name: KEYDRA_OTLP_ENDPOINT
value: http://otel-collector.internal:4317
- name: KEYDRA_JSON_LOGS
value: "true"Yukarıdaki dört valueFrom girdisi süs değildir. Manifeste düz yazılan bir parola; depoya,
dağıtım geçmişine ve manifesti ekrana basan her araca da yazılmış olur. Özellikle
KEYDRA_SECRET_KEY, Keydra’nın tuttuğu bütün kimlik bilgilerini açan tek anahtardır.
Bu sayfanın listelemediği ayarlar#
Keydra bir Quarkus uygulamasıdır. Bu yüzden KEYDRA_ önekli karşılığı olmayan
Quarkus ayarları da kullanılabilir. Dönüşüm kuralı Quarkus’a aittir: özellik adını büyük harfe
çevirin, alfanümerik olmayan karakterleri alt çizgiyle değiştirin. Örneğin
quarkus.http.port için QUARKUS_HTTP_PORT yazılır.
Adında olağandışı karakterler bulunan bir özellik için buna güvenmeden önce eşlemeyi Quarkus sürümünüze karşı doğrulayın.
Portlar ve uç noktalar#
| Adres | Port | Açıklama |
|---|---|---|
|
8181 |
Arayüz ve altındaki her şey. Tek port hem API’yi hem onu çağıran sayfayı sunar. |
|
8181 |
REST API. |
|
8181 |
GraphQL yüzeyi. |
|
8181 |
Sağlık yoklamaları. Manifestler hazır olma için |
|
8181 |
Prometheus ölçümleri. |
|
8181 |
OpenAPI belgesi. |
|
8181 |
API’yi etkileşimli olarak gezme. Yalnızca geliştirme profilinde açıktır. |
| Bileşen | Ana makine portu | Notlar |
|---|---|---|
Arka uç |
8181 |
|
Ön uç geliştirme sunucusu |
9000 |
|
Redis hedefi |
6479 |
|
Valkey hedefi |
6480 |
|
Keydra’nın deposu için Redis |
6481 |
Hedeflerden biri değildir |
PostgreSQL |
5442 |
Keydra’nın kendi veritabanı |
ClickHouse |
8223 |
İsteğe bağlı ölçüm deposu |
Ana makine portları bilinçli olarak varsayılanlardan kaydırılmıştır: makinede zaten bir Redis ya da PostgreSQL çalışıyorsa pod yine de açılır. Pod içinde bileşenler kendi standart portlarını kullanmayı sürdürür.
İmajı kaynaktan derleme#
Bu adım yalnızca Keydra’nın kendisini değiştiriyorsanız gerekir. Kurulumlarda yayımlanan imajları kullanın.
-
Keydra deposunun bir kopyası.
-
Podman.
podman build -t localhost/keydra:dev -f Containerfile .Depodaki Containerfile, tekil imajı üç aşamada üretir: ön uç Node ile derlenir, arka uç
Maven ile derlenir — derlenen ön uç src/main/resources/META-INF/resources altına kopyalanır
— ve son aşamada ikisinin de araçlarını taşımayan bir JRE imajı hazırlanır.
podman run --rm -p 8181:8181 \
-e KEYDRA_DB_URL=postgresql://host.containers.internal:5442/keydra \
-e KEYDRA_DB_USERNAME=keydra \
-e KEYDRA_DB_PASSWORD=keydra \
-e KEYDRA_SECRET_KEY="$(openssl rand -base64 32)" \
localhost/keydra:devİmaj USER keydra tanımlar ve ana makinenin değil kapsayıcının bellek sınırını okur; böylece
sınırlı bir kapsayıcı, kullanamayacağı bir belleğe göre yığın boyutu ayarlamaz. İmaj
derlenirken test çalıştırılmaz: testler kapsayıcı gerektirir, derleme kapsayıcısında ise
kapsayıcı yoktur. Testleri CI çalıştırır.