Preparing a Reporting Solution in Azure Kubernetes Service with Istio

In the world of software development, there are exciting things happening! Technologies like Azure Kubernetes Service (AKS) and Istio are making a big impact in making applications stronger, smarter, more secure, and easier to manage. Bold Reports’ Report Server is a valuable reporting solution that empowers organizations to enhance their existing infrastructure by adding powerful reporting capabilities to their apps. This powerful tool allows you to effortlessly create, manage, and share reports. The best part is that you don’t need coding skills.

The Report Server’s key advantage is how easily it can be set up either on your own server or in the cloud. This flexibility gives organizations the freedom to choose what works best for them. In this blog post, we’ll walk you through the process of deploying the Bold Reports Report Server on the Azure Kubernetes Service (AKS) with Istio, which will also allow you to embed reporting into your applications.

Prerequisites for deployment

I will guide you through the deployment process. First, we need to download the highlighted deployment files from the Bold Reports Kubernetes GitHub repository. We have also published a video tutorial on deploying Bold Reports’ Report Server on Azure Kubernetes Service (AKS) with Istio. You can watch that video as well to learn this process.

Hardware requirements

To ensure optimal performance, the following hardware specifications are recommended:

  1. A CPU with two or more cores.

  2. A minimum of 4 GB RAM.

Software requirements

The recommended software prerequisites are as follows:

  1. A database such as Microsoft SQL Server 2012 or higher, PostgreSQL, or MySQL. Ensure that the database is accessible from outside the machine.

  2. Command-line tools: Install the necessary command-line tools, namely kubectl, Azure CLI, and Istioctl. These tools play a crucial role in managing and orchestrating your deployment.

  3. Web browser: A standard web browser such as Microsoft Edge, Mozilla Firefox, or Chrome is required to access and manage the Bold Reports Report Server.

The Deployment Process

I will walk you through the deployment process, first we download the highlighted deployment files from Bold Reports Kubernetes GitHub repository.

Bold Reports Kubernetes GitHub repository| Reporting Tools

Bold Reports Kubernetes GitHub repository

We will use Visual Studio Code, or you can use your own editor.

Before discussing the deployment and configuration process, it’s important to understand the various components and files that play a crucial role in setting up and managing your Kubernetes environment. These components include:

  1. The deployment file: Contains configurations for creating and managing pods using a replica set.

  2. Destination rulefile: Contains the necessary configuration for the destination rule, including the traffic policy for the associated Kubernetes service.

  3. HPA (horizontal pod autoscaler) configuration: Used to automatically adjust the number of pods based on CPU or memory consumption.

  4. Istio Gateway: Contains the configuration for the Istio Gateway resource, including the port, protocols, and routing rules to use. The Istio Gateway allows incoming traffic into the cluster and can route the traffic to the appropriate Kubernetes services.

  5. Log4net Configuration: Contains configuration settings that are used to view the application logs in your Kubernetes console or store the needed logs in a file.

  6. Namespaces: Contains the configuration that will be helpful when different teams or projects share a Kubernetes cluster.

  7. Pvclaim_eks: Contains the configuration where we will provide the information for the file system and file share.

  8. Service: Provides a single point of entry for accessing one or more pods.

Step 1: Connecting to the Azure cluster

First, you need to create a cluster in the Azure Kubernetes Service,

Azure Kubernetes Service| Reporting Tools

Azure Kubernetes Service

Next, connect with the Azure cluster.

  1. Open PowerShell and navigate to the folder where you downloaded the deployment files.

  2. Run the provided command to authenticate with Azure.

  3. Navigate to the Azure Kubernetes page, open the cluster overview page, and click the Connect option

    Cluster Overview Page| Reporting Tools

    Cluster Overview Page

Copy the provided commands.

Connecting to the Cluster Using the Copied Commands| Reporting Tools

Connecting to the Cluster Using the Copied Commands

Run them in PowerShell. We will be connected to the cluster

Run the Copied Commands in PowerShell |Reporting Tools

Run the Copied Commands in PowerShell

Step 2: Configuring file storage for pods

Next, you need to create a storage account in the Azure Kubernetes service. Configure the file storage for pods by using the created storage account.

Storage Account |Reporting Tools

Storage Account

i. Open the Account Access key page, copy the storage account name, and then copy the storage account key and convert them to base64.

Account Access Page |Reporting Tools

Account Access page

