IP ACL Configuration — Cấu hình IP ACL
Mục lục
Ngoài tham số ACL sẵn có dùng với lệnh lbcli create volume hoặc update volume, còn có thêm tham số IP ACL.
IP ACL cho phép hỗ trợ chế độ truy cập restricted/non-restricted vào một cluster. Ở chế độ restricted (ipacl_explicit_allow), Lightbits cluster sẽ duy trì một danh sách IP được phép cho từng volume, cho phép các client truy cập volume đó. Ở chế độ unrestricted, mọi địa chỉ IP đều có thể được dùng. Cấu hình này chỉ có thể được thiết lập trong quá trình cài đặt.
Lưu ý:
- Tham khảo mục Configuring Global Variables in Ansible trong Lightbits Installation Guide để biết thêm thông tin về flagenable ipacl_explicit_allow.
- Tất cả firewall ở mức server, ngoại trừ iptables, phải được tắt ở chế độ này.Lưu ý: Khi bật chế độ
ipacl_explicit_allow, các quy tắc sau được áp dụng:
- Trong quá trình cài đặt, Lightbits sẽ chặn toàn bộ lưu lượng liên quan đến data (nvme/tcp và các port của discovery service) cũng như toàn bộ lưu lượng quản trị nội bộ (các port replication giữa node, port etcd peer và client, các port gRPC nội bộ của node manager và cluster manager) đến từ những IP nằm ngoài dải IP của các server trong cluster.
- Lưu lượng tới các port quản trị nội bộ chỉ được cho phép với IP của các server thuộc cluster.
- Lưu lượng tới các port liên quan đến data chỉ được cho phép với những IP nằm trong danh sách cho phép (IPACL).
- Các IO client server chỉ có thể kết nối để truy cập những volume mà IP của chúng nằm trong danh sách cho phép (IPACL).
- Các IO client server có thể truy cập tất cả các server trong cluster nếu IP của chúng nằm trong danh sách cho phép (IPACL) của ít nhất một volume.
ipacl_explicit_allowthay thế cho cấu hìnhenable_iptablestrước đây.- Không hỗ trợ nâng cấp từ
enable_iptableslênipacl_explicit_allow.
Bạn có trách nhiệm quản lý quyền truy cập tới các port còn lại cần thiết cho hoạt động đúng đắn của cluster. Xem Lightbits Installation Guide để biết danh sách đầy đủ các port cần thiết.
Có hai API có thể khiến thêm port được mở:
-
Tạo một admin endpoint. Thao tác này thêm một allow rule vào iptables dựa trên địa chỉ IP nguồn và port đích được cung cấp trong API. Ví dụ, có thể dùng để thêm rule cho các server khác được truy cập các port admin (REST, gRPC, Exporter).
-
Tạo (hoặc cập nhật) một volume với flag IP ACL. Các IP được phép sẽ có quyền truy cập các port NVMe/TCP (mặc định: 4420/4421) trên những node đang lưu dữ liệu của volume đó (nhưng không truy cập được các node khác trong cluster), và port của discovery service (8009) trên tất cả các server trong cluster.
Examples — Các ví dụ
Create Endpoint
$ lbcli create admin-endpoint --port=2380 --ips=172.16.123.18
Port IPs
2380 [172.16.123.18]
$ lbcli get admin-endpoint --port=2380
Port IPs
2380 [172.16.123.18]
Update Endpoint
$ lbcli update admin-endpoint --port=2380 --ips=172.16.123.18,172.16.123.45
Port IPs
2380 [172.16.123.18 172.16.123.45]
$ lbcli get admin-endpoint --port=2380
Port IPs
2380 [172.16.123.18 172.16.123.45]
Create Volume
$ lbcli create volume --name=acl3 --acl=vol --size=10gib --replica-count=1 --ip-acl=172.16.123.18
#in case of Muli Tenancy
$ lbcli -J $JWT create volume --size="10 Gib" --name=vol --acl="acl3" --replica-count=1 --project-name=<Project Name> --ip-acl=172.16.123.18
Name UUID State Protection State NSID Size Replicas Compression ACL Rebuild Progress
acl3 5f69c7d3-e303-4179-8400-59fa073c1229 Creating Unknown 0 10 GiB 1 false values:"vol"
$ lbcli get volume --uuid=5f69c7d3-e303-4179-8400-59fa073c1229 -o json
{
"state": "Available",
"protectionState": "FullyProtected",
"replicaCount": 1,
"nodeList": [
"69399d2a-3896-5b37-978a-775f3322279b"
],
"UUID": "5f69c7d3-e303-4179-8400-59fa073c1229",
"nsid": 11,
"acl": {
"values": [
"vol"
]
},
"compression": "false",
"size": "10737418240",
"name": "acl3",
"rebuildProgress": "None",
"statistics": {
"logicalUsedStorage": "0",
"physicalUsedStorage": "0",
"compressionRatio": 0
},
"IPAcl": {
"values": [
"172.16.123.18" ← List of IPs allowed to connect the volume
]
},
"ETag": "1",
"connectedHosts": [
"vol: 172.16.123.18"
],
"sectorSize": 4096,
"sourceSnapshotUUID": "",
"sourceSnapshotName": ""
}
Lưu ý: Flag -J đặt sau lbcli cho biết JWT không được lưu trong file cấu hình của lbcli.
Update Volume
$ lbcli update volume --name=acl3 --ip-acl=172.16.123.18,172.16.123.45
# In this command, the JWT is not stored in the lbcli configuration file:
$ lbcli -J $JWT update volume --project-name=<Project Name> --name acl3 --ip-acl=172.16.123.18,172.16.123.45
Name UUID State Protection State NSID Size Replicas Compression ACL Rebuild Progress
acl3 5f69c7d3-e303-4179-8400-59fa073c1229 Available FullyProtected 11 10 GiB 1 false values:"vol" None
$ lbcli get volume --uuid=5f69c7d3-e303-4179-8400-59fa073c1229 -o json
# In this command, the JWT is not stored in the lbcli configuration file:
$ lbcli -J $JWT get volume --uuid=5f69c7d3-e303-4179-8400-59fa073c1229 --project-name <Project Name> -o json
{
"state": "Available",
"protectionState": "FullyProtected",
"replicaCount": 1,
"nodeList": [
"69399d2a-3896-5b37-978a-775f3322279b"
],
"UUID": "5f69c7d3-e303-4179-8400-59fa073c1229",
"nsid": 11,
"acl": {
"values": [
"vol"
]
},
"compression": "false",
"size": "10737418240",
"name": "acl3",
"rebuildProgress": "None",
"statistics": {
"logicalUsedStorage": "0",
"physicalUsedStorage": "0",
"compressionRatio": 0
},
"IPAcl": {
"values": [
"172.16.123.18",
"172.16.123.45" ← New IP was added
]
},
"ETag": "2",
"connectedHosts": [
"vol: 172.16.123.18",
"vol: 172.16.123.45"
],
"sectorSize": 4096,
"sourceSnapshotUUID": "",
"sourceSnapshotName": ""
}
Lưu ý: Flag -J đặt sau lbcli cho biết JWT không được lưu trong file cấu hình của lbcli.
Nguồn: https://documentation.lightbitslabs.com/lightbits-private-cloud/ip-acl-configuration
Nguồn tham khảo
- IP ACL Configuration — https://documentation.lightbitslabs.com/lightbits-private-cloud/ip-acl-configuration
Ghi chú về nguồn
- URL fetch thành công. Trang thuộc phiên bản 3.20.x, mục Lightbits Administration Guide.
- Cấu trúc heading giữ nguyên 1:1: H1 IP ACL Configuration và một mục
##Examples. - Bản gốc dùng hai khối chú thích liên tiếp — "Notes" (số nhiều, 2 gạch đầu dòng) rồi "Note" (số ít, 7 gạch đầu dòng); bản dịch giữ nguyên hai khối riêng biệt này.
- Trong code block "Create Volume", bản gốc có comment gõ sai
#in case of Muli Tenancy("Muli" thay vì "Multi"); được giữ nguyên 100% theo yêu cầu không sửa code dù một ký tự. Các chú thích mũi tên←bên trong JSON cũng là nội dung của bản gốc và được giữ nguyên.