Enable ingress for Charmed Litmus¶
This how-to guide outlines the process of enabling ingress for Charmed Litmus.
Enabling ingress can be done as both Day 1 and Day 2 operation.
In this how-to we will use the Traefik Kubernetes Charmed Operator as an ingress controller.
To complete this guide, your Kubernetes cluster will need a LoadBalancer with at least 1 available IP address.
1. Add Traefik to your Charmed Chaos Engineering platform Terraform module¶
Note
In this guide it is assumed that the Terraform module responsible for deploying the Charmed Litmus is named charmed-litmus
.
If you use different name, please make sure to update the code below.
Update your solution Terraform module (here it’s named main.tf
):
cat << EOF >> main.tf
module "traefik" {
source = "git::https://github.com/canonical/traefik-k8s-operator//terraform"
model = juju_model.charmed-chaos.name
channel = "latest/stable"
}
resource "juju_integration" "litmus-chaoscenter-traefik" {
model = juju_model.charmed-chaos.name
application {
name = module.charmed-litmus.chaoscenter_app_name
endpoint = module.charmed-litmus.chaoscenter_ingress_endpoint
}
application {
name = module.traefik.app_name
endpoint = module.traefik.endpoints.traefik_route
}
}
EOF
2. Apply the changes¶
Fetch the traefik
module:
terraform init
Apply new configuration:
terraform apply -auto-approve
Successful integration is indicated by the change of the ChaosCenter
URL printed in juju status
output.
New address of the ChaosCenter
should point to the IP address at which Traefik is served. Example:
Unit Workload Agent Address Ports Message
(...)
litmus-chaoscenter/0* active idle 10.1.194.214 Ready at http://10.0.0.3:8185.
(...)
traefik/0* active idle 10.1.194.236 Serving at 10.0.0.3
3. Example of a complete solution Terraform module including Charmed Litmus integrated with Traefik¶
resource "juju_model" "charmed-chaos" {
name = "charmed-chaos"
}
module "charmed-litmus" {
source = "git::https://github.com/canonical/litmus-operators//terraform"
model = juju_model.charmed-chaos.name
depends_on = [juju_model.charmed-chaos]
}
module "traefik" {
source = "git::https://github.com/canonical/traefik-k8s-operator//terraform"
model = juju_model.charmed-chaos.name
channel = "latest/stable"
}
resource "juju_integration" "litmus-chaoscenter-traefik" {
model = juju_model.charmed-chaos.name
application {
name = module.charmed-litmus.chaoscenter_app_name
endpoint = module.charmed-litmus.chaoscenter_ingress_endpoint
}
application {
name = module.traefik.app_name
endpoint = module.traefik.endpoints.traefik_route
}
}