如何在Kubernetes安全Ingress后配置WildFly内嵌的ActiveMQ Artemis?
问题解决:WildFly内嵌ActiveMQ Artemis通过K8s Ingress安全连接JMS
核心问题
Kubernetes Ingress启用TLS后,客户端remote+https和REST访问正常,但从WildFly JNDI lookup获取的JMS连接工厂无法建立安全连接。手动配置客户端时添加sslEnabled=true参数即可正常工作,需在WildFly端配置让导出的连接工厂自动携带该参数。
解决方案:修改WildFly配置
在standalone.xml的messaging-activemq子系统中,为http-connector添加sslEnabled参数,同时确认套接字绑定端口为443:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:16.0"> <server name="default"> <security enabled="false"/> <http-connector name="http-connector" socket-binding="http-remote-jms" endpoint="http-acceptor"> <!-- 添加参数告知客户端启用SSL --> <param name="sslEnabled" value="true"/> </http-connector> <http-acceptor name="http-acceptor" http-listener="default"/> <connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector"/> </server> </subsystem>
同时确认socket-binding-group中的http-remote-jms端口设置为443:
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <!-- 其他绑定配置... --> <socket-binding name="http-remote-jms" port="443"/> </socket-binding-group>
原理说明
- WildFly导出的
RemoteConnectionFactory会将http-connector上的配置参数传递给客户端,客户端lookup连接工厂时会自动获取sslEnabled=true配置,无需手动编码设置。 - 无需将
http-acceptor改为https-acceptor:Ingress与WildFly之间保持明文连接,WildFly本身不需要配置TLS证书,仅需告知客户端通过SSL连接Ingress即可。
验证
修改配置后重启WildFly,客户端使用原代码lookup连接工厂并创建连接:
final TopicConnectionFactory connectionFactory = (TopicConnectionFactory)context.lookup(aName); connectionFactory.createTopicConnection();
此时连接应能正常建立,客户端与Ingress之间为安全连接,Ingress与WildFly之间保持明文通信。
内容的提问来源于stack exchange,提问作者Mariusz
相关产品推荐
相关产品推荐

