diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62c8935 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ \ No newline at end of file diff --git a/README.md b/README.md index f26765e..7b35755 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ Aether SD-Core is a 5G core network, responsible for the 5G Network's control operations: Authentication, IP assignment, Policy management, Quality of Service, Slice management, and more. -Charmed Aether SD-Core is automates the operations of Aether SD-Core, making it easy to deploy, upgrade and observe. +Charmed Aether SD-Core automates the operations of Aether SD-Core, making it easy to deploy, upgrade and observe. diff --git a/docs/how-to/deploy_sdcore_cups.md b/docs/how-to/deploy_sdcore_cups.md index c9bb06c..c9f7935 100644 --- a/docs/how-to/deploy_sdcore_cups.md +++ b/docs/how-to/deploy_sdcore_cups.md @@ -30,6 +30,7 @@ Inside the `modules/sdcore-control-plane-k8s` directory, create a `control-plane ```console git clone https://github.com/canonical/terraform-juju-sdcore-k8s.git +git checkout v1.4 cd terraform-juju-sdcore-k8s/modules/sdcore-control-plane-k8s cat << EOF > control-plane.tfvars model_name = "control-plane" @@ -139,6 +140,7 @@ Inside the `modules/sdcore-user-plane-k8s` directory, create a `user-plane.tfvar ```console git clone https://github.com/canonical/terraform-juju-sdcore-k8s.git +git checkout v1.4 cd terraform-juju-sdcore-k8s/modules/sdcore-user-plane-k8s cat << EOF > user-plane.tfvars model_name = "user-plane" @@ -241,4 +243,4 @@ terraform apply -auto-approve `````` -[Charmed Aether SD-Core Terraform modules]: https://github.com/canonical/terraform-juju-sdcore-k8s +[Charmed Aether SD-Core Terraform modules]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/v1.4 diff --git a/docs/how-to/deploy_sdcore_gnbsim.md b/docs/how-to/deploy_sdcore_gnbsim.md index f4b6325..becb219 100644 --- a/docs/how-to/deploy_sdcore_gnbsim.md +++ b/docs/how-to/deploy_sdcore_gnbsim.md @@ -20,7 +20,7 @@ juju add-model gnbsim gnbsim-cloud Deploy the `sdcore-gnbsim-k8s` operator charm. ```console -juju deploy sdcore-gnbsim-k8s gnbsim --trust --channel=1.4/edge \ +juju deploy sdcore-gnbsim-k8s gnbsim --trust --channel=1.4/beta \ --config gnb-interface=ran \ --config gnb-ip-address=10.204.0.10/24 \ --config icmp-packet-destination=8.8.8.8 \ diff --git a/docs/how-to/deploy_sdcore_standalone.md b/docs/how-to/deploy_sdcore_standalone.md index 838878b..98fe778 100644 --- a/docs/how-to/deploy_sdcore_standalone.md +++ b/docs/how-to/deploy_sdcore_standalone.md @@ -20,6 +20,7 @@ Inside the `modules/sdcore-k8s` directory, create a `terraform.tfvars` file to s ```console git clone https://github.com/canonical/terraform-juju-sdcore-k8s.git +git checkout v1.4 cd terraform-juju-sdcore-k8s/modules/sdcore-k8s cat << EOF > terraform.tfvars model_name = "" @@ -62,4 +63,4 @@ To be effective, every configuration change needs to be applied using the follow terraform apply -var-file="terraform.tfvars" -auto-approve ``` -[Charmed Aether SD-Core Terraform modules]: https://github.com/canonical/terraform-juju-sdcore-k8s +[Charmed Aether SD-Core Terraform modules]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/v1.4 diff --git a/docs/how-to/integrate_sdcore_with_observability.md b/docs/how-to/integrate_sdcore_with_observability.md index e90b45c..48ac6eb 100644 --- a/docs/how-to/integrate_sdcore_with_observability.md +++ b/docs/how-to/integrate_sdcore_with_observability.md @@ -101,4 +101,4 @@ Click on "Dashboards" -> "Browse" and select "5G Network Overview". :align: center ``` -[Charmed Aether SD-Core Terraform modules]: https://github.com/canonical/terraform-juju-sdcore-k8s +[Charmed Aether SD-Core Terraform modules]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/v1.4 diff --git a/docs/index.md b/docs/index.md index 07d668c..73adb19 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,7 +2,7 @@ Aether SD-Core is a 5G core network, responsible for the 5G Network's control operations: Authentication, IP assignment, Policy management, Quality of Service, Slice management, and more. -Charmed Aether SD-Core is automates the operations of Aether SD-Core, making it easy to deploy, upgrade and observe. +Charmed Aether SD-Core automates the operations of Aether SD-Core, making it easy to deploy, upgrade and observe. Charmed Aether SD-Core exists because mobile networks are traditionally costly and difficult to operate and that open source alternatives are either too complex or unsecure. The project combines ONF's 5G expertise with Juju model driven operations. diff --git a/docs/reference/deployment_options.md b/docs/reference/deployment_options.md index f4ec8bb..738cc11 100644 --- a/docs/reference/deployment_options.md +++ b/docs/reference/deployment_options.md @@ -32,6 +32,6 @@ Terraform module to deploy the 5G user plane in edge sites. ````` -[sdcore-k8s-terraform]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/main/modules/sdcore-k8s -[sdcore-control-plane-k8s]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/main/modules/sdcore-control-plane-k8s -[sdcore-user-plane-k8s]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/main/modules/sdcore-user-plane-k8s +[sdcore-k8s-terraform]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/v1.4/modules/sdcore-k8s +[sdcore-control-plane-k8s]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/v1.4/modules/sdcore-control-plane-k8s +[sdcore-user-plane-k8s]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/v1.4/modules/sdcore-user-plane-k8s diff --git a/docs/reference/public_clouds.md b/docs/reference/public_clouds.md index 24d95e1..491f861 100644 --- a/docs/reference/public_clouds.md +++ b/docs/reference/public_clouds.md @@ -2,4 +2,4 @@ It is not possible to deploy SD-Core on AWS, Microsoft Azure or GCP using their managed Kubernetes services. None of them support the SCTP protocol on load balancers, which prevents the gNodeB from communicating with the AMF. -Microk8s is the preferred Kubernetes distribution for SD-Core. \ No newline at end of file +MicroK8s is the preferred Kubernetes distribution for SD-Core. \ No newline at end of file diff --git a/docs/tutorials/getting_started.md b/docs/tutorials/getting_started.md index 14fee54..eddae06 100644 --- a/docs/tutorials/getting_started.md +++ b/docs/tutorials/getting_started.md @@ -107,14 +107,15 @@ resource "juju_model" "sdcore" { } module "sdcore-router" { - source = "git::https://github.com/canonical/sdcore-router-k8s-operator//terraform" + source = "git::https://github.com/canonical/sdcore-router-k8s-operator//terraform?ref=v1.4" + channel = "1.4/beta" model_name = juju_model.sdcore.name depends_on = [juju_model.sdcore] } module "sdcore" { - source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-k8s" + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-k8s?ref=v1.4" model_name = juju_model.sdcore.name create_model = false @@ -127,7 +128,8 @@ module "sdcore" { } module "gnbsim" { - source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform" + source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform?ref=v1.4" + channel = "1.4/beta" model_name = juju_model.sdcore.name depends_on = [module.sdcore-router] @@ -164,7 +166,7 @@ EOF ``` ```{note} -You can get a ready example by cloning [this Git repository](https://github.com/canonical/charmed-aether-sd-core). +You can get a ready example by cloning [this Git repository](https://github.com/canonical/charmed-aether-sd-core) and switching to the `v1.4` branch. All necessary files are in the `examples/terraform/getting_started` directory. ``` @@ -196,27 +198,27 @@ for `grafana-agent` to remain in waiting state. Example: ```console ubuntu@host:~$ juju status -Model Controller Cloud/Region Version SLA Timestamp -sdcore microk8s-localhost microk8s/localhost 3.4.0 unsupported 13:40:12+01:00 - -App Version Status Scale Charm Channel Rev Address Exposed Message -amf active 1 sdcore-amf-k8s 1.4/edge 57 10.152.183.208 no -ausf active 1 sdcore-ausf-k8s 1.4/edge 40 10.152.183.237 no -gnbsim active 1 sdcore-gnbsim-k8s 1.4/edge 43 10.152.183.167 no -grafana-agent 0.32.1 waiting 1 grafana-agent-k8s latest/stable 44 10.152.183.245 no installing agent -mongodb active 1 mongodb-k8s 6/beta 36 10.152.183.156 no Primary -nms active 1 sdcore-nms-k8s 0.2/edge 26 10.152.183.121 no -nrf active 1 sdcore-nrf-k8s 1.4/edge 62 10.152.183.123 no -nssf active 1 sdcore-nssf-k8s 1.4/edge 37 10.152.183.165 no -pcf active 1 sdcore-pcf-k8s 1.4/edge 32 10.152.183.205 no -router active 1 sdcore-router-k8s 1.4/edge 33 10.152.183.49 no -self-signed-certificates active 1 self-signed-certificates 1.4/edge 33 10.152.183.153 no -smf active 1 sdcore-smf-k8s 1.4/edge 37 10.152.183.147 no -traefik 2.10.4 active 1 traefik-k8s latest/stable 148 10.0.0.4 no -udm active 1 sdcore-udm-k8s 1.4/edge 35 10.152.183.168 no -udr active 1 sdcore-udr-k8s 1.4/edge 31 10.152.183.96 no -upf active 1 sdcore-upf-k8s 1.4/edge 64 10.152.183.126 no -webui active 1 sdcore-webui-k8s 1.4/edge 23 10.152.183.128 no +Model Controller Cloud/Region Version SLA Timestamp +sdcore microk8s-localhost microk8s/localhost 3.4.2 unsupported 10:15:12+02:00 + +App Version Status Scale Charm Channel Rev Address Exposed Message +amf active 1 sdcore-amf-k8s 1.4/beta 160 10.152.183.64 no +ausf active 1 sdcore-ausf-k8s 1.4/beta 139 10.152.183.140 no +gnbsim active 1 sdcore-gnbsim-k8s 1.4/beta 108 10.152.183.197 no +grafana-agent 0.35.2 waiting 1 grafana-agent-k8s latest/stable 64 10.152.183.105 no installing agent +mongodb active 1 mongodb-k8s 6/beta 38 10.152.183.55 no Primary +nms active 1 sdcore-nms-k8s 1.4/beta 127 10.152.183.220 no +nrf active 1 sdcore-nrf-k8s 1.4/beta 142 10.152.183.226 no +nssf active 1 sdcore-nssf-k8s 1.4/beta 116 10.152.183.222 no +pcf active 1 sdcore-pcf-k8s 1.4/beta 120 10.152.183.94 no +router active 1 sdcore-router-k8s 1.4/beta 109 10.152.183.203 no +self-signed-certificates active 1 self-signed-certificates latest/stable 72 10.152.183.210 no +smf active 1 sdcore-smf-k8s 1.4/beta 134 10.152.183.125 no +traefik v2.11.0 active 1 traefik-k8s latest/stable 176 10.0.0.3 no +udm active 1 sdcore-udm-k8s 1.4/beta 104 10.152.183.111 no +udr active 1 sdcore-udr-k8s 1.4/beta 114 10.152.183.162 no +upf active 1 sdcore-upf-k8s 1.4/beta 161 10.152.183.254 no +webui active 1 sdcore-webui-k8s 1.4/beta 86 10.152.183.53 no Unit Workload Agent Address Ports Message amf/0* active idle 10.1.182.23 @@ -277,7 +279,7 @@ Retrieve the NMS address: juju run traefik/0 show-proxied-endpoints ``` -The output should be `http://sdcore-nms.10.0.0.4.nip.io/`. Navigate to this address in your +The output should be `https://sdcore-nms.10.0.0.4.nip.io/`. Navigate to this address in your browser. diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md index 7548af2..242c4f6 100644 --- a/docs/tutorials/index.md +++ b/docs/tutorials/index.md @@ -15,7 +15,7 @@ Charmed Aether SD-Core - it will save you many more hours later on. Follow the tutorials steps in sequence; they take you on a learning journey through the product. -The tutorials has been tested with a variety of users. We make every effort to +The tutorials have been tested with a variety of users. We make every effort to keep them up-to-date and ensure that they are reliable - but if you encounter any problems, we want to help you, so please let us know. diff --git a/docs/tutorials/mastering.md b/docs/tutorials/mastering.md index 7a0a0ec..33955af 100644 --- a/docs/tutorials/mastering.md +++ b/docs/tutorials/mastering.md @@ -18,7 +18,7 @@ A machine running Ubuntu 22.04 with the following resources: The following IP networks will be used to connect and isolate the network functions: | Name | Subnet | Gateway IP | -| ------------ | ------------- | ---------- | +|--------------|---------------|------------| | `management` | 10.201.0.0/24 | 10.201.0.1 | | `access` | 10.202.0.0/24 | 10.202.0.1 | | `core` | 10.203.0.0/24 | 10.203.0.1 | @@ -118,7 +118,7 @@ sudo snap connect multipass:lxd lxd To complete this tutorial, you will need seven virtual machines with access to the networks as follows: | Machine | CPUs | RAM | Disk | Networks | -| ------------------------------------ | ---- | --- | ---- | ------------------------------ | +|--------------------------------------|------|-----|------|--------------------------------| | DNS Server | 1 | 1g | 10g | `management` | | Control Plane Kubernetes Cluster | 4 | 8g | 40g | `management` | | User Plane Kubernetes Cluster | 2 | 4g | 20g | `management`, `access`, `core` | @@ -225,7 +225,7 @@ echo 127.0.0.1 | sudo tee /etc/resolv.conf The following IP addresses are used in this tutorial and must be present in the DNS Server that all hosts are using: | Name | IP Address | Purpose | -| -------------------------------------- | ------------ | -------------------------------------------------------- | +|----------------------------------------|--------------|----------------------------------------------------------| | `juju-controller.mgmt` | 10.201.0.104 | Management address for Juju machine | | `control-plane.mgmt` | 10.201.0.101 | Management address for control plane cluster machine | | `user-plane.mgmt` | 10.201.0.102 | Management address for user plane cluster machine | @@ -727,10 +727,10 @@ scp user-plane-cluster.yaml juju-controller.mgmt: In this guide, the following network interfaces are available on the SD-Core `user-plane` VM: | Interface Name | Purpose | -| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| enp6s0 | internal Kubernetes management interface. This maps to the `management` subnet. | -| enp7s0 | core interface. This maps to the `core` subnet. | -| enp8s0 | access interface. This maps to the `access` subnet. Note that internet egress is required here and routing tables are already set to route gNB generated traffic. | +|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| enp6s0 | Internal Kubernetes management interface. This maps to the `management` subnet. | +| enp7s0 | Core interface. This maps to the `core` subnet. | +| enp8s0 | Access interface. This maps to the `access` subnet. Note that internet egress is required here and routing tables are already set to route gNB generated traffic. | Now we create the MACVLAN bridges for `enp7s0` and `enp8s0`. These instructions are put into a file that is executed on reboot so the interfaces will come back: @@ -787,9 +787,9 @@ scp gnb-cluster.yaml juju-controller.mgmt: In this guide, the following network interfaces are available on the `gnbsim` VM: | Interface Name | Purpose | -| -------------- | ------------------------------------------------------------------------------- | -| enp6s0 | internal Kubernetes management interface. This maps to the `management` subnet. | -| enp7s0 | ran interface. This maps to the `ran` subnet. | +|----------------|---------------------------------------------------------------------------------| +| enp6s0 | Internal Kubernetes management interface. This maps to the `management` subnet. | +| enp7s0 | Ran interface. This maps to the `ran` subnet. | Now we create the MACVLAN bridges for `enp7s0`, and label them accordingly: @@ -915,7 +915,7 @@ Create Terraform module: ```console cat << EOF > main.tf module "sdcore-control-plane" { - source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-control-plane-k8s" + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-control-plane-k8s?ref=v1.4" model_name = "control-plane" create_model = false @@ -1051,7 +1051,7 @@ We will provide necessary configuration (please see the list of the config optio Lastly, we will expose the Software as a Service offer for the UPF. | Config Option | Descriptions | -| --------------------- | ------------------------------------------------------------------------------------------------- | +|-----------------------|---------------------------------------------------------------------------------------------------| | access-gateway-ip | The IP address of the gateway that knows how to route traffic from the UPF towards the gNB subnet | | access-interface | The name of the MACVLAN interface on the Kubernetes host cluster to bridge to the `access` subnet | | access-ip | The IP address for the UPF to use on the `access` subnet | @@ -1084,7 +1084,7 @@ Update the `main.tf` file: ```console cat << EOF >> main.tf module "sdcore-user-plane" { - source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-user-plane-k8s" + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-user-plane-k8s?ref=v1.4" model_name = "user-plane" create_model = false @@ -1165,7 +1165,7 @@ We will provide necessary configuration (please see the list of the config optio Lastly, we will expose the Software as a Service offer for the simulator. | Config Option | Descriptions | -| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------| | gnb-interface | The name of the MACVLAN interface to use on the host | | gnb-ip-address | The IP address to use on the gnb interface | | icmp-packet-destination | The target IP address to ping. If there is no egress to the internet on your core network, any IP that is reachable from the UPF should work. | @@ -1195,7 +1195,8 @@ Update the `main.tf` file: ```console cat << EOF >> main.tf module "gnbsim" { - source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform" + source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform?ref=v1.4" + channel = "1.4/beta" model_name = "gnbsim" @@ -1375,13 +1376,13 @@ Add `cos-lite` Terraform module to the `main.tf` file used in the previous steps ```console cat << EOF >> main.tf module "cos-lite" { - source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/external/cos-lite" + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/external/cos-lite?ref=v1.4" model_name = "cos-lite" deploy_cos_configuration = true cos_configuration_config = { git_repo = "https://github.com/canonical/sdcore-cos-configuration" - git_branch = "main" + git_branch = "v1.4" grafana_dashboards_path = "grafana_dashboards/sdcore/" } } @@ -1644,7 +1645,7 @@ You have learned how to: - view the metrics produced by the 5G core ```{note} -For your convenience, a complete Terraform module covering the deployments and integrations from this tutorial, is available in [this Git repository](https://github.com/canonical/charmed-aether-sd-core). +For your convenience, a complete Terraform module covering the deployments and integrations from this tutorial, is available in [this Git repository](https://github.com/canonical/charmed-aether-sd-core/tree/v1.4) in `v1.4` branch. All necessary files are in the `examples/terraform/mastering` directory. ``` diff --git a/examples/terraform/getting_started/main.tf b/examples/terraform/getting_started/main.tf index 072bcf2..63db2ed 100644 --- a/examples/terraform/getting_started/main.tf +++ b/examples/terraform/getting_started/main.tf @@ -6,14 +6,15 @@ resource "juju_model" "sdcore" { } module "sdcore-router" { - source = "git::https://github.com/canonical/sdcore-router-k8s-operator//terraform" + source = "git::https://github.com/canonical/sdcore-router-k8s-operator//terraform?ref=v1.4" + channel = "1.4/beta" model_name = juju_model.sdcore.name depends_on = [juju_model.sdcore] } module "sdcore" { - source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-k8s" + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-k8s?ref=v1.4" model_name = juju_model.sdcore.name create_model = false @@ -27,7 +28,8 @@ module "sdcore" { } module "gnbsim" { - source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform" + source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform?ref=v1.4" + channel = "1.4/beta" model_name = juju_model.sdcore.name depends_on = [module.sdcore-router] diff --git a/examples/terraform/mastering/main.tf b/examples/terraform/mastering/main.tf index c88e8c1..bfffca3 100644 --- a/examples/terraform/mastering/main.tf +++ b/examples/terraform/mastering/main.tf @@ -1,5 +1,5 @@ module "sdcore-control-plane" { - source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-control-plane-k8s" + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-control-plane-k8s?ref=v1.4" model_name = "control-plane" create_model = false @@ -15,7 +15,7 @@ module "sdcore-control-plane" { } module "sdcore-user-plane" { - source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-user-plane-k8s" + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-user-plane-k8s?ref=v1.4" model_name = "user-plane" create_model = false @@ -34,7 +34,8 @@ module "sdcore-user-plane" { } module "gnbsim" { - source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform" + source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform?ref=v1.4" + channel = "1.4/beta" model_name = "gnbsim" @@ -48,13 +49,13 @@ module "gnbsim" { } module "cos-lite" { - source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/external/cos-lite" + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/external/cos-lite?ref=v1.4" model_name = "cos-lite" deploy_cos_configuration = true cos_configuration_config = { git_repo = "https://github.com/canonical/sdcore-cos-configuration" - git_branch = "main" + git_branch = "v1.4" grafana_dashboards_path = "grafana_dashboards/sdcore/" } }