Kubernetes Ingress allows for external access to services in a k8s cluster, typically HTTP. Ingress may also provide load balancing, SSL termination and name-based virtual hosting.
This HowTo explains how to use the Traefik charm to expose the Hello, Kubecon demo charm through an IP provided by the MetalLB controller charm.
Requirements
- you have a Kubernetes cluster (eg MicroK8s) up and running
- the Kubernetes cluster is added as a cloud to Juju, for this guide we will assume this is
microk8s-cloud
Add model
First we create a model to host our traefik demo deployment:
juju add-model tf-demo microk8s-cloud
Deploy MetalLB
MetalLB provides public IP addresses to services running in the Kubernetes cluster. In this case we can configure MetalLB to control just one address, specified in the --config
argument for the controller charm (please choose an address that is appropriate for your network, in this example we will use 42.42.42.42
).
juju deploy metallb --trust --config iprange=42.42.42.42-42.42.42.42 --channel 1.28/stable
Deploy Traefik
The Traefik charm is deployed with the --trust
flag so that the service has access to :
juju deploy traefik-k8s --trust
To test Traefik is working as expected we will deploy a demo workload encapsulated in a charm called hello-kubecon
:
juju deploy hello-kubecon
To expose the hello-kubecon
charm we connect it to Traefik:
juju integrate traefik-k8s hello-kubecon
Test the demo
After a few minutes, the juju status
command should report that everything is active
:
Model Controller Cloud/Region Version SLA Timestamp
tf-demo mk8s-localhost mk8s/localhost 3.1.5 unsupported 15:19:43+03:00
App Version Status Scale Charm Channel Rev Address Exposed Message
hello-kubecon active 1 hello-kubecon stable 19 10.152.183.175 no
metallb-controller res:metallb-controller-imag... active 1 metallb-controller stable 46 10.152.183.198 no
metallb-speaker res:metallb-speaker-image@6... active 1 metallb-speaker stable 41 10.152.183.195 no
traefik-k8s 2.9.6 active 1 traefik-k8s stable 110 42.42.42.42 no
Unit Workload Agent Address Ports Message
hello-kubecon/0* active idle 10.1.180.207
metallb-controller/0* active idle 10.1.180.208 7472/TCP
metallb-speaker/0* active idle 192.168.1.8 7472/TCP
traefik-k8s/0* active idle 10.1.180.205
By default Traefik uses its externally-visible url and creates a route for the requester that will be structured like:
http://<external_hostname>:<port>/<requester_model_name>-<requester_application_name>-<requester-unit-index>
In our case we can reach the demo site by running: curl http://42.42.42.42/tf-demo-hello-kubecon
For more details on configuring Traefik, please see the Traefik operator documentation.