在kubernetes集群中无法访问嵌入式ActiveMq。

问题描述 投票:0回答:1

我们正在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
docker kubernetes activemq kubernetes-pod
1个回答
0
投票

你必须公开该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
© www.soinside.com 2019 - 2024. All rights reserved.