我们正在java应用中启动一个嵌入式的activeMq服务器,这将在kubernetes pod中运行。这将运行在一个kubernetes pod中。
broker = BrokerFactory.createBroker("broker:(tcp://localhost:41415)?persistent=false");
broker.setBrokerId("ActiveMqBroker" + 1);
broker.setUseJmx(false);
broker.start();
现在我们有一个应用程序在同一个pod中访问它。这工作得很好。
然而,当另一个应用程序从另一个pod使用服务名(如tcp:/service.hostname:41415)访问这个activemq服务器时,它就不能工作了。
我也试过在service.hostname上添加一个连接器,但是它抛出了以下问题 java.net.BindException: Address not available (Bind failed)
.
broker.addConnector("tcp://service.hostname:41415");
有什么办法可以解决吗?
编辑:我的pod部署+service yaml看起来是这样的。
我的pod部署+service yaml看起来是这样的
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
app: activemq
spec:
replicas: 1
selector:
matchLabels:
app: activemq
template:
metadata:
labels:
app: activemq
spec:
containers:
- name: activemq
image: <myimage>
ports:
- containerPort: 41415
apiVersion: v1
kind: Service
metadata:
name: service.hostname
spec:
selector:
app: activemq
ports:
- protocol: TCP
port: 41415
targetPort: 41415
你必须公开该pod的端口,这样其他服务才能访问它。
请参考 https:/kubernetes.iodocsconceptsservices-networkingconnect-applications-service。
前
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
selector:
matchLabels:
app: hello
tier: backend
track: stable
replicas: 7
template:
metadata:
labels:
app: hello
tier: backend
track: stable
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80