Bir etcd cluster'ının key'lerinden proxy kurun

etcd'den proxy'ler

etcd key'leri yazan bir deploy işi, kendi proxy tanımını da taşıyabilir. r3v3rs3 bir önekin altındaki key'leri okur ve proxy'leri yeniden başlatmadan, WebUI'de tek tıklama yapmadan kurar. Değişen bir key, onun proxy'sini yaklaşık bir saniye içinde günceller.

Başlangıç rehberindeki bir port gerekir. Bu rehber web adlı bir HTTP portu kullanır. Sağlayıcı hiçbir zaman port açmaz, yalnız var olan bir portun adını kullanır.

Adım 1: Sağlayıcıyı açın

Ayarlar sayfasında etcd Servis Keşfi alanlarını doldurun veya config.toml dosyasını düzenleyin:

[discovery.etcd]
enabled = true
endpoints = ["http://10.0.0.1:2379", "http://10.0.0.2:2379"]
username = "r3v3rs3"
password = "<password>"
prefix = "r3v3rs3"

Bir bağlantı başarısız olursa r3v3rs3 bir sonraki adrese bağlanır. etcd authentication kullanıyorsanız önek için salt okunur bir kullanıcı oluşturun:

$ etcdctl role add r3v3rs3-reader
$ etcdctl role grant-permission r3v3rs3-reader --prefix=true read r3v3rs3/
$ etcdctl user add r3v3rs3
$ etcdctl user grant-role r3v3rs3 r3v3rs3-reader

Sağlayıcının durumu proxy listesinde ve GET /api/discovery yanıtında görünür:

$ curl -s -b cookies.txt http://localhost:46492/api/discovery
[{"provider":"etcd","state":"running","proxies":0,"updated_at":1789647725}]

connecting, ilk okumanın bitmediği anlamına gelir. running, sağlayıcının değişiklikleri izlediği anlamına gelir. error, okuyamadığı anlamına gelir; son okumanın proxy'leri etkin kalır.

Ayar değişikliği yalnız sağlayıcıyı yeniden başlatır, r3v3rs3 yeniden başlamaz.

Adım 2: Proxy'yi yazın

Önekin altındaki her key bir etikettir; . yerine / kullanılır:

$ etcdctl put r3v3rs3/http/etcdapp/ports web
$ etcdctl put r3v3rs3/http/etcdapp/vhosts etcd.example.com
$ etcdctl put r3v3rs3/http/etcdapp/routes/0/servers/0/url http://10.0.0.9:8080/

Yaklaşık bir saniye içinde proxy listesinde yeni bir proxy belirir:

$ curl -s -b cookies.txt http://localhost:46492/api/proxies | jq -c '.[] | {id, name, source}'
{"id":"cfr-kpm","name":"etcdapp","source":{"provider":"etcd","resource":"http/etcdapp"}}

Key set'i ports, vhosts ve bir sunucu URL'i ayarlar. Key adları, yönetim API'sinin proxy modelinin alanlarıdır; tam liste için Etiketler bölümüne bakın.

r3v3rs3 önekin altındaki her proxy'yi okur. Bu yüzden key set'i r3v3rs3.enable gerektirmez. Key'in adresi yoktur; bu yüzden port ve scheme kullanılamaz, sunucu URL'ini yazın. Bir key'in parçası . içeremez; böyle bir key sorun sayılır.

Watch stream her değişikliği raporlar. Sunucu URL'ini değiştirin, proxy yaklaşık bir saniye içinde güncellenir:

$ etcdctl put r3v3rs3/http/etcdapp/routes/0/servers/0/url http://10.0.0.10:8080/

etcd'nin password'ü yönetim API'sinden geri dönmez. Kayıtlı bir password varsa GET /api/config yanıtında password_set: true döner. password alanı olmayan bir PUT /api/config isteği kayıtlı password'ü korur. Boş string password'ü siler. config.toml password'ü düz metin olarak saklar; bu yüzden yapılandırma dizinini yalnız r3v3rs3 kullanıcısı okuyabilmelidir.

Adım 3: Sorunları okuyun

Proxy olmayan bir tanım sorun sayılır. Proxy listesi ve GET /api/discovery, kaynağı ve nedeni bildirir:

$ etcdctl put r3v3rs3/http/badapp/ports nosuchport
$ etcdctl put r3v3rs3/http/badapp/vhosts bad.example.com
{"provider":"etcd","state":"running","proxies":1,
 "issues":[{"resource":"r3v3rs3","message":"http.badapp: missing field `routes`"}]}

Eksik alanı ekleyin; mesaj bu kez bir sonraki sorunu bildirir:

{"issues":[{"resource":"r3v3rs3/http/badapp","message":"http.badapp: port not found: nosuchport"}]}

Her değişiklikten sonra sorunları okuyun. Sorunu olan bir proxy eklenmez ve tanımın yanlış olduğunu başka hiçbir şey bildirmez.

Adım 4: Yapamayacaklarınızı bilin

Keşfedilen bir proxy salt okunurdur:

$ curl -s -b cookies.txt -X DELETE http://localhost:46492/api/proxies/cfr-kpm
{"message":"proxy is managed by service discovery and cannot be changed: cfr-kpm","error":{"message":"proxy_read_only","id":"cfr-kpm"}}

WebUI, proxy'yi kaynağıyla ve düzenleme eylemleri olmadan gösterir. Değiştirmek için key'i değiştirin.

Referans

Sonraki adımlar