Puncte:0

Cum pot configura un cluster etcd să funcționeze cu salt stack master?

drapel cn

Documentația oficială ( https://docs.saltproject.io/en/latest/ref/cache/all/salt.cache.etcd_cache.html#module-salt.cache.etcd_cache ) arată acest exemplu de configurare:

etcd.gazdă: 127.0.0.1
etcd.port: 2379
etcd.protocol: http
etcd.allow_reconnect: Adevărat
etcd.allow_redirect: fals
etcd.srv_domain: Nici unul
etcd.timeout_read: 60
etcd.nume utilizator: Nici unul
etcd.parolă: Niciuna
etcd.cert: Niciuna
etcd.ca_cert: Nici unul

În cazul meu particular, am un cluster etcd cu autentificare PKI (bază pe certificat TLS). Documentația modulului de sare nu spune nimic specific despre acel caz de utilizare. Se spune doar asa:

Documente înrudite pot fi găsite în documentația python-etcd.

„Documentația aferentă” este de fapt foarte vagă aici https://python-etcd.readthedocs.io/en/latest/#create-a-client-object - nu este o documentare reală, ci doar o listă de exemple banale:

import etcd

client = etcd.Client() # aceasta va crea un client împotriva serverului etcd care rulează pe localhost pe portul 4001
client = etcd.Client(port=4002)
client = etcd.Client(gazdă='127.0.0.1', port=4003)
client = etcd.Client(host='127.0.0.1', port=4003, allow_redirect=False) # nu vă va permite să rulați comenzi sensibile pe mașini non-leader, implicit este adevărat
client = etcd.Client(
             gazdă='127.0.0.1',
             port=4003,
             allow_reconnect=Adevărat,
             protocol='https',)

Desigur, nimic din toate acestea nu va funcționa cu un cluster etcd adecvat. Cu toate acestea, codul sursă dezvăluie că este posibil să se ofere o listă de gazde:

https://github.com/jplana/python-etcd/blob/master/src/etcd/client.py#L74

        Inițializați clientul.
        Argumente:
            gazdă (mixt):
                           Dacă este un șir, IP la care să vă conectați.
                           Dacă un tuplu ((gazdă, port), (gazdă, port), ...)

Dar nu am idee cum să pun un tuplu de tupluri în fișierul de configurare salt master. Iată ce am încercat:

cache: etcd
etcd.host: [('salt1.lacinet', 2739), ('salt2.lacinet', 2739)]
etcd.protocol: https
etcd.allow_reconnect: Adevărat
etcd.allow_redirect: fals
etcd.srv_domain: Nici unul
etcd.timeout_read: 60
etcd.nume utilizator: root
etcd.parolă: Niciuna
etcd.cert: ('/etc/salt/etcd/root.key.pem', '/etc/salt/etcd/root.cert.pem')
etcd.ca_cert: „/etc/salt/etcd/ca.cert.pem”

Dar rezultă o eroare:

[EROARE ] Nu s-au putut descoperi gazdele etcd de la None: Niciunul dintre numele de interogare DNS nu există: _etcd._tcp.None., _etcd._tcp.None.lacinet.
[EROARE ] Nu s-a putut obține lista de mașini de la https://['salt1.lacinet', 'salt2.lacinet']:2379/v2: LocationParseError("Eșuat la analiza: https://['salt1.lacinet', 'salt2.lacinet']:2379/v2/machines")
[EROARE ] Eroare în funcția _pillar:
Traceback (cel mai recent apel ultimul):
  Fișierul „/usr/lib/python3/dist-packages/etcd/client.py”, linia 296, în mașini
    răspuns = self.http.request(
  Fișierul „/usr/lib/python3/dist-packages/urllib3/request.py”, linia 75, în cerere
    return self.request_encode_url(
  Fișierul „/usr/lib/python3/dist-packages/urllib3/request.py”, linia 97, în request_encode_url
    return self.urlopen(metodă, url, **extra_kw)
  Fișierul „/usr/lib/python3/dist-packages/urllib3/poolmanager.py”, linia 318, în urlopen
    u = parse_url(url)
  Fișierul „/usr/lib/python3/dist-packages/urllib3/util/url.py”, linia 392, în parse_url
    return six.raise_from(LocationParseError(source_url), None)
  Fișierul „<șir>”, linia 3, în raise_from
urllib3.exceptions.LocationParseError: Nu s-a putut analiza: https://["('salt1.lacinet'", '2739)', "('salt1.lacinet'", '2739)']:2379/v2/machines

Eroarea în sine este foarte suspectă:

Nu s-a putut analiza: https://["('salt1.lacinet'", '2739)', "('salt1.lacinet'", '2739)']:2379/v2/machines

Bănuiesc că lista de gazde nu este recunoscută ca listă sau tuplu, ci ca șir.

Având în vedere această eroare, ar putea fi chiar posibil ca memoria cache a minionului salt-master să nu accepte mai multe gazde etcd? Dar asta ar fi foarte „interesant”, deoarece principalul motiv al instalării etcd este acela de a oferi o stocare cheie-valoare HA pentru mai mulți maeștri de sare. Ce rost are dacă poate folosi doar un singur server etcd?

Probabil că voi avea probleme și cu autentificarea bazată pe certificatul TLS, deoarece folosește și un tuplu (sau ar trebui, așa cum este dat în https://github.com/jplana/python-etcd/blob/master/src/etcd/client.py#L90 ):


            cert (mixt): Dacă un șir, întregul certificat de client ssl;
                            dacă este un tuplu, numele fișierelor cert și cheie.
            ca_cert (str): Certificatul ca. Dacă este prezent, se va activa
                           validare.

Nu este clar cum să specificați un tuplu de nume de fișiere în configurație. De asemenea, nu este clar dacă configurația ca_cert este calea unui fișier cert sau este șirul de certificare PEM în sine. Nimic din toate acestea nu este documentat nicăieri (sau pur și simplu nu l-am putut găsi).

Poate cineva să-mi spună, vă rog, cum să folosesc un cluster corect TLS-auth etcd cu salt-master ca cache minion? Este posibil deloc?

drapel cn
zero experiență cu aceasta, dar pentru mai multe gazde ar trebui să fie (( gazdă, port ) ( gazdă, port)) în loc de [( gazdă, port) (gazdă, port)] (https://github.com/jplana/python -etcd/blob/b227f496c038b2b856c4d76c9525b3547e5c8dc4/src/etcd/client.py#L76)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.