ii. I have created the file share instance inside the storage account to store the shared folder for the application usage, and I made a note of the file share name, which will be used in the next step.

Storage Account |Reporting Tool

Storage Account
Step 3: Modifying configuration files

Open the Pvclaim_eks file and add the Azure storage account name and account key using their base64 values. Also add the file share name as the share name value and save the file.

Modifying Pvclaim_eks Configuration File |Reporting Tools

Modifying Pvclaim_eks Configuration File

Step 4: Obtaining Ingress Gateway IP address

I will use the command provided to get the Ingress gateway external IP address. This IP address will be used for deploying the report server.

kubectl -n istio-system get service

Ingress Gateway External IP Address | Reporting Tools

Ingress Gateway External IP Address

I will deploy the Report Server using this IP Address. But if you would like to set up the Report Server with a domain, you will need to map the domain name with the IP address, and then directly add the domain name and tls secret name in the istio_gateway.yaml file.

Report Server Domain |Reporting Tools

Report Server Domain

Step 5: Optional: Setting up SSL

If you wish to use SSL, add the domain and the SSL configuration in the istio_gateway.yaml file. By default, the application will be hosted in non-SSL mode. Before configuring SSL, create the TLS secret with the SSL certificate by running this command:

kubectl create secret tls boldreports-tls -n bold-services --key <key-path> --cert <certificate-path>

boldreports-tls is the secret name, <key-path> indicates the path for the .pem file, and <certificate-path> indicates the .crt file path. You should use your domain SSL certificate.

First, you need to remove the lines.

Remove Lines of Domain SSL |Reporting Tools

Remove Lines of Domain SSL

You also need to uncomment these lines.

Uncomment Configuring Domain SSL |Reporting Tools

Uncomment Configuring Domain SSL

Next, you should replace example.com with your domain name or IP address. Deploy the application using the IP address, so you are not going to work with this step.

Report Server Domain |Reporting Tools

Report Server Domain

Step 6: Modifying deployment configuration

Open the deployment.yaml file and replace the domain or Ingress Gateway external IP address in the application base URL.

Application Base URL| Reporting Tools

Application Base URL

Step 7: Configuring optional client libraries

If you want to use third-party data sources like MySQL, Oracle, and PostgreSQL in your report, then you need to install them while deploying the report server. If you want to install more than one client library, separate them with commas.

Deploying Report Server |Reporting Tools

Deploying Report Server

Step 8: Creating namespace and Log Config

i. Create a namespace for Bold Reports using the provided command; this will create a namespace for Report Server:

kubectl apply -f namespace.yaml

ii. Create the log configuration using the provided command:

kubectl apply -f log4net_config.yaml

Step 9: Applying cconfiguration pvclaim_eks

Apply the configuration from pvclaim_eks by running this command to create a Persistent Volume (PV) and Persistent Volume Claim (PVC):

kubectl apply -f pvclaim_aks.yaml

Step 10: Applying configuration in hpa_gke

i. Apply the configuration in hpa_gke by running the provided command for setting up autoscaling for the Kubernetes Horizontal Pod Autoscaler (HPA):

kubectl apply -f hpa.yaml

ii. Create all the services by running this command; you will see all the services are created:

kubectl apply -f service.yaml

Step 11: Applying configuration in istio_gateway

By running this command, route traffic to services running in the cluster based on their URL paths and hostnames:

kubectl apply -f istio_gateway.yaml

Step 12: Applying configuration in destination_rule

Run the provided command to apply the configuration in destination_rule; this applies the traffic policies defined in the Destination Rule to the specified service:

kubectl apply -f destination_rule.yaml

Step 13: Checking Pod Status

i. Check the status of pods using the provided command:

kubectl get pods -n bold-services -w

ii. Wait until all the pods are running, and then run the command again to see if all the pods are running

Pods Running status |Reporting Tools

Pods Running status

Start-up application

1. Open the browser and navigate to the Domain or Ingress IP Address provided in the application base URL to configure the report server.

Application start-up page | Reporting Tools

Application start-up page

2. Activate the Bold Reports account either by using online credentials or by uploading the offline unlock key.

Activation Bold Reports Account |Reporting Tools

Activation Bold Reports Account

If you’re going to use the offline unlock key, you can download it from your Bold Reports Accounts page and upload it.

For this demo, activate the account using online credentials:

