GVKun编程网logo

openjdk k8s port-forward 连接容器 jmx 服务(openjdk docker)

19

最近很多小伙伴都在问openjdkk8sport-forward连接容器jmx服务和openjdkdocker这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展androidx86v

最近很多小伙伴都在问openjdk k8s port-forward 连接容器 jmx 服务openjdk docker这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展android x86 virtualbox port forward、Asp.NET Core Nginx Ocelot ForwardedHeaders X-Forwarded-For、Centos7通过yum安装jdk8(openjdk)、forwardPort Go 语言的端口转发工具等相关知识,下面开始了哦!

本文目录一览:

openjdk k8s port-forward 连接容器 jmx 服务(openjdk docker)

openjdk k8s port-forward 连接容器 jmx 服务(openjdk docker)

jmx 是 java 自带的,如果需要使用我们只需要添加对应的配置即可,以下演示 docker 集成 jmx
使用 kompose 生成 k8s 的部署文件,使用 port-forward 进行连接,所以 java.rmi.server.hostname=localhost

环境准备

参考 github 项目 https://github.com/rongfengliang/openjdk-docker-jmx

  • docker-compose 文件
 
version: "3"
services: 
   app:
     build: ./
     image: dalongrong/java-jmx-openjdk
     ports: 
     - "8080:8080"
     - "30384:30384"
  • dockerfile
FROM openjdk:8u222-jdk
LABEL AUTHOR="dalongrong"
LABEL EMAIL="1141591465@qq.com"
WORKDIR /
COPY webapi-0.0.1-SNAPSHOT.jar /webapi-0.0.1-SNAPSHOT.jar
COPY docker-entrypiont.sh /docker-entrypiont.sh
RUN chmod +x /docker-entrypiont.sh
EXPOSE 30384 8080
ENTRYPOINT [ "/docker-entrypiont.sh" ]
  • docker-entrypiont.sh

    主要是进行 java 启动参数的配置,com.sun.management.jmxremote.local.only=false 参数比较重要

#!/bin/sh
java \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=30384 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.rmi.port=30384 \
-Dcom.sun.management.jmxremote.local.only=false \
-Djava.rmi.server.hostname=localhost \
-jar /webapi-0.0.1-SNAPSHOT.jar
  • 生成 k8s deploy 文件
kompose -f docker-compose.yaml -o k8s
  • 修改 service port 为 nodeport
    需要确保端口与 jmx 一致,不然连接也会有问题
  • 部署
 
kubectl  apply -f ./k8s

port-forward 暴露

kubectl port-forward pod/jmx-demo-142211177-xz2rt 30384:30384

连接服务

  • 启动 jconsole
    jconsole
  • 连接

 

  • 效果

 

说明

以上是一个简单的 jmx k8s 运行,实际上我们也可以通过 prometheus 的 jmx expoter 进行监控也是不错的

参考资料

https://www.jankacik.com/Blog/monitoring-java-application-on-docker-with-jmx/ 
https://github.com/rongfengliang/openjdk-docker-jmx 
https://www.jamasoftware.com/blog/monitoring-java-applications/

android x86 virtualbox port forward

android x86 virtualbox port forward

VBoxManage setextradata "android_x86 v2.3" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP
VBoxManage setextradata "android_x86 v2.3" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 5555
VBoxManage setextradata "android_x86 v2.3" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 5556

Asp.NET Core Nginx Ocelot ForwardedHeaders X-Forwarded-For

Asp.NET Core Nginx Ocelot ForwardedHeaders X-Forwarded-For

ocelot在部署时我使用了nginx作为转发,并配置了https证书,但是发现ocelot不支持Forward host header。 https://ocelot.readthedocs.io/en/latest/introduction/notsupported.html 这时候我就有了个疑问,Forward host header到底时什么含义?于是便有了本文。

nginx等代理服务器在转发时,会使用X-Forwarded-For 请求头。该请求头会记录从请求者ip到层层代理服务器ip的信息。

https://imququ.com/post/x-forwarded-for-header-in-http.html https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For

asp.net core 在使用转发服务器后,官方文档说需要使用中间件设置XForwardedFor与XForwardedProto https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#when-to-use-kestrel-with-a-reverse-proxy

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

app.UseAuthentication();

使用X-Forwarded-For会更新 HttpContext.Connection.RemoteIpAddress 使用X-Forwarded-Proto会更新 HttpContext.Request.Scheme 使用X-Forwarded-Host会更新 HttpContext.Request.Host https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-2.2

我建立了一些测试的webapi来查看效果

        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            var remoteIp = HttpContext.Connection.RemoteIpAddress;
            string ip = remoteIp.MapToIPv4().ToString();
            var scheme = HttpContext.Request.Scheme;
            string sch = scheme.ToString();
            var host = HttpContext.Request.Host;
            string ho = host.ToString();
            return new string[] { ip,sch,ho };
        }          

