Bằng cách sử dụng dịch vụ Metadata của Akamai, bạn có thể tự động cấu hình Compute Instances mới của mình thông qua cloud-init. Hướng dẫn này hướng dẫn bạn cách xây dựng tệp cloud-config (để sử dụng với cloud-init) và triển khai Compute Instance bằng cấu hình đó. Hướng dẫn này bao gồm một loạt các tùy chọn được đề xuất để khởi tạo và bảo mật Compute Instance. Các cấu hình này song song với các bước trong hướng dẫn của chúng tôi về Thiết lập và bảo mật Compute Instance . Về cuối hướng dẫn, bạn có thể xem Tệp Cloud-Config hoàn chỉnh cũng như các bước về cách Triển khai Instance với Dữ liệu người dùng .
Cloud-init là gì?
Cloud-init là phương pháp chuẩn công nghiệp để tự động hóa khởi tạo phiên bản đám mây, hỗ trợ trên nhiều bản phân phối và nền tảng. Cloud-init quản lý khởi tạo bằng cách kết hợp siêu dữ liệu phiên bản và tập lệnh cấu hình (dữ liệu người dùng) để tự động hóa quy trình thiết lập máy chủ mới.
Dịch vụ Metadata của Akamai cung cấp API để cloud-init sử dụng, cung cấp dữ liệu người dùng và phiên bản có liên quan để khởi tạo máy chủ của bạn. Khi phiên bản mới của bạn khởi động, cloud-init bắt đầu chạy cục bộ, truy cập siêu dữ liệu và tự động cấu hình hệ thống của bạn cho phù hợp.
Tính khả dụng của siêu dữ liệu: Dịch vụ Metadata của Akamai hiện khả dụng tại một số trung tâm dữ liệu. Sử dụng Metadata để tự động hóa cấu hình hệ thống bằng cách thêm lệnh hoặc tập lệnh khi triển khai Compute Instances. Dữ liệu người dùng này sau đó có thể được cloud-init, một công cụ khởi tạo hệ thống tiêu chuẩn công nghiệp, sử dụng hoặc truy cập trực tiếp bằng API Metadata. Để biết hướng dẫn sử dụng dịch vụ Metadata và danh sách các vùng và bản phân phối được hỗ trợ, hãy tham khảo tài liệu của chúng tôi
Tạo một tập tin Cloud-Config
Cloud-init sử dụng siêu dữ liệu phiên bản từ máy chủ siêu dữ liệu của Akamai. Điều này cung cấp cho cloud-init thông tin liên quan về Compute Instance. Từ đó, cloud-init sẽ suy ra các bước khởi tạo cụ thể từ dữ liệu người dùng được cung cấp , dưới dạng các tập lệnh cloud-config .
Các tập lệnh Cloud-config sử dụng định dạng YAML khai báo để xác định cấu hình và các bước khác mà cloud-init cần để khởi tạo phiên bản mới. Tìm hiểu thêm về các tập lệnh cloud-config trong hướng dẫn của chúng tôi về Sử dụng tệp Cloud-Config để cấu hình máy chủ .
Khi tạo Akamai Compute Instance, bạn có thể thêm cloud-config thông qua Cloud Manager, Linode CLI hoặc Linode API khi triển khai instance. Tham khảo hướng dẫn Metadata của chúng tôi để biết chi tiết về thời điểm và cách thêm dữ liệu người dùng cloud-config .
Để bắt đầu, hãy tạo một tệp cloud-config ban đầu để thiết kế khởi tạo máy chủ mong muốn của bạn. Các ví dụ sau đây đặt tên tệp là cloud-config.yaml
. Tất cả các tệp cloud-config đều bắt đầu bằng dòng sau:
#cloud-config
Từ đó, bạn cần điền vào cloud-config với các tùy chọn cụ thể phù hợp với nhu cầu của bạn đối với máy chủ. Thực hiện theo các bước trong hướng dẫn này để xây dựng tệp của bạn hoặc bỏ qua đến cuối hướng dẫn để xem tệp Cloud-Config đã hoàn thành .
Cập nhật hệ thống của bạn
Cloud-config bao gồm một mô-đun để xử lý các bản cập nhật hệ thống bằng hai khóa: package_update
và package_upgrade
. Bao gồm cả hai khóa này với các giá trị của true
đảm bảo rằng các bản cập nhật và nâng cấp gói được chạy như một phần của quá trình khởi tạo.
package_update: true
package_upgrade: true
Phần hướng dẫn cài đặt phần mềm bổ sung cần thiết cung cấp thêm tài nguyên để làm việc với các gói trong cloud-config.
Đặt tên máy chủ và múi giờ
Cloud-config có nhiều tùy chọn để thiết lập thông tin chi tiết về máy chủ. Phần này áp dụng hai trong số các tùy chọn đó, cung cấp cho máy chủ của bạn thông tin chi tiết được đề xuất bằng cách thiết lập múi giờ và tên máy chủ.
Khóa timezone
cung cấp phương pháp đơn giản để thiết lập múi giờ của máy chủ. Nó lấy bất kỳ múi giờ hợp lệ nào cho hệ thống của bạn làm đối số. Thông thường, bạn có thể tìm thấy chúng bằng cách sử dụng timedatectl list-timezones
hoặc bằng cách điều hướng các đường dẫn trong /usr/share/zoneinfo
.
timezone: 'US/Central'
Khóa này hostname
thuận tiện gán tên máy chủ cho phiên bản của bạn. Trong ví dụ này, cloud-init khởi tạo máy chủ bằng tên máy chủ examplehost
:
hostname: examplehost
Ghi chú: Khóa Cloud-config hostname
không sửa đổi /etc/hosts
tệp theo mặc định. Điều đó cho phép bạn kiểm soát tên máy chủ của máy chủ theo cách thông thường là sửa đổi tệp /etc/hosts
sau khi khởi tạo.Ngoài ra, bạn có thể để cloud-init quản lý toàn bộ /etc/hosts
tệp bằng cách đặt khóa manage_etc_hosts
thành true
. Trên mỗi lần khởi động, cloud-init đảm bảo rằng nội dung của /etc/hosts
khớp với nội dung của /etc/cloud/templates/hosts.tmpl
.
Tìm hiểu thêm trong tài liệu tham khảo mô-đun của cloud-init về Update Etc Hosts .
Thêm tài khoản người dùng có giới hạn
Phiên bản của bạn phải có ít nhất một tài khoản người dùng bị giới hạn để ngăn chặn quyền truy cập root từ xa và các rủi ro bảo mật liên quan. Khóa Cloud-config users
có thể xác định một hoặc nhiều người dùng mới cho hệ thống của bạn, bao gồm các tính năng như sudo
quyền truy cập.
Ví dụ, bên dưới là cấu hình thông thường để khởi tạo người dùng có sudo
quyền truy cập hạn chế. Thiết lập cũng bao gồm người dùng mặc định, được khuyến nghị.
users:
- default
- name: example-user
groups:
- sudo
sudo:
- ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
Tuy nhiên, ví dụ này không đầy đủ vì người dùng không có mật khẩu hoặc khóa SSH. Bạn có thể tạo mật khẩu bằng passwd
tùy chọn này, nhưng điều này không được khuyến khích. Thay vào đó, bạn nên thiết lập khóa SSH cho người dùng, như được hiển thị trong phần tiếp theo.
Để biết thêm thông tin về cách tạo và quản lý người dùng bằng cloud-init, hãy tham khảo hướng dẫn Sử dụng Cloud-Init để quản lý người dùng trên máy chủ mới của chúng tôi . Hướng dẫn bao gồm thêm thông tin về cách thiết lập mật khẩu người dùng, nếu bạn cần.
Thêm Khóa SSH vào Tài khoản Người dùng Giới hạn của Bạn
Thay vì sử dụng mật khẩu để truy cập, cách tiếp cận an toàn hơn là thiết lập người dùng hoặc người dùng bị giới hạn của bạn bằng xác thực khóa SSH. Nếu bạn chưa có cặp khóa SSH, hãy lấy một cặp bằng cách làm theo phần có liên quan trong hướng dẫn của chúng tôi về cách sử dụng Xác thực khóa công khai SSH .
Khi bạn có cặp khóa SSH, bạn có thể thêm khóa công khai SSH vào người dùng được xác định trong cloud-config bằng tùy ssh_authorized_keys
chọn. Tùy chọn này chấp nhận danh sách khóa công khai SSH để cấp quyền truy cập cho người dùng này.
users:
- default
- name: example-user
groups:
- sudo
sudo:
- ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh_authorized_keys:
- <SSH_PUBLIC_KEY>
Làm cứng SSH
Để tăng tính bảo mật của các kết nối SSH vào Compute Instance của bạn, bạn thường nên tắt xác thực mật khẩu và đăng nhập root qua SSH. Theo cách này, quyền truy cập bị hạn chế đối với người dùng và kết nối được xác thực bằng cặp khóa SSH.
users
Theo mặc định, thiết lập cloud-config lock_passwd: true
sẽ tự động vô hiệu hóa xác thực mật khẩu. Bạn có thể tìm hiểu thêm về thiết lập người dùng và quản lý các tính năng như vậy trong hướng dẫn Sử dụng Cloud-Init để quản lý người dùng trên máy chủ mới của chúng tôi .
Để vô hiệu hóa đăng nhập root, bạn cần sửa đổi tệp cấu hình SSH. Cloud-config không có tùy chọn trực tiếp cho việc này, nhưng bạn có thể sử dụng runcmd
khóa đa năng của nó để tự động hóa các lệnh cần thiết. Tìm hiểu thêm về runcmd
tùy chọn trong hướng dẫn của chúng tôi Sử dụng Cloud-Init để chạy lệnh và tập lệnh Bash khi khởi động lần đầu .
Ví dụ bên dưới xóa bất kỳ PermitRootLogin
cấu hình hiện có nào và thêm cấu hình mới vô hiệu hóa PermitRootLogin
. Lệnh cuối cùng khởi động lại sshd
dịch vụ để các thay đổi có hiệu lực.
runcmd:
- sed -i '/PermitRootLogin/d' /etc/ssh/sshd_config
- echo "PermitRootLogin no" >> /etc/ssh/sshd_config
- systemctl restart sshd
Ghi chú: Ví dụ trên giả định hệ thống của bạn sử dụng systemctl
để quản lý dịch vụ SSH. Mặc dù trường hợp này xảy ra với các phiên bản mới nhất của các bản phân phối phổ biến nhất, nhưng không phải tất cả các bản phân phối đều như vậy. Bạn có thể cần sửa đổi các lệnh trên tùy thuộc vào cách hệ thống của bạn quản lý dịch vụ SSH. Ví dụ, các hệ thống như CentOS 6, Debian 7 và Ubuntu 14.04 sử dụng service
thay vì systemctl
. Vì vậy, bạn sẽ cần thay thế systemctl
lệnh trên bằng lệnh sau:
service sshd restart
Cài đặt bất kỳ phần mềm bổ sung nào cần thiết
Với khóa cloud-config packages
, bạn có thể tự động hóa việc cài đặt và quản lý phần mềm như một phần của quá trình khởi tạo máy chủ. Để biết thông tin đầy đủ về các tính năng quản lý gói của cloud-init và các ví dụ về cách sử dụng, hãy xem hướng dẫn của chúng tôi Sử dụng Cloud-Init để cài đặt và cập nhật phần mềm trên máy chủ mới .
Như một minh họa cơ bản, đoạn trích dưới đây cho thấy cách cài đặt một bộ phần mềm trong quá trình khởi tạo phiên bản. Ví dụ cài đặt phần mềm cho ngăn xếp web LEMP (NGINX, MySQL và PHP) một thiết lập phổ biến cho các ứng dụng web. Bạn có thể tìm hiểu thêm về ngăn xếp LEMP trong hướng dẫn của chúng tôi về cách cài đặt ngăn xếp LEMP .
packages:
- mysql-server
- nginx
- php
Ghi chú: Các gói phần mềm có tên khác nhau tùy thuộc vào bản phân phối bạn đang sử dụng. Tham khảo kho lưu trữ gói của bản phân phối để xác định tên gói cho phần mềm bạn muốn cài đặt.
Tập tin Cloud-Config hoàn chỉnh
Sau đây là một ví dụ hoàn chỉnh về tệp cloud-config, tóm tắt tất cả các tùy chọn khởi tạo được đề cập trong hướng dẫn này. Bạn có thể sử dụng tệp này làm cơ sở để khởi tạo Compute Instance của riêng mình. Ví dụ, hãy xóa phần này packages
và tùy chỉnh thông tin chi tiết về người dùng và máy chủ bị giới hạn, và bạn sẽ có một tập lệnh theo hướng dẫn Thiết lập và bảo mật Compute Instance của chúng tôi . Hãy thoải mái thêm các tính năng khác để tinh chỉnh phiên bản theo nhu cầu của bạn.
#cloud-config
# Configure a limited user
users:
- default
- name: example-user
groups:
- sudo
sudo:
- ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh_authorized_keys:
- "SSH_PUBLIC_KEY"
# Perform System Updates
package_update: true
package_upgrade: true
# Configure server details
timezone: 'US/Central'
hostname: examplehost
# Harden SSH access
runcmd:
- sed -i '/PermitRootLogin/d' /etc/ssh/sshd_config
- echo "PermitRootLogin no" >> /etc/ssh/sshd_config
- systemctl restart sshd
# Install additional software packages
packages:
- nginx
- mysql-server
- php
Triển khai một phiên bản với dữ liệu người dùng
Có ba cách để triển khai Compute Instance mới bằng tập lệnh khởi tạo cloud-config của bạn. Các tùy chọn này được tóm tắt bên dưới, với các liên kết đến hướng dẫn triển khai có liên quan. Để biết thêm thông tin về triển khai cloud-init, hãy xem hướng dẫn Tổng quan về dịch vụ siêu dữ liệu của chúng tôi .
Cloud Manager : Bạn có thể cấu hình và triển khai các phiên bản mới một cách thuận tiện bằng trình duyệt web. Làm theo hướng dẫn Tạo phiên bản tính toán của chúng tôi để triển khai phiên bản mới. Hướng dẫn bao gồm một phần về cách Thêm dữ liệu người dùng , hiển thị nơi bạn có thể nhập nội dung cloud-config của mình.
Linode CLI : Công cụ dòng lệnh cung cấp lệnh để tạo một Compute Instance mới và lệnh đó có thể sử dụng --metdata.user_data
tùy chọn với tập lệnh cloud-config của bạn. Để tìm hiểu thêm về cách sử dụng Linode CLI, hãy xem hướng dẫn Bắt đầu với Linode CLI và Lệnh Linode CLI cho Compute Instance của chúng tôi .Sau đây là một tập hợp các lệnh ví dụ để triển khai một phiên bản từ tệp cloud-config. Ví dụ này giả định rằng bạn đã thiết lập công cụ CLI Linode và cloud-config của bạn được lưu trữ như cloud-config.yaml
trong thư mục hiện tại. Xem lại hướng dẫn được liên kết ở trên để biết thêm về các tùy chọn khác được sử dụng trong lệnh ví dụ này.Lệnh CLI yêu cầu cloud-config được mã hóa thành chuỗi base64, bạn có thể thực hiện bằng lệnh cat cloud-config.yaml | base64 -w 0
. Lệnh đầu tiên bên dưới thực hiện việc này và gán giá trị cho biến shell để thuận tiện.
cloudconfigvar="$(cat cloud-config.yaml | base64 -w 0)"
linode-cli linodes create \
--label cloud-init-example \
--region us-iad \
--type g6-nanode-1 \
--image linode/ubuntu22.04 \
--root_pass EXAMPLE_ROOT_PASSWORD \
--metadata.user_data "$cloudconfigvar"
API Linode : Trong instances/
điểm cuối của API, bạn có quyền truy cập vào metadata.user_data
tùy chọn để nhập cloud-config. Sử dụng tùy chọn này, bạn có thể khởi tạo một Compute Instance mới trong một POST
yêu cầu thuận tiện. Tìm hiểu thêm về API Linode trong tài liệu của chúng tôi về API Linode và tài liệu API Linode Instances .
Với tính linh hoạt là một trong những lợi thế chính của nó, có nhiều cách để sử dụng API Linode để triển khai máy chủ. Các bước dưới đây cho thấy một cách tiếp cận đơn giản chỉ sử dụng dòng lệnh. Ví dụ này cũng dễ dàng thích ứng với các ngữ cảnh khác.
1.Tạo tệp payload. Đây là cách tiếp cận thuận tiện cho POST
dữ liệu của yêu cầu, vì nó giúp dữ liệu dễ tạo và tái sử dụng hơn. Bạn có thể tạo tệp bằng trình soạn thảo văn bản ưa thích của mình, nhưng ví dụ này sử dụng >
lệnh để thực hiện việc đó.
cat > cloud-init-example-deployment.json <<'EOF'
{
"label": "cloud-init-example",
"region": "us-iad",
"type": "g6-nanode-1",
"image": "linode/ubuntu22.04",
"root_pass": "EXAMPLE_ROOT_PASSWORD",
"metadata": {
"user_data": "<INSERT_CLOUD_CONFIG>"
}
}
EOF
2.Chèn cloud-config dưới dạng metadata.user_data
. API, giống như CLI, yêu cầu cloud-config phải được mã hóa dưới dạng chuỗi base64. Dưới đây, điều đó được thực hiện bằng lệnh cat cloud-config.yaml | base64 -w 0
, và giá trị được gán cho một biến shell để thuận tiện.
cloudconfigvar="$(cat cloud-config.yaml | base64 -w 0)"
sed -i "s,<INSERT_CLOUD_CONFIG>,$cloudconfigvar," cloud-init-example-deployment.json
Ngoài ra, bạn có thể sao chép chuỗi base64, mở tệp và dán chuỗi vào trường user_data
.
3.Gửi POST
yêu cầu đến instances
điểm cuối API. Bao gồm mã thông báo truy cập cá nhân API Linode của bạn (được đề cập trong hướng dẫn được liên kết ở trên) làm Authorization: Bearer
tiêu đề.
curl -H "Content-Type: application/json" \
-H "Authorization: Bearer API_ACCESS_TOKEN" \
-X POST \
-d @cloud-init-example-deployment.json \
https://api.linode.com/v4/linode/instances
Nguồn: https://www.linode.com/docs/guides/configure-and-secure-servers-with-cloud-init/