2016-02-03 17 views
11
  1. Trong kubernetes Tôi có thể hiển thị các dịch vụ với service. Điều này là tốt.
  2. Cho phép nói rằng tôi có 1 phiên bản web và 10 phiên bản máy chủ java.
  3. Tôi có một cửa sổ cổng tôi được sử dụng để truy cập vào 10 trường hợp máy chủ java thông qua jconsole được cài đặt trên đó.
  4. Rõ ràng là tôi không hiển thị tất cả các cổng ứng dụng jmx qua dịch vụ kubernetes.

Tùy chọn của tôi ở đây là gì? làm thế nào tôi nên cho phép điều này bên ngoài để kubernetes cụm cửa sổ truy cập cổng vào những máy chủ 10 cổng jmx? Bất kỳ thực hành ở đây?nhiều nút ứng dụng cách hiển thị jmx trong kubernetes?

Trả lời

21

Một lựa chọn khác là chuyển tiếp Cổng JMX từ K8 pod đến máy tính cục bộ của bạn với cổng chuyển tiếp kubectl.

Tôi làm như sau:

1). Thêm tùy chọn JVM sau để ứng dụng của bạn:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote.port=1099 
-Dcom.sun.management.jmxremote.rmi.port=1099 
-Djava.rmi.server.hostname=127.0.0.1 

Phần quan trọng ở đây là:

  • Cảng cùng nên được sử dụng như 'jmxremote.port' và 'jmxremote.rmi.port'. Điều này là cần thiết để chuyển tiếp một cổng duy nhất.

  • 127.0.0.1 phải được chuyển làm tên máy chủ lưu trữ rmi. Điều này là cần thiết cho kết nối JMX để làm việc thông qua cổng chuyển tiếp.

2). Chuyển tiếp cổng JMX (1099) tới máy tính looptionscal của bạn qua kubectl:

kubectl port-forward <your-app-pod> 1099 

3). Mở kết nối jconsole sang cổng cục bộ 1099:

jconsole 127.0.0.1:1099 

Bằng cách này vì làm cho nó có thể để gỡ lỗi bất kỳ pod Java qua JMX mà không cần phải công khai vạch trần JMX qua dịch vụ K8 (mà là tốt hơn từ góc độ an ninh).

+0

Đây là giải thích đơn giản nhất mà tôi đã gặp phải và hoạt động hoàn hảo. Cảm ơn! –

0

Tôi nghĩ một cách là thêm nhãn vào nhóm của bạn bằng một chuỗi duy nhất \ id cho ví dụ pod_name và sử dụng lệnh phơi sáng để tạo dịch vụ mới với công cụ chọn của id duy nhất này.

kubectl label pods <podname> podname=<podname> 
kubectl expose pod <podname> --port=9010 --name=<podname>_jmx 
1

Chúng tôi đã làm điều đó trong sau cách

  1. Thêm một nhãn duy nhất cho mỗi pod. ví dụ: podid = asdw23443
  2. Tạo một dịch vụ mới với bộ chọn podid = asdw23443. Hãy chắc chắn rằng trong dịch vụ bạn tiếp xúc với các cổng jmx trên pod thông qua nodeport hoặc loadbalancer.

Nếu bạn đang lựa chọn nodeport phục vụ, bởi vì bạn là một thực hiện một hoạt động NAT bạn có thể phải từ bỏ sau tranh luận JVM cho mỗi JVM bạn cần phải kết nối thông qua jconsole

-Djava.rmi.server.hostname=<your-ip-address> 
+0

Tôi không chắc là tôi nhận được nó là bạn có một podid cho mỗi phiên bản của nhóm không? vì vậy nếu bạn mở rộng quy mô từ 10 đến 20 thì bạn có quyền truy cập vào mỗi và mọi trường hợp nhóm mà không có bộ cân bằng tải? Tôi muốn truy cập vào một cá thể pod cụ thể. – Jas

+0

Tôi không chắc là tôi nhận được nó là bạn có một podid cho mỗi trường hợp của nhóm? vì vậy nếu bạn mở rộng quy mô từ 10 đến 1000 thì bạn có 1000 dịch vụ? – Jas

+0

Có trong cách tiếp cận này, bạn phải tạo một dịch vụ cho mỗi nhóm. Nếu bạn có 1000 nhóm thì sẽ có 1000 dịch vụ. – Dimuthu

Các vấn đề liên quan