在隔离网络中的多k8s集群中的实现JProfiler的自动化映射方案的设计与实现

背景与架构设计 网络中存在的挑战 挑战1:Kubernetes 的每个 Pod 拥有一个独立的 IP 地址。对外部访问则依赖 NodePort、LoadBalancer 或 Ingress,出于安全考虑不可能对每个 Pod 都暴露其 8849 端口 (NodePort) 或者使用 Ingress 配置大量的域名,这样无法连接到单独的某一个 Pod (通过Service)。 挑战2:网络环境是完全隔离的,用户无法通过 Pod IP 直接访问 Pod,所有的用户流量只能通过对应 IDC 的唯一入口进入。 挑战3:出于安全考虑不可能对每一个 Java 服务 (Pod) 在他的工作周期期间所有时间都暴露对应的 Jprofiler 端口,而仅仅想使用时可以连接,用后关闭。 JProfiler网络需求 JProfiler 可以通过加载 JVM 代理(libjprofilerti.so)与远程 GUI 通信,他的实现原理如下: JVM 启动时加载 JProfiler 代理,绑定到一个特定端口(如 8849)。 本地 JProfiler GUI 通过该端口连接到远程 JVM。 代理与 GUI 之间通过 TCP 传输性能数据。 在 Kubernetes 中,JProfiler 代理运行在 Pod 内部,但由于网络隔离和动态 IP,GUI 无法直接连接到 Pod。因此,我们需要一种机制将 JProfiler 的端口动态映射到可访问的外部端点。 需要实现的架构 下图是基于上面提到的问题从而设计的集群架构...

 ·  ·