无法访问 Kubernetes 中的 Jolokia HTTP 端点

Can't access Jolokia HTTP endpoint in Kubernetes

我在 Kubernetes 中有一个超级简单的 Java Kubernetes Tomcat 应用程序 运行ning,我在 minikube 上使用 JVM Jolokia 代理 运行ning 对其进行了检测。我正在尝试配置我的 Kubernetes 部署,以便我可以访问容器外部的 Jolokia 端点。当我尝试从我的 minikube IP 上的容器外部访问位于 http://127.0.0.1/jolokia/version 的端点时,我收到连接被拒绝的消息。

我已经通过 CATALINA_OPTS 变量设置了 Jolokia 代理并将其设置为 运行 端口 8778 并在我的 Dockerfile 中公开了 8778。我已经登录到容器中,并且可以确认只要我在容器中就可以访问 Jolokia 代理。

FROM tomcat:8.0-alpine

ADD sample.war /usr/local/tomcat/webapps/
#ADD jolokia.war /usr/local/tomcat/webapps/

RUN mkdir /home/jolokia/
ADD jolokia-jvm-1.7.1.jar /home/jolokia/javaagent.jar
ENV CATALINA_OPTS="$CATALINA_OPTS -javaagent:/home/jolokia/javaagent.jar=port=8778"
RUN apk --no-cache add curl
EXPOSE 8080
EXPOSE 8778
CMD ["catalina.sh", "run"]

接下来,在我的 Kube 部署中,我指定设置一个节点端口以将 8778 映射到端口 30087;当我提取我的 minikube IP 并通过 http://minikube-ip:30087/jolokia/version 访问它时,我一直收到连接被拒绝的消息。这是我的部署:

--- 
apiVersion: v1
kind: Service
metadata: 
  labels: 
    app: sample-tomcat
  name: sample-tomcat
spec: 
  type: NodePort
  ports:
    - name: tomcat-port
      port: 8080
      nodePort: 30088
    - name: jolokia-port
      port: 8778
      nodePort: 30087
  selector: 
    app: sample-tomcat
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-tomcat
  labels:
    app: sample-tomcat
spec:
  selector:
    matchLabels:
      app: sample-tomcat
  replicas: 1
  template:
    metadata:
      labels:
        app: sample-tomcat
    spec:
      containers:
      - name: sample-tomcat
        image: <redacted>/sampleapp:latest
        ports:
        - containerPort: 8080
        - containerPort: 8778

Jolokia 代理在我的容器内工作,但我如何在容器外访问它?

我需要将 Jolokia 代理主机设置为 0.0.0.0,因为它没有在 CATALINA_OPTS 变量中使用正确的 IP。

ENV CATALINA_OPTS="$CATALINA_OPTS javaagent:/home/jolokia/javaagent.jar=port=8778,host=0.0.0.0"