Score:0

ฉันจะกำหนดค่า etcd คลัสเตอร์ให้ทำงานกับ Salt Stack Master ได้อย่างไร

ธง cn

เอกสารราชการ ( https://docs.saltproject.io/en/latest/ref/cache/all/salt.cache.etcd_cache.html#module-salt.cache.etcd_cache ) แสดงการกำหนดค่าตัวอย่างนี้:

etcd.host: 127.0.0.1
etcd.พอร์ต: 2379
etcd.โปรโตคอล: http
etcd.allow_reconnect: จริง
etcd.allow_redirect: เท็จ
etcd.srv_domain: ไม่มี
etcd.read_timeout: 60
etcd.ชื่อผู้ใช้: ไม่มี
etcd.password: ไม่มี
etcd.cert: ไม่มี
etcd.ca_cert: ไม่มี

ในกรณีของฉันโดยเฉพาะ ฉันมีคลัสเตอร์ etcd ที่มีการตรวจสอบสิทธิ์ PKI (ตามใบรับรอง TLS) เอกสารประกอบของโมดูลเกลือไม่ได้ระบุเจาะจงเกี่ยวกับกรณีการใช้งานนั้น มันบอกเพียงว่า:

เอกสารที่เกี่ยวข้องสามารถพบได้ในเอกสาร python-etcd

ในความเป็นจริง "เอกสารที่เกี่ยวข้อง" นั้นคลุมเครือมากที่นี่ https://python-etcd.readthedocs.io/en/latest/#create-a-client-object - ไม่ใช่เอกสารจริงเป็นเพียงรายการตัวอย่างเล็กน้อย:

นำเข้า ฯลฯ

ลูกค้า = etcd.Client() # สิ่งนี้จะสร้างไคลเอนต์กับเซิร์ฟเวอร์ etcd ที่ทำงานบน localhost บนพอร์ต 4001
ลูกค้า = etcd.Client (พอร์ต = 4002)
ลูกค้า = etcd.Client (โฮสต์ = '127.0.0.1', พอร์ต = 4003)
ลูกค้า = etcd.Client(host='127.0.0.1', port=4003, allow_redirect=False) # จะไม่ให้คุณรันคำสั่งที่ละเอียดอ่อนบนเครื่องที่ไม่ใช่ตัวนำ ค่าเริ่มต้นคือ true
ลูกค้า = etcd.Client (
             โฮสต์='127.0.0.1',
             พอร์ต = 4003,
             allow_reconnect=จริง
             โปรโตคอล='https',)

แน่นอนว่าสิ่งนี้จะไม่ทำงานกับคลัสเตอร์ etcd ที่เหมาะสม อย่างไรก็ตาม ซอร์สโค้ดเปิดเผยว่าสามารถระบุรายชื่อโฮสต์ได้:

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

        เริ่มต้นไคลเอนต์
        อาร์กิส:
            โฮสต์ (ผสม):
                           หากเป็นสตริง IP ที่จะเชื่อมต่อ
                           ถ้าทูเพิล ((โฮสต์, พอร์ต), (โฮสต์, พอร์ต), ...)

แต่ฉันไม่มีความคิดว่าจะใส่ทูเพิลของทูเพิลลงในไฟล์ปรับแต่งค่าเกลือได้อย่างไร นี่คือสิ่งที่ฉันได้ลอง:

แคช: etcd
etcd.host: [('salt1.lacinet', 2739), ('salt2.lacinet', 2739)]
etcd.โปรโตคอล: https
etcd.allow_reconnect: จริง
etcd.allow_redirect: เท็จ
etcd.srv_domain: ไม่มี
etcd.read_timeout: 60
etcd.ชื่อผู้ใช้: root
etcd.password: ไม่มี
etcd.cert: ('/etc/salt/etcd/root.key.pem', '/etc/salt/etcd/root.cert.pem')
etcd.ca_cert: '/etc/salt/etcd/ca.cert.pem'

แต่ส่งผลให้เกิดข้อผิดพลาด:

[ข้อผิดพลาด] ไม่พบโฮสต์ etcd จากไม่มี: ไม่มีชื่อการสืบค้น DNS อยู่: _etcd._tcp.None., _etcd._tcp.None.lacinet
[ข้อผิดพลาด ] ไม่สามารถรับรายการเครื่องจาก https://['salt1.lacinet', 'salt2.lacinet']:2379/v2: LocationParseError("ไม่สามารถแยกวิเคราะห์: https://['salt1.lacinet', 'salt2.lacinet']:2379/v2/เครื่อง")
[ERROR ] ข้อผิดพลาดในฟังก์ชัน _pillar:
Traceback (การโทรครั้งล่าสุดล่าสุด):
  ไฟล์ "/usr/lib/python3/dist-packages/etcd/client.py", บรรทัด 296 ในเครื่อง
    ตอบกลับ = self.http.request(
  ไฟล์ "/usr/lib/python3/dist-packages/urllib3/request.py", บรรทัด 75 ในคำขอ
    ส่งคืน self.request_encode_url(
  ไฟล์ "/usr/lib/python3/dist-packages/urllib3/request.py", บรรทัด 97 ใน request_encode_url
    ส่งคืน self.urlopen (เมธอด, url, **extra_kw)
  ไฟล์ "/usr/lib/python3/dist-packages/urllib3/poolmanager.py", บรรทัด 318, ใน urlopen
    คุณ = parse_url(url)
  ไฟล์ "/usr/lib/python3/dist-packages/urllib3/util/url.py", บรรทัด 392 ใน parse_url
    ส่งคืน six.raise_from (LocationParseError (source_url), ไม่มี)
  ไฟล์ "<string>" บรรทัดที่ 3 ใน Raise_from
urllib3.exceptions.LocationParseError: ไม่สามารถแยกวิเคราะห์: https://["('salt1.lacinet'", '2739)', "('salt1.lacinet'", '2739)']:2379/v2/machines

ข้อผิดพลาดนั้นน่าสงสัยมาก:

แยกวิเคราะห์ล้มเหลว: https://["('salt1.lacinet'", '2739)', "('salt1.lacinet'", '2739)']:2379/v2/machines

ฉันสงสัยว่ารายการโฮสต์ไม่ได้รับการยอมรับว่าเป็นรายการหรือทูเพิล แต่เป็นสตริง

จากข้อผิดพลาดนี้ อาจเป็นไปได้ว่าแคชมินเนี่ยนของ Salt-master ไม่รองรับโฮสต์ etcd หลายตัว แต่นั่นจะ "น่าสนใจ" มาก เนื่องจากเหตุผลหลักของการติดตั้ง etcd คือการจัดหาที่เก็บคีย์-ค่า HA สำหรับต้นแบบเกลือหลายตัว จะมีประโยชน์อะไรหากสามารถใช้เซิร์ฟเวอร์ etcd เดียวเท่านั้น

ฉันน่าจะมีปัญหากับการรับรองความถูกต้องตามใบรับรอง TLS เช่นกัน เพราะมันใช้ทูเพิลด้วย (หรือควรตามที่ระบุใน https://github.com/jplana/python-etcd/blob/master/src/etcd/client.py#L90 ):


            ใบรับรอง (ผสม): หากเป็นสตริง ใบรับรองไคลเอ็นต์ ssl ทั้งหมด;
                            ถ้าเป็นทูเพิล ชื่อไฟล์ใบรับรองและคีย์
            ca_cert (str): ใบรับรอง ca หากกดจะเป็นการเปิดใช้งาน
                           การตรวจสอบ

ไม่ชัดเจนว่าจะระบุชื่อไฟล์กี่ไฟล์ในการกำหนดค่าได้อย่างไร ยังไม่ชัดเจนว่าการกำหนดค่า ca_cert เป็นเส้นทางของไฟล์ใบรับรอง หรือเป็นสตริงใบรับรอง PEM เอง ไม่มีการบันทึกสิ่งนี้ไว้ที่ใด (หรือฉันหาไม่พบ)

ใครช่วยบอกฉันหน่อยได้ไหมว่าจะใช้คลัสเตอร์ TLS-auth etcd ที่เหมาะสมกับ salt-master เป็น minion cache ได้อย่างไร เป็นไปได้ไหม?

cn flag
ไม่มีประสบการณ์กับสิ่งนี้ แต่สำหรับโฮสต์หลาย ๆ ตัวควรเป็น (( โฮสต์, พอร์ต ) ( โฮสต์, พอร์ต)) แทนที่จะเป็น [( โฮสต์, พอร์ต) (โฮสต์, พอร์ต)] (https://github.com/jplana/python -etcd/blob/b227f496c038b2b856c4d76c9525b3547e5c8dc4/src/etcd/client.py#L76)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา