We have a private kubernetes cluster. We are trying to follow these quick start instructions to install solace. https://github.com/SolaceProducts/solace-kubernetes-quickstart
The solace helm chart installation steps were as follows:
git clone https://github.com/SolaceProducts/solace-kubernetes-quickstart.git
cd solace-kubernetes-quickstart/solace
../scripts/configure.sh -p admin
helm install . -f values.yaml
The default yaml is the one drawn from the clone https://github.com/SolaceProducts/solace-kubernetes-quickstart/blob/master/solace/values.yaml
The install was largely successful.
[root@togo solace]# kubectl get pods
NAME READY STATUS RESTARTS AGE
brawny-walrus-solace-0 1/1 Running 0 41m
[root@togo solace]# kubectl get statefulsets
NAME READY AGE
brawny-walrus-solace 1/1 42m
However the default set of services includes a loadbalancer with a pending external-ip
[root@togo solace]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
brawny-walrus-solace LoadBalancer 10.101.58.127 <pending> 22:31475/TCP,8080:30940/TCP,55555:30575/TCP,55003:32142/TCP,55443:32096/TCP,943:30133/TCP,80:32276/TCP,443:30643/TCP 43m
brawny-walrus-solace-discovery ClusterIP None <none> 8080/TCP 43m
A quick stack search seems to suggest this is because the loadbalancer expects to work inside a cloud, with an external load balancer:
kubernetes service external ip pending
Furthermore one of the answers suggests using an Ingress Controller when using a custom kubeadm cluster (which is our case).
https://stackoverflow.com/a/44112285/2025407
Solace provides a variety of example "values.yaml".. though a first glance at these does not suggest how to get solace working on a kubeadm cluster.
https://github.com/SolaceProducts/solace-kubernetes-quickstart/tree/master/solace/values-examples
So my simple question for the Solace and/or Kubernetes experts is ... what is the simplest way for me to update my helm chart configuration file (values.yaml) in order to expose ports such as the solace admin port (8080 - i believe) in a fashion that is accessible?
If the helm chart does not support this configuration (which I think it must), then I can also create the appropriate service or services to expose the solace resources properly.. however this would not be the best way to get my solace chart working.
Thanks in advance for any help on this.
You can set the service.type
parameter to NodePort
.
Here is an simple example to demonstrate NodePort
being used.
helm repo add solacecharts https://solaceproducts.github.io/pubsubplus-kubernetes-quickstart/helm-charts
helm install my-release solacecharts/pubsubplus-dev --set service.type=NodePort,storage.persistent=false
Follow the instructions in helm status my-release
to figure out the ports.
Example:
$ echo -e "\nProtocol\tAddress\n"`kubectl get svc --namespace default my-release-pubsubplus-dev -o jsonpath="{range .spec.ports[*]}{.name}\t<NodeIP>:{.nodePort}\n"`
Protocol Address
ssh <NodeIP>:31359
semp <NodeIP>:30522
semptls <NodeIP>:30891
smf <NodeIP>:30019
smfcomp <NodeIP>:32518
smftls <NodeIP>:30791
web <NodeIP>:31568
webtls <NodeIP>:30087
amqp <NodeIP>:32427
mqtt <NodeIP>:32060
rest <NodeIP>:30746
Note that is just an example and isn't suitable for production. For example, persistent storage is not in use, which means that all spooled messages can be lost.
Refer to https://github.com/SolaceProducts/pubsubplus-kubernetes-quickstart for more details about the Solace Kubernetes quickstart.