В тестовой среде мини-куба у меня есть следующее развертывание / служба (развернутая в ArgoProj, поэтому шаблон немного отличается), определенная для ActiveMQ (версия 5.14.5):
- name: amq-server-d
resource:
action: create
manifest: |
apiVersion: apps/v1
kind: Deployment
metadata:
name: amq
spec:
selector:
matchLabels:
app: amq
track: stable
template:
metadata:
labels:
app: amq
track: stable
spec:
containers:
- image: gms/activemq
imagePullPolicy: Never
name: amq
ports:
- containerPort: 61616
- containerPort: 8161
volumeMounts:
- name: test-data
mountPath: /opt/activemq/data
readOnly: false
- name: test-conf
mountPath: /opt/activemq/conf
readOnly: false
volumes:
- name: test-data
hostPath:
path: /Users/gms/development/nlp/nlpie/data/adapt/amq/data
- name: test-conf
hostPath:
path: /Users/gms/development/nlp/nlpie/data/adapt/amq/conf
- name: amq-server-s
resource:
action: create
manifest: |
apiVersion: v1
kind: Service
metadata:
name: amq
namespace: default
labels:
app: amq
spec:
selector:
app: amq
ports:
- name: test1
protocol: TCP
port: 61616
targetPort: 61616
- name: test2
protocol: TCP
port: 8161
targetPort: 8161
Образ докерапрекрасно работает сам по себе и определяется как:
FROM openjdk:8-jre
ENV ACTIVEMQ_VERSION 5.14.5
ENV ACTIVEMQ apache-activemq-$ACTIVEMQ_VERSION
ENV ACTIVEMQ_TCP=61616 ACTIVEMQ_AMQP=5672 ACTIVEMQ_STOMP=61613 ACTIVEMQ_MQTT=1883 ACTIVEMQ_WS=61614 ACTIVEMQ_UI=8161
ENV ACTIVEMQ_HOME /opt/activemq
RUN set -x && \
curl -s -S https://archive.apache.org/dist/activemq/$ACTIVEMQ_VERSION/$ACTIVEMQ-bin.tar.gz | tar xvz -C /opt && \
ln -s /opt/$ACTIVEMQ $ACTIVEMQ_HOME && \
useradd -r -M -d $ACTIVEMQ_HOME activemq && \
chown -R activemq:activemq /opt/$ACTIVEMQ && \
chown -h activemq:activemq $ACTIVEMQ_HOME
USER activemq
WORKDIR $ACTIVEMQ_HOME
EXPOSE $ACTIVEMQ_TCP $ACTIVEMQ_AMQP $ACTIVEMQ_STOMP $ACTIVEMQ_MQTT $ACTIVEMQ_WS $ACTIVEMQ_UI
CMD ["/bin/sh", "-c", "bin/activemq console"]
Они отлично работают и отображаются в виде служб и развертываний:
D20181472:nlp-adapt-kube gms$ kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
amq ClusterIP 10.111.0.111 <none> 61616/TCP,8161/TCP 2s app=amq
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24h <none>
D20181472:nlp-adapt-kube gms$ kubectl get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
amq 0/1 1 0 33s amq gms/activemq app=amq,track=stable
А внутри кластера я могу получить доступ к службе с помощью:его имя и пространство имен, ala:
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
If you don't see a command prompt, try pressing enter.
dnstools# nslookup amq.default
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: amq.default.svc.cluster.local
Address: 10.111.0.111
Однако, если я попробую curl для доступа к порту протокола tcp 61616 (используется ActiveMQ для удаленных подключений, который, по моему мнению, включен по умолчанию), я получаю времяout:
dnstools# curl amq.default:61616
curl: (7) Failed to connect to amq.default port 61616: Operation timed out
Я протестировал curl
на самом кластере kubernetes и возвращает ответ:
dnstools# curl -k -d 'body=message' https://10.96.0.1:443
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "forbidden: User \"system:anonymous\" cannot post path \"/\"",
"reason": "Forbidden",
"details": {
},
"code": 403
AFAIK, в миникубе не должно быть никаких правил брандмауэраэто должно быть решено для AMQ, поэтому я не совсем уверен, почему это не работает.Я также пытался использовать NodePorts
для службы AMQ, но это не помогло.Любые предложения приветствуются!