Đặt API EKS sau VPN: thứ tự các thao tác
Bật endpoint riêng, chứng minh kubectl đã đến được nó, rồi đóng endpoint công khai. Một runbook theo từng bước với các lệnh và kiểm tra giữa mỗi bước.
Phiên bản nguy hiểm của thay đổi này là một lệnh duy nhất lật endpoint và khóa tất cả quản trị viên cùng lúc. Phiên bản an toàn giữ cả hai đường mở, chứng minh đường riêng hoạt động từ VPN, và chỉ sau đó mới ngừng endpoint công khai. Giả định có một cụm hiện hữu, một đường hầm đã được phê duyệt vào VPC của nó và một kubeconfig đã hoạt động; công việc là truy cập riêng vào API Kubernetes, không phải các nút riêng và không phải một mô hình quyền mới. Mỗi bước dưới đây có một phép kiểm tra mà bạn có thể thất bại một cách an toàn.
1. Kiểm kê endpoint và giữ một đường quay lại
Ghi lại trạng thái hiện tại trước khi thay đổi, bao gồm danh sách CIDR công khai được phép và nhóm bảo mật của cụm. Đó là hai thứ bạn sẽ so sánh khi có gì đó ngừng hoạt động, và danh sách được phép cũng là đường hoàn tác của bạn nếu tuyến riêng hóa ra sai.
aws eks describe-cluster --region REGION --name CLUSTER \
--query 'cluster.{endpoint:endpoint,public:resourcesVpcConfig.endpointPublicAccess,private:resourcesVpcConfig.endpointPrivateAccess,cidrs:resourcesVpcConfig.publicAccessCidrs}'
REGION và CLUSTER ở đây là chỗ giữ chỗ. Hãy chú ý cờ riêng đang đọc gì, vì một cụm được tạo với truy cập riêng đã bật sẵn cần bước đầu tiên khác với cụm chưa từng có. Giữ mở ít nhất một đường quản trị đã được phê duyệt trong suốt quá trình chuyển đổi; một VPN phụ thuộc vào việc cùng cụm đó có thể truy cập được không phải là đường phục hồi.
2. Bật truy cập riêng khi đường mạng đã sẵn sàng
Bật cờ là nửa dễ dàng. Đường hầm cần một tuyến đến các địa chỉ riêng của endpoint, và nhóm bảo mật của cụm cần TCP 443 từ nguồn mà VPN thực sự trình bày. Một liên kết Client VPN, một cổng site-to-site và một VPC được peer đều có thể trình bày các địa chỉ nguồn khác nhau, vì vậy hãy dùng mô hình bạn đã triển khai thay vì một dải riêng chung.
aws eks update-cluster-config --region REGION --name CLUSTER \
--resources-vpc-config endpointPublicAccess=true,endpointPrivateAccess=true
aws eks describe-update --region REGION --name CLUSTER --update-id UPDATE_ID
Cập nhật là bất đồng bộ. Hỏi id cập nhật cho đến khi nó báo thành công thay vì chờ một số giây cố định và giả định. Hãy để yên lưu lượng của các nút và mặt phẳng điều khiển trong khi làm việc này: thay toàn bộ nhóm bảo mật của cụm bằng một quy tắc cho máy tính xách tay của bạn là cách một mặt phẳng dữ liệu đang hoạt động trở thành sự cố thứ hai.
Tài liệu về các endpoint EKS đáng đọc trọn một lần, vì nó nói rằng truy cập chỉ riêng tư có thể đến từ VPC hoặc từ một mạng được kết nối. Câu đó là toàn bộ lý do vì sao cuộc di chuyển này khả thi, và cũng là lý do vì sao bước tiếp theo tồn tại.
3. Chứng minh máy trạm đã dùng đường riêng
Khi cả hai endpoint đều bật, một kubectl get ns thành công không chứng minh gì về việc cái nào đã trả lời. Phân giải tên máy chủ của endpoint và kiểm tra xem địa chỉ bạn nhận được thuộc dải riêng hay dải công khai. Nếu mạng được kết nối của bạn không nhận được góc nhìn riêng qua DNS, lệnh sẽ thành công qua endpoint công khai và bạn sẽ ngừng đường công khai dựa trên bằng chứng sai. Đây là cách phổ biến nhất khiến cuộc di chuyển này đi sai, và nó trông giống hệt thành công.
nslookup HASH.gr7.REGION.eks.amazonaws.com
kubectl cluster-info
kubectl get ns --request-timeout=10s
Giữ nguyên tên máy chủ và việc xác thực chứng chỉ. Thay bằng IP riêng trong kubeconfig và bỏ qua xác minh TLS không phải là cuộc di chuyển bạn đã mô tả trong hồ sơ thay đổi, và nó sẽ lại thất bại ngay khi endpoint xoay.
4. Ngừng truy cập công khai một cách có chủ đích
Sau khi đường riêng đã được chứng minh và quy trình phục hồi được phê duyệt, hãy đóng endpoint công khai. Đây là thay đổi thực chứ không phải bản xem trước, nên hãy chạy nó trên tài khoản và cài đặt mà bạn thực sự nhắm tới.
aws eks update-cluster-config --region REGION --name CLUSTER \
--resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true
Ở chế độ chỉ riêng tư, tên DNS công khai phân giải thành địa chỉ riêng của endpoint từ bên trong VPC, nên phân giải và khả năng tiếp cận không còn là một. Mọi thứ dựa vào địa chỉ công khai, kể cả trình chạy CI hoặc máy tính xách tay ở mạng khác, giờ cần đường vào riêng.
5. Giữ chính sách mạng và chính sách danh tính tách biệt
Danh sách CIDR truy cập công khai chỉ điều khiển endpoint công khai. Nó không hạn chế endpoint riêng, vốn được giới hạn bởi nhóm bảo mật của cụm và chính sách mạng được kết nối. Nếu bạn giữ endpoint công khai, danh sách được phép của nó phải khớp với lưu lượng ra công khai mà khách hàng API và các nút của bạn thực sự dùng; địa chỉ nhóm VPN hiếm khi là nguồn đó.
Không điều nào trong số này thay đổi IAM hay Kubernetes RBAC. Cài đặt endpoint là một hành động quản trị, và người dùng thông thường không nên nhận quyền nới lỏng ranh giới chỉ để đến được API. Ghi trạng thái cuối, ngày và đường phục hồi vào runbook, rồi kiểm tra đường phục hồi một lần khi vẫn còn dễ.