Tim, I also think the binding of bootstrap.xml is the culpit here since I did a test of port-forwarding to both node port service and pod of my a sample web app on the exact same cluster and namespace and it works just fine. I opened a bug on artemiscloud github project because i think it maybe useful for other working on POC and need a quick way to check the broker.
Thai Le On Wed, Aug 25, 2021 at 12:10 AM Tim Bain <tb...@alumni.duke.edu> wrote: > Thai, > > The fact that kubectl port-forward doesn't work with even a NodePort > service (which has a TCP socket open on every node, so the easy way for it > to do port forwarding would be to just open a TCP connection to that port) > makes me suspect that there's something wrong with kubectl. If that's > something you're up for pursuing via a bug on the Kubernetes GitHub > project, it might help avoid problems for someone else in the future and/or > result in a future fix that would allow you to use this workflow in the > future. > > With that said, I do think that the fact that Artemis isn't bound to > 0.0.0.0 means it's not 100% conclusive that kubectl is to blame here, so if > you'd have the appetite to try getting that config swapped, that might also > yield value. I'm not sure who writes/maintains Artemis Cloud, but it's not > me and the lack of a response from anyone else on this list makes it clear > to me that those people aren't here. If there's a GitHub project that > accepts bugs, it might be worth raising one there about the bind IP, to see > what support you can get from the authors. Alternatively, if you just > wanted to try swapping out the IP, maybe one option would be to either > modify the K8s pod/deployment definition to provide an init-container that > does the config file manipulation before handing off to the main container > that runs the web console? Without knowing how that pod/deployment is > defined, I'm speculating on whether that would work, but it's at least a > possibility if you wanted to pursue testing with Artemis bound to all IPs. > > And although I think all of that trying-things-out stuff is important and > worth doing, I do still think that an ingress is probably the right > long-term solution for actual production use, so I'm supportive of your > statement that you're going to investigate that option. > > Tim > > On Mon, Aug 23, 2021 at 2:59 PM Thai Le <lnthai2...@gmail.com> wrote: > > > Thank you Tim, > > > > After I changed the kubernetes services that expose 8161 from ClsusterIP > to > > NodePort, i setup port forward to the exposed port (8161) but i am not > able > > to reach the console, here is the config and the cmd i used: > > apiVersion: v1 > > kind: Service > > metadata: > > creationTimestamp: "2021-08-23T15:32:37Z" > > labels: > > ActiveMQArtemis: ex-aao > > application: ex-aao-app > > name: ex-aao-wconsj-1-svc > > namespace: myproject > > ownerReferences: > > - apiVersion: broker.amq.io/v2alpha5 > > blockOwnerDeletion: true > > controller: true > > kind: ActiveMQArtemis > > name: ex-aao > > uid: d35e1dd0-37ed-4b8e-8db4-cd7081d3502f > > resourceVersion: "323731" > > uid: f4866b76-6af8-4196-9d68-f90d535eb3dc > > spec: > > clusterIP: 10.107.150.161 > > clusterIPs: > > - 10.107.150.161 > > externalTrafficPolicy: Cluster > > ipFamilies: > > - IPv4 > > ipFamilyPolicy: SingleStack > > ports: > > - name: wconsj-1 > > nodePort: 32061 > > port: 8161 > > protocol: TCP > > targetPort: 8161 > > publishNotReadyAddresses: true > > selector: > > ActiveMQArtemis: ex-aao > > application: ex-aao-app > > statefulset.kubernetes.io/pod-name: ex-aao-ss-1 > > sessionAffinity: None > > type: NodePort > > status: > > loadBalancer: > > ingress: > > - hostname: localhost > > > > Forward cmd: > > kubectl port-forward pod/ex-aao-ss-0 8161:8161 -n myproject > > > > Per your suggestion, I attempted to bind the web service to 0.0.0.0 but i > > have not yet found where the code swap out he default values > > in > > > /tmp/remote_source/app/src/yacfg/profiles/artemis/2.18.0/_modules/bootstrap_xml/* > > of the init image > quay.io/artemiscloud/activemq-artemis-broker-init:0.2.6. > > I gonna look into ingress next > > > > Thai Le > > > > On Mon, Aug 23, 2021 at 12:59 AM Tim Bain <tb...@alumni.duke.edu> wrote: > > > > > Thanks for determining that port-forwarding directly to the pods > doesn't > > > work either. Would you mind checking whether port-forwarding to a > > NodePort > > > service succeeds? I'm glad to hear that a NodePort service works as > > > expected when accessed directly, but my goal in asking you to test that > > > configuration was to try to see whether the problem is with the kubectl > > > port-forward process, so doing that final step of the test would help > > > assess that. > > > > > > I've got two possible theories for what's going on. One is that kubectl > > > port-forward doesn't work correctly (or that you're doing something > wrong > > > when invoking it, though everything you've shown so far looks fine), in > > > which case Artemis is fine but your attempt to use kubectl port-forward > > is > > > where this is breaking. If that's the case, you'll want to take that up > > > with the Kubernetes community (e.g. file a bug in the Kubernetes GitHub > > > project <https://github.com/kubernetes/kubernetes>). The other > > possibility > > > is that kubectl port-forward is working fine, but the Artemis process > is > > > binding to the TCP port in a way that doesn't result in it accepting > > > incoming connections from whatever network path gets used for kubectl > > > port-forward even though it's fine when accessed via the Kubernetes > > > service. In that case, you'll want to tweak the bootstrap.xml to make > it > > > listen on 0.0.0.0 (i.e. all IP addresses associated with the pod) > rather > > > than the specific address you listed in your last message. I suspect > the > > > latter, but both are possible. > > > > > > If modifying the bootstrap.xml to make it listen on 0.0.0.0 is easy to > > do, > > > please do that and see where it gets you. If that's non-trivial, then > > > please deploy an Nginx deployment with a ClusterIP service in front of > > it ( > > > > > > > > > https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ > > > is one of many resources online that describe how to do this), confirm > > that > > > you can hit the Nginx service from within the cluster, and then test > > > whether you can use kubectl port-forward to the Nginx ClusterIP > service. > > > (Ideally, use local port 8161 when doing the kubectl port-forward, just > > to > > > keep things as equivalent as possible.) If you can get through to the > > Nginx > > > service via kubectl port-forward but can't do the same thing to the > > Artemis > > > web console, then that to me would be a pretty clear indication that > the > > > issue is within the Artemis config and not a bug in kubectl, and at > that > > > point you'd want to pursue how to get Artemis to bind to 0.0.0.0 even > if > > > that's non-trivial to do. Once you do that, I'd expect you to be able > to > > > port-forward to either the service or to each individual pods as > needed. > > > > > > As for why it didn't work when you added a host entry to map to > > 127.0.0.1, > > > that's because that hostname isn't your Windows machine, it's the > > container > > > that's running on your Windows machine, which has its own network stack > > and > > > address. Networking is the most complicated part of working with > > > Kubernetes, and it's easy to get confused about exactly which host is > > > "localhost" in a given context, but if you think of each container as > > being > > > on a different machine rather than the physical machine you're actually > > > running on, that will help avoid at least some of the places where > > > confusion could occur. > > > > > > One other thing: I'd encourage you to think about whether kubectl > > > port-forward is really the right tool for the job here. It's a great > way > > to > > > do ad hoc troubleshooting, but if you're going to be using it > frequently > > > and/or if you might want to use it for automated monitoring in > > production, > > > I still think you might be better off with an always-available ingress > > > route(s) that lets you expose these things on a permanent basis > (whether > > > that's exposing the service that load-balances across all brokers or > > > whether you set up individual services for each individual pod and then > > > expose each of those single-broker services so you can access the web > > > console of any broker). And yes, ingress is a feature by which incoming > > > HTTP traffic is routed to resources (certainly services, but I'm not > sure > > > what other resource types can be exposed) within Kubernetes. > > > > > > Tim > > > > > > > > > On Fri, Aug 20, 2021 at 9:43 AM Thai Le <lnthai2...@gmail.com> wrote: > > > > > > > I tried port-forward directly to the pod, it didn't work: > > > > C:\Users\nle>kubectl port-forward pod/ex-aao-ss-0 8161:8161 -n > > myproject > > > > Forwarding from 127.0.0.1:8161 -> 8161 > > > > Forwarding from [::1]:8161 -> 8161 > > > > Handling connection for 8161 > > > > Handling connection for 8161 > > > > E0820 09:06:52.508157 13064 portforward.go:400] an error occurred > > > > forwarding 8161 -> 8161: error forwarding port 8161 to pod > > > > ff6c35be7d3ace906d726b6abd38dbe122ddf2530647a44c799ca9a8a15ab245, > uid : > > > > exit status 1: 2021/08/20 13:06:46 socat[31487] E connect(17, AF=2 > > > > 127.0.0.1:8161, 16): Connection refused > > > > E0820 09:06:52.522192 13064 portforward.go:400] an error occurred > > > > forwarding 8161 -> 8161: error forwarding port 8161 to pod > > > > ff6c35be7d3ace906d726b6abd38dbe122ddf2530647a44c799ca9a8a15ab245, > uid : > > > > exit status 1: 2021/08/20 13:06:46 socat[31488] E connect(17, AF=2 > > > > 127.0.0.1:8161, 16): Connection refused > > > > > > > > Since the bootstrap.xml indicates the web server is binding to > > > > http://ex-aao-ss-0.ex-aao-hdls-svc.myproject.svc.cluster.local:8161, > I > > > > also > > > > tried to add the > > > "ex-aao-ss-0.ex-aao-hdls-svc.myproject.svc.cluster.local" > > > > to my windows hosts file which map it to 127.0.0.1 then try access it > > > from > > > > my desktop browser but it's still not working. > > > > > > > > If i change the 2 ClusterIP services (*ex-aao-wconsj-0-svc* and > > > > *ex-aao-wconsj-1-svc*) that expose 8161 for the 2 brokers to NodePort > > > then > > > > I can access the web console directly from outside the cluster > without > > > port > > > > forwarding. I don't understand why this works but direct port > > forwarding > > > to > > > > the pod does not. > > > > > > > > The purpose of this exercise is to make sure that when developing the > > > > application locally we can point to artemis running on a cluster and > > > > observe/debug message distribution between multiple artemis brokers. > In > > > > production, we also need access to the console of each broker at the > > same > > > > time for troubleshooting, my original thought is just port-forward to > > > each > > > > pod when needed. Forgive me for my limited knowledge of kubernetes, > but > > > as > > > > I understand, ingress is to load balance http traffic so at one point > > in > > > > time, the console of a particular broker can be accessed. > > > > > > > > Thai Le > > > > > > > > > > > > On Fri, Aug 20, 2021 at 12:14 AM Tim Bain <tb...@alumni.duke.edu> > > wrote: > > > > > > > > > Can you port-forward directly to the individual pods successfully? > If > > > > that > > > > > doesn't work, then going through the service won't, so make sure > that > > > > > building block is working. > > > > > > > > > > Also, if you switch the service to be a NodePort service, can you > hit > > > the > > > > > web console from outside the K8s cluster without the port-forward? > > And > > > > > assuming that works, can you port-forward against that service > > > > > successfully? I'm not proposing you make that a permanent change, > > just > > > > > suggesting you try these variations to attempt to characterize the > > > > problem. > > > > > > > > > > One other question: long-term, do you plan to expose the web > console > > > port > > > > > outside of the cluster? If so, you won't (shouldn't) be using > kubectl > > > > > port-forward for that, and you should probably be using an ingress > > > proxy, > > > > > so maybe just set that up and don't worry about getting the > > > port-forward > > > > > approach to work. > > > > > > > > > > Tim > > > > > > > > > > On Wed, Aug 18, 2021, 1:24 PM Thai Le <lnthai2...@gmail.com> > wrote: > > > > > > > > > > > Thank you Justin for your suggestion. > > > > > > > > > > > > I looked at the bootstrap.xml of both broker nodes and the > binding > > is > > > > set > > > > > > to the hostname of the pod: > > > > > > <web bind=" > > > > > > > > http://ex-aao-ss-0.ex-aao-hdls-svc.myproject.svc.cluster.local:8161" > > > > > > path="web"> > > > > > > <web bind=" > > > > > > > > http://ex-aao-ss-1.ex-aao-hdls-svc.myproject.svc.cluster.local:8161" > > > > > > path="web"> > > > > > > So it makes sense that I got a connection refused when accessing > > the > > > > pod > > > > > > from my desktop using localhost through port forwarding to the > pod. > > > > > > > > > > > > I also see that there are 3 kubernetes services running, one for > > both > > > > > 8161 > > > > > > and 61616 (I think this is the main service that i can hit from > the > > > jms > > > > > > consumer) and 2 other that only for 8161 but for each broker node > > (I > > > > > > believe this is to allow clients from outside kubernetes to > access > > > the > > > > > web > > > > > > console using IP, giving that routing from outside cluster to the > > > > service > > > > > > IP is present): > > > > > > kubectl get services -n myproject > > > > > > NAME TYPE CLUSTER-IP > > EXTERNAL-IP > > > > > > PORT(S) AGE > > > > > > activemq-artemis-operator ClusterIP 10.100.240.205 <none> > > > > > > 8383/TCP 46h > > > > > > ex-aao-hdls-svc ClusterIP None <none> > > > > > > 8161/TCP,61616/TCP 134m > > > > > > ex-aao-ping-svc ClusterIP None <none> > > > > > > 8888/TCP 134m > > > > > > ex-aao-wconsj-0-svc ClusterIP *10.96.183.20* <none> > > > > > > 8161/TCP 134m > > > > > > ex-aao-wconsj-1-svc ClusterIP *10.98.233.91* <none> > > > > > > 8161/TCP 134m > > > > > > > > > > > > Here is the description of the main service: > > > > > > kubectl describe service ex-aao-hdls-svc -n myproject > > > > > > Name: * ex-aao-hdls-svc* > > > > > > Namespace: myproject > > > > > > Labels: ActiveMQArtemis=ex-aao > > > > > > application=ex-aao-app > > > > > > Annotations: <none> > > > > > > Selector: ActiveMQArtemis=ex-aao,application=ex-aao-app > > > > > > Type: ClusterIP > > > > > > IP Family Policy: SingleStack > > > > > > IP Families: IPv4 > > > > > > IP: None > > > > > > IPs: None > > > > > > Port: console-jolokia 8161/TCP > > > > > > TargetPort: 8161/TCP > > > > > > Endpoints: *10.1.0.30*:8161,*10.1.0.31*:8161 > > > > > > Port: all 61616/TCP > > > > > > TargetPort: 61616/TCP > > > > > > Endpoints: *10.1.0.30*:61616,*10.1.0.31*:61616 > > > > > > Session Affinity: None > > > > > > Events: <none> > > > > > > > > > > > > And here is the description the other 2 services: > > > > > > kubectl describe service ex-aao-wconsj-0-svc -n myproject > > > > > > Name: ex-aao-wconsj-0-svc > > > > > > Namespace: myproject > > > > > > Labels: ActiveMQArtemis=ex-aao > > > > > > application=ex-aao-app > > > > > > Annotations: <none> > > > > > > Selector: ActiveMQArtemis=ex-aao,application=ex-aao-app, > > > > > > statefulset.kubernetes.io/pod-name=ex-aao-ss-0 > > > > > > Type: ClusterIP > > > > > > IP Family Policy: SingleStack > > > > > > IP Families: IPv4 > > > > > > IP: *10.96.183.20* > > > > > > IPs: *10.96.183.20* > > > > > > Port: wconsj-0 8161/TCP > > > > > > TargetPort: 8161/TCP > > > > > > Endpoints: *10.1.0.30*:8161 > > > > > > Session Affinity: None > > > > > > Events: <none> > > > > > > > > > > > > kubectl describe service ex-aao-wconsj-1-svc -n myproject > > > > > > Name: ex-aao-wconsj-1-svc > > > > > > Namespace: myproject > > > > > > Labels: ActiveMQArtemis=ex-aao > > > > > > application=ex-aao-app > > > > > > Annotations: <none> > > > > > > Selector: ActiveMQArtemis=ex-aao,application=ex-aao-app, > > > > > > statefulset.kubernetes.io/pod-name=ex-aao-ss-1 > > > > > > Type: ClusterIP > > > > > > IP Family Policy: SingleStack > > > > > > IP Families: IPv4 > > > > > > IP: *10.98.233.91* > > > > > > IPs: *10.98.233.91* > > > > > > Port: wconsj-1 8161/TCP > > > > > > TargetPort: 8161/TCP > > > > > > Endpoints: *10.1.0.31*:8161 > > > > > > Session Affinity: None > > > > > > Events: <none> > > > > > > > > > > > > The 2 pods hosting the broker nodes are ex-aao-ss0 and > ex-aao-ss1: > > > > > > kubectl get all -o wide -n myproject > > > > > > NAME READY STATUS > > > > > RESTARTS > > > > > > AGE IP > > > > > > pod/activemq-artemis-operator-bb9cf6567-qjdzs 1/1 Running > 0 > > > > > > 46h 10.1.0.6 > > > > > > pod/debug 1/1 Running > 0 > > > > > > 162m 10.1.0.29 > > > > > > pod/ex-aao-ss-0 1/1 Running > 0 > > > > > > 155m *10.1.0.30* > > > > > > pod/ex-aao-ss-1 1/1 Running > 0 > > > > > > 154m *10.1.0.31* > > > > > > > > > > > > Hence, from another pod in the same cluster I can access the web > > > > console > > > > > : > > > > > > curl -L http://*ex-aao-hdls-svc*:8161, so I should be able to > port > > > > > forward > > > > > > using this service instead of the pod: > > > > > > C:\Users\nle>kubectl port-forward service/ex-aao-hdls-svc > 8161:8161 > > > -n > > > > > > myproject > > > > > > Forwarding from 127.0.0.1:8161 -> 8161 > > > > > > Forwarding from [::1]:8161 -> 8161 > > > > > > > > > > > > However, hitting http://localhost:8161 from my desktop still > give > > > the > > > > > same > > > > > > error: > > > > > > > > > > > > Handling connection for 8161 > > > > > > Handling connection for 8161 > > > > > > E0818 14:51:30.135226 18024 portforward.go:400] an error > occurred > > > > > > forwarding 8161 -> 8161: error forwarding port 8161 to pod > > > > > > ff6c35be7d3ace906d726b6abd38dbe122ddf2530647a44c799ca9a8a15ab245, > > > uid : > > > > > > exit status 1: 2021/08/18 18:51:26 socat[1906] E connect(17, AF=2 > > > > > > 127.0.0.1:8161, 16): Connection refused > > > > > > E0818 14:51:30.136855 18024 portforward.go:400] an error > occurred > > > > > > forwarding 8161 -> 8161: error forwarding port 8161 to pod > > > > > > ff6c35be7d3ace906d726b6abd38dbe122ddf2530647a44c799ca9a8a15ab245, > > > uid : > > > > > > exit status 1: 2021/08/18 18:51:26 socat[1907] E connect(17, AF=2 > > > > > > 127.0.0.1:8161, 16): Connection refused > > > > > > > > > > > > Do you have any other suggestion? > > > > > > > > > > > > Thai Le > > > > > > > > > > > > > > > > > > On Wed, Aug 18, 2021 at 2:10 PM Justin Bertram < > > jbert...@apache.org> > > > > > > wrote: > > > > > > > > > > > > > If the embedded web server which serves the console (as > > configured > > > in > > > > > > > bootstrap.xml) is bound to localhost then it will never be > > > accessible > > > > > > from > > > > > > > a remote machine. You need to bind it to an IP or hostname > which > > is > > > > > > > externally accessible. > > > > > > > > > > > > > > > > > > > > > Justin > > > > > > > > > > > > > > On Tue, Aug 17, 2021 at 2:58 PM Thai Le <lnthai2...@gmail.com> > > > > wrote: > > > > > > > > > > > > > > > Hello, > > > > > > > > > > > > > > > > I am not sure if questions regarding Artemis cloud can be > asked > > > > here > > > > > > but > > > > > > > > since i found no mailing list for artemis cloud and the slack > > > > channel > > > > > > > needs > > > > > > > > an invitation to join I'm gonna try my luck here. > > > > > > > > > > > > > > > > I installed the Artemis operator and an ActiveMQArtemis with > a > > > > > > deployment > > > > > > > > plan of 2 brokers on my single node kubernetes > > (docker-desktop), > > > > here > > > > > > is > > > > > > > > the deployment: > > > > > > > > > > > > > > > > apiVersion: broker.amq.io/v2alpha5 > > > > > > > > kind: ActiveMQArtemis > > > > > > > > metadata: > > > > > > > > name: ex-aao > > > > > > > > spec: > > > > > > > > adminUser: brokerAdmin > > > > > > > > adminPassword: verySecret > > > > > > > > deploymentPlan: > > > > > > > > size: 2 > > > > > > > > image: placeholder > > > > > > > > podSecurity: > > > > > > > > runAsUser: 0 > > > > > > > > console: > > > > > > > > expose: true > > > > > > > > sslEnabled: false > > > > > > > > > > > > > > > > The 2 brokers are running and I can curl the web console from > > > > another > > > > > > pod > > > > > > > > in the same kubernetes cluster. However, I cannot access the > > web > > > > > > console > > > > > > > > from my desktop (http://localhost:8161/console). I also > tried > > to > > > > > port > > > > > > > > forward requests to port 8161 from my desktop to one of the 2 > > > > artemis > > > > > > > pods > > > > > > > > but it does not work either. > > > > > > > > > > > > > > > > I would appreciate it if anyone could give me a hint as to > what > > > may > > > > > be > > > > > > > > wrong or a direction to artemis cloud mailing list > > > > > > > > > > > > > > > > Thai Le > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Where there is will, there is a way > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Where there is will, there is a way > > > > > > > > > > > > > -- > > Where there is will, there is a way > > > -- Where there is will, there is a way