是否使用中间件,会影响到http和RemoteIPAddress的值是否正确。

而使用了ocelot转发api后,无法读取到host的正确值。ocelot无需添加中间件 ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto 如果添加了,反而会无法获取到正确的remoteip以及scheme

Centos7通过yum安装jdk8(openjdk)

Centos7通过yum安装jdk8(openjdk)

先查看系统是否已有自带的jdk

rpm -qa |grep java

rpm -qa |grep jdk

rpm -qa |grep gcj

如果没有输出信息,则说明系统没有安装。如果有输出信息,则执行下面的命令卸载

rpm -qa | grep java | xargs rpm -e --nodeps

 

列出所有可安装的rpm软件包

yum list java-1.8*

此时会输出一大堆软件包列表。yum可以简单的理解成服务器的软件包管理工具

 

安装

yum install java-1.8.0-openjdk* -y

 

验证是否安装成功

java -version

 

配置环境

cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64

修改/etc/profile并且source /etc/profile

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64
MAVEN_HOME=/usr/local/apache-maven-3.6.3
PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME
export PATH
export CLASSPATH

 

forwardPort Go 语言的端口转发工具

forwardPort Go 语言的端口转发工具

forwardPort 介绍

forwardPort

端口转发/映射工具 forward for port data

编译:

配置好你的GO开发环境,推荐GO 1.7以上;

执行build.dat,会自动编译出linux和windows的执行程序,文件名分别为:“forwardPort”、“forwardPort.exe”

为了方便大家使用,我将已编译好的二进制文件也提供给大家:

Windows-64位:

https://github.com/tavenli/forwardPort/releases/download/1.0/forwardPort- win-64.zip

Linux-64位:

https://github.com/tavenli/forwardPort/releases/download/1.0/forwardPort- linux-64.zip

场景1:

工作中,有时候会碰到A服务器可以访问B服务器,但是你只能访问到A服务器,B服务器限制了只有A服务器能访问它;如果你需要访问B服务器,必须通过A服务器跳一次。

forwardPort工具就是可以让你在A服务器上开启一个端口,当你访问A服务器上的端口时,实际访问的是B服务器的某个端口。

操作步骤:

A服务器IP:10.10.1.100

B服务器IP:10.11.2.20

1、在A服务器上执行:

forwardPort.exe

(注:linux系统执行 ./forwardPort)

2、执行成功后,默认监听8000端口,这时打开浏览器,访问:http://10.10.1.100:8000/ServerSummary
会返回当前程序的统计信息,返回内容为JSON数据。

如果访问不了,请检查A服务器上防火墙是否开启8000端口的访问。

3、开启转发,将A机器上的8010端口转发到B服务器上的3389端口:

http://10.10.1.100:8000/ForwardWork?auth=taven123&status=1&fromAddr=:8010&toAddr=10.11.2.20:3389

4、开启后,您就可以通过 10.10.1.100:8010 端口连接了,此时你实际连接到的是 10.11.2.20 上的 3389

上面只是个例子,你可以随时启用任意端口与任意机器之间的端口映射。

当你使用完毕后,可以立即关闭端口转发,只需要执行如下请求即可:

http://10.10.1.100:8000/ForwardWork?auth=taven123&status=0

执行后,端口转发关闭,端口被释放。

其它说明

windows-64下:

> forwardPort.exe

> forwardPort.exe -auth 123 -restApi 10.10.1.100:9999

linux-64下:

$ ./forwardPort

$ ./forwardPort -auth 123 -restApi 10.10.1.100:9999

参数说明:

auth:rest接口调用时的密码,启动时不带该参数,则默认为:taven123

restApi:rest接口监听的地址,启动时不带该参数,则默认为:0.0.0.0:8000

REST接口参数说明:

/ForwardWork?auth=taven123&status=1&fromAddr=:8010&toAddr=10.11.2.20:3389

auth:密码,默认为taven123

status:如果是开启转发,则为1,如果是关闭转发,则为0

fromAddr:要用来在A机器上监听的一个端口,用来给客户端连接

toAddr:把fromAddr端口的数据转发到哪个IP的端口上

如果是本机内转发,可以这样:

/ForwardWork?auth=taven123&status=1&fromAddr=:8010&toAddr=:22

表示把机器上的8010端口映射到本机的22端口.

forwardPort 官网

http://git.oschina.net/tavenli/forwardPort

今天的关于openjdk k8s port-forward 连接容器 jmx 服务openjdk docker的分享已经结束,谢谢您的关注,如果想了解更多关于android x86 virtualbox port forward、Asp.NET Core Nginx Ocelot ForwardedHeaders X-Forwarded-For、Centos7通过yum安装jdk8(openjdk)、forwardPort Go 语言的端口转发工具的相关知识,请在本站进行查询。

本文标签: