java - Openshift 中 pod 之间的 JMX 连接
问题描述
我正在尝试在 ocp 上运行 jmx。我已经在我的容器中设置了所有必需的参数。创建容器时,我设置了环境变量:
-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
当我尝试连接到我的服务(使用服务 IP 或主机名)时 - 我收到连接被拒绝:
IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: service.namespace-18569.svc
经过几次尝试,我尝试使用 curl -I 检查 JMX 端点。
签入 pod 终端 ( curl -I 127.0.0.1:JMXPORT/Endpoint
) 后,我从 JMX 服务器收到响应。
不幸的是,当我尝试使用curl -I
服务 IP/主机名(在同一个 pod 终端中)时 - 我被拒绝连接。
是否可以使用 IP 服务在不同的 Pod 之间建立 JMX 连接?
编辑:
我的部署配置:
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
creationTimestamp: '2019-02-06T17:11:36Z'
generation: 1
labels:
app: napeOfApp
name: napeOfApp
namespace: nameOfMynamespace
resourceVersion: '202879946'
selfLink: /apis/apps.openshift.io/v1/namespaces/nameOfMynamespace/deploymentconfigs/napeOfApp
uid: 42606226-2a32-11e9-9b9a-02e3ccdc5484
spec:
replicas: 1
revisionHistoryLimit: 3
selector:
deploymentconfig: napeOfApp
strategy:
activeDeadlineSeconds: 21600
resources: {}
rollingParams:
intervalSeconds: 1
maxSurge: 25%
maxUnavailable: 25%
timeoutSeconds: 600
updatePeriodSeconds: 1
type: Rolling
template:
metadata:
creationTimestamp: null
labels:
app: napeOfApp
deploymentconfig: napeOfApp
name: napeOfApp
spec:
containers:
- image: 'my image repo'
imagePullPolicy: IfNotPresent
name: napeOfApp
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 3084 //(JMX PORT)
protocol: TCP
- containerPort: 3104
protocol: TCP
- containerPort: 7005
protocol: TCP
- containerPort: 8443
protocol: TCP
resources:
limits:
cpu: '1'
memory: 3584Mi
requests:
cpu: 500m
memory: 2560Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
test: false
triggers:
- type: ConfigChange
status:
availableReplicas: 1
conditions:
- lastTransitionTime: '2019-02-06T17:11:41Z'
lastUpdateTime: '2019-02-06T17:11:41Z'
message: Deployment config has minimum availability.
status: 'True'
type: Available
- lastTransitionTime: '2019-02-06T17:11:42Z'
lastUpdateTime: '2019-02-06T17:11:42Z'
message: replication controller "napeOfApp" successfully rolled out
reason: NewReplicationControllerAvailable
status: 'True'
type: Progressing
details:
causes:
- type: ConfigChange
message: config change
latestVersion: 1
observedGeneration: 1
readyReplicas: 1
replicas: 1
unavailableReplicas: 0
updatedReplicas: 1
3084 是 JMX 端口。
解决方案
是否可以使用 IP 服务在不同的 Pod 之间建立 JMX 连接?
是的,它应该可以无缝工作,根据DNS 在 K8s 中的工作方式使用服务 IP 地址或服务名称。
看起来你的问题是这样的:
-Djava.rmi.server.hostname=127.0.0.1
这基本上只绑定到127.0.0.1
并且只允许本地连接。您可能想尝试0.0.0.0
允许外部连接。
希望能帮助到你!
推荐阅读
- javascript - JS window.onload 为什么不等待加载
- python - 从 django 模型中获取数据
- reasoning - Grakn 中的错误“规则图不可分层”
- next.js - 有没有办法从 index.tsx 的同一目录将组件导入 index.tsx
- html - CSS:导航栏项目彼此重叠?
- python - 如何在图树中动态插入数据?
- r - 在 R studio 中,将数据写入文件
- python - Python CSV 逻辑
- linux - Sql Server 2019 (Fedora 32) - 消息 22022,级别 16,状态 1,行 0 SQLServerAgent 当前未运行,因此无法通知此操作
- r - 基于值 R Plotly 的红色或绿色阴影中的颜色标记