Tài liệu chính thức ( https://docs.saltproject.io/en/latest/ref/cache/all/salt.cache.etcd_cache.html#module-salt.cache.etcd_cache ) hiển thị cấu hình ví dụ này:
vvd.host: 127.0.0.1
vvd.port: 2379
etcd.protocol: http
etcd.allow_reconnect: Đúng
etcd.allow_redirect: Sai
etcd.srv_domain: Không có
vvd.read_timeout: 60
etcd.username: Không có
etcd.password: Không có
etcd.cert: Không có
etcd.ca_cert: Không có
Trong trường hợp cụ thể của tôi, tôi có một cụm etcd với xác thực PKI (dựa trên chứng chỉ TLS). Tài liệu mô-đun muối không nói bất kỳ điều gì cụ thể về trường hợp sử dụng đó. Nó chỉ nói thế này:
Có thể tìm thấy các tài liệu liên quan trong tài liệu python-etcd.
"Tài liệu liên quan" trên thực tế rất mơ hồ ở đây https://python-etcd.readthedocs.io/en/latest/#create-a-client-object - nó không phải là một tài liệu thực sự, chỉ là một danh sách các ví dụ tầm thường:
nhập vvd
client = etcd.Client() # điều này sẽ tạo một máy khách chống lại máy chủ etcd chạy trên máy chủ cục bộ trên cổng 4001
khách hàng = etcd.Client (cổng = 4002)
máy khách = etcd.Client(máy chủ='127.0.0.1', cổng=4003)
client = etcd.Client(host='127.0.0.1', port=4003, allow_redirect=False) # sẽ không cho phép bạn chạy các lệnh nhạy cảm trên các máy không phải máy chủ, mặc định là đúng
khách hàng = etcd.Client (
máy chủ = '127.0.0.1',
cổng = 4003,
allow_reconnect=True,
giao thức = 'https',)
Tất nhiên không cái nào trong số này sẽ hoạt động với một cụm etcd thích hợp. Tuy nhiên, mã nguồn tiết lộ rằng có thể đưa ra danh sách các máy chủ:
https://github.com/jplana/python-etcd/blob/master/src/etcd/client.py#L74
Khởi tạo máy khách.
lập luận:
máy chủ (hỗn hợp):
Nếu là một chuỗi, IP để kết nối.
Nếu một bộ ((máy chủ, cổng), (máy chủ, cổng), ...)
Nhưng tôi không biết làm thế nào để đặt một bộ dữ liệu vào tệp cấu hình chính của muối. Đây là những gì tôi đã thử:
bộ đệm: vvd
etcd.host: [('salt1.lacinet', 2739), ('salt2.lacinet', 2739)]
etcd.protocol: https
etcd.allow_reconnect: Đúng
etcd.allow_redirect: Sai
etcd.srv_domain: Không có
vvd.read_timeout: 60
etcd.tên người dùng: root
etcd.password: Không có
etcd.cert: ('/etc/salt/etcd/root.key.pem', '/etc/salt/etcd/root.cert.pem')
etcd.ca_cert: '/etc/salt/etcd/ca.cert.pem'
Nhưng nó dẫn đến một lỗi:
[LỖI ] Không thể khám phá các máy chủ etcd từ Không có: Không có tên truy vấn DNS nào tồn tại: _etcd._tcp.None., _etcd._tcp.None.lacinet.
[LỖI ] Không thể lấy danh sách máy từ https://['salt1.lacinet', 'salt2.lacinet']:2379/v2: LocationParseError("Không thể phân tích cú pháp: https://['salt1.lacinet', 'salt2.lacinet']:2379/v2/machines")
[ERROR ] Lỗi trong chức năng _pillar:
Traceback (cuộc gọi gần đây nhất cuối cùng):
Tệp "/usr/lib/python3/dist-packages/etcd/client.py", dòng 296, trong máy
phản hồi = self.http.request(
Tệp "/usr/lib/python3/dist-packages/urllib3/request.py", dòng 75, theo yêu cầu
tự trả về.request_encode_url(
Tệp "/usr/lib/python3/dist-packages/urllib3/request.py", dòng 97, trong request_encode_url
trả về self.urlopen(phương thức, url, **extra_kw)
Tệp "/usr/lib/python3/dist-packages/urllib3/poolmanager.py", dòng 318, trong urlopen
u = parse_url(url)
Tệp "/usr/lib/python3/dist-packages/urllib3/util/url.py", dòng 392, trong parse_url
trả về six.raise_from(LocationParseError(source_url), Không có)
Tệp "<string>", dòng 3, trong raise_from
urllib3.Exceptions.LocationParseError: Không thể phân tích cú pháp: https://["('salt1.lacinet'", '2739)', "('salt1.lacinet'", '2739)']:2379/v2/machines
Bản thân lỗi này rất đáng ngờ:
Không thể phân tích cú pháp: https://["('salt1.lacinet'", '2739)', "('salt1.lacinet'", '2739)']:2379/v2/machines
Tôi nghi ngờ rằng danh sách Máy chủ lưu trữ không được nhận dạng dưới dạng danh sách hoặc bộ, mà dưới dạng chuỗi.
Do lỗi này, thậm chí có thể bộ nhớ cache minion của salt-master không hỗ trợ nhiều máy chủ etcd? Nhưng điều đó sẽ rất "thú vị", vì lý do chính của việc cài đặt etcd là cung cấp kho lưu trữ khóa-giá trị HA cho nhiều bậc thầy muối. Vấn đề là gì nếu nó chỉ có thể sử dụng một máy chủ etcd duy nhất?
Tôi cũng có thể gặp sự cố với xác thực dựa trên chứng chỉ TLS, bởi vì nó cũng sử dụng một bộ (hoặc nó nên, như được đưa ra trong https://github.com/jplana/python-etcd/blob/master/src/etcd/client.py#L90 ):
chứng chỉ (hỗn hợp): Nếu là một chuỗi, toàn bộ chứng chỉ ứng dụng khách ssl;
nếu là một tuple, tên tệp chứng chỉ và khóa.
ca_cert(str): Chứng chỉ ca. Nếu pressent nó sẽ kích hoạt
Thẩm định.
Không rõ cách chỉ định một bộ tên tệp trong cấu hình. Cũng không rõ liệu cấu hình ca_cert là đường dẫn của tệp chứng chỉ hay chính chuỗi chứng chỉ PEM. Không ai trong số này được ghi lại ở bất cứ đâu (hoặc chỉ là tôi không thể tìm thấy nó).
Ai đó có thể vui lòng cho tôi biết cách sử dụng cụm v.v. TLS-auth thích hợp với salt-master làm bộ đệm minion không? Có thể ở tất cả?