Chúng tôi đang gặp sự cố khi kết nối với các ứng dụng Java đang chạy trong cụm EC2 của Amazon. Chúng tôi chắc chắn đã cho phép cả "cổng JMX" (thường là cổng đăng ký RMI) và cổng máy chủ (hầu hết công việc) vào nhóm bảo mật cho các trường hợp được đề cập. Jconsole kết nối nhưng dường như treo và không bao giờ hiển thị bất kỳ thông tin nào.Cách kết nối với các cá thể Java chạy trên EC2 bằng cách sử dụng JMX
Chúng tôi đang chạy java của chúng tôi với một cái gì đó như sau:
java -server -jar foo.jar other parameters here > java.log 2>&1
Chúng tôi đã cố gắng:
- Telnets đến các cổng kết nối nhưng không có thông tin được hiển thị.
- Chúng tôi có thể chạy
jconsole
trên bản thân bản thân bằng cách sử dụng từ xa X11 trên ssh và nó kết nối và hiển thị thông tin. Vì vậy, JRE là xuất nội bộ. - Mở tất cả các cổng trong nhóm bảo mật. Weeee.
- Sử dụng
tcpdump
để đảm bảo lưu lượng truy cập không đi đến các cổng khác. - Mô phỏng nó cục bộ. Chúng tôi luôn có thể kết nối với JRE địa phương của chúng tôi hoặc những người đang chạy ở nơi khác trên mạng của chúng tôi bằng cách sử dụng cùng các thông số ứng dụng.
java -version
kết quả đầu ra:
OpenJDK Runtime Environment (IcedTea6 1.11.5) (amazon-53.1.11.5.47.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Là một sang một bên, chúng ta đang sử dụng gói của tôi Simple JMX cho phép chúng ta thiết lập cả RMI registry và máy chủ cổng mà thường bán ngẫu nhiên được lựa chọn bởi các RMI đăng ký. Bạn cũng có thể ép buộc điều này với một cái gì đó giống như JMX URI sau đây:
service:jmx:rmi://localhost:" + serverPort + "/jndi/rmi://:" + registryPort + "/jmxrmi"
Những ngày này chúng tôi sử dụng cùng một cổng cho cả máy chủ và đăng ký. Trong quá khứ, chúng tôi đã sử dụng X
làm cổng đăng ký và X+1
cho cổng máy chủ để làm cho các quy tắc nhóm bảo mật trở nên dễ dàng. Bạn kết nối với cổng đăng ký trong jconsole
hoặc bất kỳ ứng dụng khách JMX nào bạn đang sử dụng.
Bạn có thể phát hành cuộc gọi DescribeInstances để xác định thẻ nào áp dụng cho trường hợp của bạn nếu bạn thực sự cần (ví dụ: thông qua các tiện ích dòng lệnh EC2), nhưng thực hành tốt hơn là truyền thông tin cấu hình cho một cá thể thông qua dữ liệu người dùng. – willglynn
Cảm ơn @willglynn. Tôi đã hy vọng nhận được các thẻ _without_ phải thêm các khóa truy cập/bí mật của tôi vào cá thể của tôi. Vâng, bây giờ chúng tôi sử dụng UserData nhưng tôi muốn nó là loại khóa 'key = value' để các ops không mắc lỗi đánh máy. – Gray
Có một cơ chế để tự động tạo và phân phối thông tin đăng nhập AWS trên cùng một kênh siêu dữ liệu mẫu: xem [Vai trò IAM cho các trường hợp EC2] (http://aws.typepad.com/aws/2012/06/iam-roles-for-ec2 -instances-simplified-secure-access-to-aws-service-apis-from-ec2.html). Bạn có thể tạo một vai trò hạn chế truy cập vào EC2 DescribeInstances, cho phép bạn tự động hóa mọi thứ mà không cần phải phát điên từ việc quản lý thông tin đăng nhập. – willglynn