1. Click Log in to activate account and enter your Bold Reports credentials.

Clicking Log in to Activate Account |Reporting Tools

Clicking Log in to Activate Account

2. If you have multiple portal licenses, you’ll be prompted to select one.
3. Configure the user information.
4. Click Next.

Activation of Bold Reports Account Using Online Credentials.

Configure the database for storing Report Server data

1. You have the option to choose between SQL Server, PostgreSQL, or MySQL databases. For this setup, choose PostgreSQL. The fields will be updated accordingly.

Existing Database Page | Reporting Tools

Existing Database Page

2. You can either create a new database or use an existing one on the selected server type. In this case, select New Database and enter the name “boldserviceskubernetes.” Enable the SSL option to establish a secure connection using SSL and click

3. The report tenant deployment will begin and run in the background.

Report Tenant Deployment Running | Reporting Tools

Report Tenant Deployment Running

4. Click Go to Reports, and you’ll be redirected to the View All

Go to Reports | Reporting Tools

Go to Reports

Here, you can explore the available sample reports by clicking Explore in the Report Sample pop-up.

The View All Page | Reporting Tools

The View All Page

  1. By clicking the Add report button, you can add these reports to the Report Server. The reports will be added under the Sample Reports category

Samples Reports Category |Reporting Tools

Samples Reports Category

6. Open an added report to display it in the Report Server

Report Server | Reporting Tool

Report Server

Open the shared data source and data connector page. You can see third-party data sources like MySQL, Oracle, and PostgreSQL.

Add Data Source Data Connector Page

Export data visualization report items

To export data visualization report items such as charts and gauges when scheduling reports, you need to install the PhantomJS client library in your Rep­­­ort Server.

PhantomJS is a headless webkit scriptable with JavaScript.

Steps to install PhantomJS

i. Run the following command to get the available container:

kubectl get pods -n bold-services -w

ii. Run this command to open the shell running in the reports-web-deployment container:

kubectl exec -it <pod-name> -n  <namespace> --bash

In the above command, <pod-name> refers to the name of the pod, and <namespace> refers to the namespace that was used when deploying the Report Server.
iii. Now you will be inside the container. You need to change the current directory to /application/app_data/optional-libs by running this command:

cd /application/app_data/optional-libs

iv. Install the sudo and wget tools.

apt-get install sudo
apt-get install wget

v. Once those are installed, you have to install some required packages before you can install PhantomJS. Run this command:

sudo apt-get install build-essential chrpath libssl-dev libxft-dev libfreetype6-dev libfreetype6 libfontconfig1-dev libfontconfig1 -y

vi. Next, download the latest stable version of PhantomJS from the official website by running this command:

sudo wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2

vii. Once the download is complete, extract the downloaded archive file to the desired system location by running this command:

sudo tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/share/

Extract the downloaded file and move it to the /usr/local/share directory.
viii. Next, create a symlink of the PhantomJS binary file to the system’s bin directory by running this command:

sudo ln -s /usr/local/share/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/t

ix. Verify whether PhantomJS is installed properly by running this command:

phantomjs --version

If it shows the version number, then PhantomJS is installed properly.
After reloading the browser, you will be able to export a report that contains charts, and the exported file will include the charts.

Report Exports Containing Exported Files | Reporting Tools

Report Exports Containing Exported Files

Report embedding

Bold Reports allows you to embed reporting functionalities directly within your applications. Our embedded reporting tools can be integrated with popular application platforms such as ASP.NETCore, Blazor, Angular, React, and more. The usage of the embedded reporting tools will change depending on the deployment platform. You can find more detailed information about these differences in our documentation.

Bold Reports Kubernetes GitHub repository| Reporting Tools

Bold Reports Integrated Tools

Conclusion

Setting up a report server in Azure Kubernetes Service with Istio brings exciting opportunities to upgrade your data reporting system. Our easy-to-follow guide has shown you how to use cloud computing, Kubernetes organization, and Istio’s special features.

If you have any questions or need further assistance, please feel free to post in the comments section. Alternatively, you can reach out to us through our contact page. If you already have an account, you can log in to ask your support question directly.

Bold Reports offers a 15-day free trial with no credit card required. We invite you to start a free trial and experience Bold Reports firsthand. We value your feedback, so please let us know what you think!

0
Subscribe to my newsletter

Read articles from Bold Reports Team directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Bold Reports Team
Bold Reports Team