<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>The Ops Community ⚙️: Roman Balashevich</title>
    <description>The latest articles on The Ops Community ⚙️ by Roman Balashevich (@rbalashevich).</description>
    <link>https://community.ops.io/rbalashevich</link>
    <image>
      <url>https://community.ops.io/images/a2kiuA9XzBEgZ9pNDwdGuw21zvIKzwMrw-hGjoIngjc/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL3Vz/ZXIvcHJvZmlsZV9p/bWFnZS8xMTQyLzhi/NzNmZmQ2LWM4NTMt/NDA0Ni1iMTk1LTk0/ZGE3ODM5MTYwMy5w/bmc</url>
      <title>The Ops Community ⚙️: Roman Balashevich</title>
      <link>https://community.ops.io/rbalashevich</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://community.ops.io/feed/rbalashevich"/>
    <language>en</language>
    <item>
      <title>Pixie: an X-ray Machine for Kubernetes Traffic</title>
      <dc:creator>Roman Balashevich</dc:creator>
      <pubDate>Wed, 07 Sep 2022 21:47:40 +0000</pubDate>
      <link>https://community.ops.io/rbalashevich/pixie-an-x-ray-machine-for-kubernetes-traffic-2aeg</link>
      <guid>https://community.ops.io/rbalashevich/pixie-an-x-ray-machine-for-kubernetes-traffic-2aeg</guid>
      <description>&lt;h2&gt;
  
  
  0. Introduction and challenges
&lt;/h2&gt;

&lt;p&gt;Practice shows that it is not enough to develop a useful application or service and deploy it in Kubernetes - you also need to be sure that they work stably.&lt;/p&gt;

&lt;p&gt;Observability is tooling or a technical solution that allows teams to actively debug their system. Observability is based on exploring properties and patterns not defined in advance.&lt;/p&gt;

&lt;p&gt;Such task in decentralized systems has always been difficult.&lt;br&gt;
The variable and dynamic nature of workloads and resources is the fundamental reason why Kubernetes observability is so difficult. Rather than dealing with a single server, we now have to deal with an unknown number of them (due to autoscaling). We now have numerous distributed services rather than a single monolithic application. Dealing with latency, distributed transactions, errors, and other issues grew more difficult. &lt;/p&gt;

&lt;p&gt;The greater the level of abstraction in a decentralized system, the more difficult it is to reason about, debug, and troubleshoot it.&lt;/p&gt;

&lt;p&gt;Consider making an HTTP(s) call to an API running on a cloud provider's Kubernetes cluster. A simplified sequence diagram (drawn by Piotr Zaniewski) is shown below, with crucial parts highlighted:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/oZnSJcet7iJaU7juFw5R9mWctOYEzG698iyJjKzWdNQ/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMveXkz/cDIyY2VjOWVmYXUz/M3hxaDYuanBn" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/oZnSJcet7iJaU7juFw5R9mWctOYEzG698iyJjKzWdNQ/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMveXkz/cDIyY2VjOWVmYXUz/M3hxaDYuanBn" alt="HTTP(s) calls to an API" width="880" height="179"&gt;&lt;/a&gt;&lt;br&gt;
🎨 A full-size image is available &lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yy3p22cec9efau33xqh6.jpg"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Things can go wrong at any point in this communication chain, performance can deteriorate, security issues can arise, and so on. For operational success, knowing what's going on in the cluster and having thorough insights into every step of the communication chain is critical.&lt;/p&gt;

&lt;p&gt;And good news is that we have &lt;a href="https://github.com/pixie-io/pixie"&gt;Pixie&lt;/a&gt;, another great CNCF project, for this observability task today! &lt;/p&gt;
&lt;h2&gt;
  
  
  I. Why Pixie is a fast and precise tool
&lt;/h2&gt;

&lt;p&gt;Pixie is an open source (3.4k⭐) observability platform built by New Relic. It is very  convenient to use Pixie to view the high-level state of your cluster (service maps, cluster resources, application traffic) and also drill down into more detailed views (pod state, flame graphs, individual full-body application requests).&lt;/p&gt;

&lt;p&gt;Pixie uses &lt;a href="https://ebpf.io/what-is-ebpf/"&gt;eBPF&lt;/a&gt;, which stands for &lt;strong&gt;e&lt;/strong&gt;xtended &lt;strong&gt;B&lt;/strong&gt;erkeley &lt;strong&gt;P&lt;/strong&gt;acket &lt;strong&gt;F&lt;/strong&gt;ilter, to automatically collect telemetry data such as full-body requests, resource and network metrics, application profiles, and more. &lt;/p&gt;

&lt;p&gt;It collects, stores and queries all telemetry data locally in the cluster. Providing a granular level of observability is possible thanks to eBPF that makes the kernel programmable in a safe and performant way.&lt;/p&gt;

&lt;p&gt;Rather than relying on gauges and static counters exposed by the operating system, eBPF allows for the generation of visibility events and the collection and in-kernel aggregation of custom metrics based on a broad range of potential sources.&lt;/p&gt;

&lt;p&gt;Let’s take a look at how this works for application request tracing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/mS4pHM4YeaGxh8b9MQ1dXx22Sh1g0Z6Vs76SgUBstBg/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvcTgx/MnQ2bnhjcDhpOHds/MGdsazEucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/mS4pHM4YeaGxh8b9MQ1dXx22Sh1g0Z6Vs76SgUBstBg/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvcTgx/MnQ2bnhjcDhpOHds/MGdsazEucG5n" alt="Image description" width="747" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When Pixie is deployed to the nodes in your cluster, it deploys eBPF kernel probes that are set up to trigger on the Linux syscalls used for networking. When your application makes any network-related syscalls -- such as &lt;code&gt;send()&lt;/code&gt; and &lt;code&gt;recv()&lt;/code&gt; -- Pixie's eBPF probes snoop the data and send it to Pixie’s edge module (&lt;a href="https://docs.px.dev/about-pixie/what-is-pixie/"&gt;PEM&lt;/a&gt;, an agent). &lt;/p&gt;

&lt;p&gt;The edge module parses the data according to the detected protocol and stores the data in tables locally on the node. Looking ahead, can be mentioned that these &lt;a href="https://docs.px.dev/reference/datatables/"&gt;data tables&lt;/a&gt; can then be queried and visualized using the Pixie API, CLI or web-based UI.&lt;/p&gt;

&lt;p&gt;Btw, for your attention, CNCF's Liz Rice has told interesting things about eBPF's advantages which are meaningful in our cloud field.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/KY5qujcujfI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This increases the depth of visibility that might be attained and decreases the overall system overhead dramatically. This is achieved by collecting only the required visibility data and by producing histograms and similar data structures at the source of the event, rather than depending on the export of samples.&lt;/p&gt;

&lt;p&gt;Pixie supports EKS, GKE and AKS. The tool is modest on resources, it uses less than 5% of cluster CPU, and in most cases even less than 2%.&lt;/p&gt;

&lt;h2&gt;
  
  
  II. Does it work with a local cluster?
&lt;/h2&gt;

&lt;p&gt;🚦 The short answer is "Yes". For local development, creators recommend using Minikube with a VM driver (&lt;code&gt;kvm2&lt;/code&gt; in Linux, Kernel-based Virtual Machine driver). Unfortunately for the article's author, K3s/K3d clusters are not well-supported by Pixie. &lt;/p&gt;

&lt;p&gt;Well, we'll start with this: install Minikube, launch a  cluster and deploy in it something [painfully familiar, but]  popular. More on that below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Minikube on Ubuntu
&lt;/h3&gt;

&lt;p&gt;⚠️ To use VM drivers, verify that your system has virtualization support enabled:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;egrep -q 'vmx|svm' /proc/cpuinfo &amp;amp;&amp;amp; echo yes || echo no
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the above command outputs &lt;code&gt;no&lt;/code&gt;, ensure that your BIOS has hardware virtualization enabled.&lt;/p&gt;

&lt;p&gt;Proper installation of KVM (and &lt;code&gt;libvirt&lt;/code&gt; which is among the requirements) are highly specific to each Linux distribution. It is mandatory to have 2 virtual CPUs or more, at least 2 GB of free memory and enough of free disk space. You may find Ubuntu related instructions &lt;a href="https://help.ubuntu.com/community/KVM/Installation"&gt;here&lt;/a&gt;. Some author's notes may be useful on it.&lt;/p&gt;

&lt;p&gt;You need to ensure that your username is added to &lt;code&gt;libvirt&lt;/code&gt; and &lt;code&gt;kvm&lt;/code&gt; groups!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo adduser `id -un` libvirt
Adding user '&amp;lt;username&amp;gt;' to group 'libvirt' ...
$ sudo adduser `id -un` kvm
Adding user '&amp;lt;username&amp;gt;' to group 'kvm' ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not forget to enable and start &lt;code&gt;libvirt&lt;/code&gt; daemon:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo systemctl enable libvirtd
$ sudo systemctl start libvirtd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To make &lt;code&gt;kvm2&lt;/code&gt; the default driver:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ minikube config set driver kvm2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start Minikube:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ minikube start --driver=kvm2 --cni=flannel --cpus=2 --memory=4000 -p=pixie-cluster
☺️  [pixie-cluster] minikube v1.25.2 on Linuxmint 20.2
✨  Using the kvm2 driver based on user configuration
💾  Downloading driver docker-machine-driver-kvm2:
    &amp;gt; docker-machine-driver-kvm2-...: 65 B / 65 B [----------] 100.00% ? p/s 0s
    &amp;gt; docker-machine-driver-kvm2-...: 11.62 MiB / 11.62 MiB  100.00% 24.49 MiB
💿  Downloading VM boot image ...
    &amp;gt; minikube-v1.25.2.iso.sha256: 65 B / 65 B [-------------] 100.00% ? p/s 0s
    &amp;gt; minikube-v1.25.2.iso: 237.06 MiB / 237.06 MiB  100.00% 34.47 MiB p/s 7.1s
👍  Starting control plane node pixie-cluster in cluster pixie-cluster
🔥  Creating kvm2 VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
🐋  Preparing Kubernetes v1.23.3 on Docker 20.10.12 ...
    ▪️ kubelet.housekeeping-interval=5m
    ▪️ Generating certificates and keys ...
    ▪️ Booting up control plane ...
    ▪️ Configuring RBAC rules ...
🔗  Configuring Flannel (Container Networking Interface) ...
🔎  Verifying Kubernetes components...
    ▪️ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "pixie-cluster" cluster and "default" namespace by default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A cluster name followed by &lt;code&gt;-p&lt;/code&gt; is not mandatory. Set for convenience, but if set, it is used everywhere.&lt;/p&gt;

&lt;p&gt;⚠️ If you're getting socket permission error&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Failed to connect socket to '/var/run/libvirt/libvirt-sock'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/kubernetes/minikube/issues/7677#issuecomment-686315290"&gt;try&lt;/a&gt; to reboot so the new group &lt;code&gt;libvirt&lt;/code&gt; was actually visible for my user. You can achieve the same without rebooting by running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ exec sudo su -l $USER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  III. Deploying Pixie
&lt;/h2&gt;

&lt;p&gt;☁️ Web UI is hosted in the cloud. Visit &lt;a href="https://work.withpixie.ai/"&gt;product page&lt;/a&gt; and sign up to obtain API key which will allow you to use Pixie.&lt;/p&gt;

&lt;p&gt;Pixie's CLI is the fastest and easiest &lt;a href="https://docs.px.dev/installing-pixie/install-guides/community-cloud-for-pixie/"&gt;way to deploy&lt;/a&gt; Pixie. You can also deploy Pixie using YAML or Helm. You can use these steps to install Pixie to one or more clusters.&lt;/p&gt;

&lt;p&gt;To deploy Pixie using the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Deploy the Pixie Platform in your K8s cluster (No OLM present on cluster).
px deploy
# Deploy the Pixie Platform in your K8s cluster (OLM already exists on cluster).
px deploy --deploy_olm=false
# Deploy Pixie with a specific memory limit (2Gi is the default, 1Gi is the minimum recommended)
px deploy --pem_memory_limit=1Gi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's see what Pixie's deployment flow outputs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ px deploy --pem_memory_limit=1Gi
Pixie CLI
Running Cluster Checks:
 ✔️    Kernel version &amp;gt; 4.14.0
 ✔️    Cluster type is supported
 ✔️    K8s version &amp;gt; 1.16.0
 ✔️    Kubectl &amp;gt; 1.10.0 is present
 ✔️    User can create namespace
 ✔️    Cluster type is in list of known supported types
Installing Vizier version: 0.11.1
Generating YAMLs for Pixie
Deploying Pixie to the following cluster: pixie-cluster
Is the cluster correct? (y/n) [y] : y
Found 1 nodes
 ✔️    Installing OLM CRDs
 ✔️    Deploying OLM
 ✔️    Deploying Pixie OLM Namespace
 ✔️    Installing Vizier CRD
 ✔️    Deploying OLM Catalog
 ✔️    Deploying OLM Subscription
 ✔️    Creating namespace
 ✔️    Deploying Vizier
 ✔️    Waiting for Cloud Connector to come online
Waiting for Pixie to pass healthcheck
 ✔️    Wait for PEMs/Kelvin
 ⠇    Wait for healthcheck
 ✔️    Wait for PEMs/Kelvin
 ✔️    Wait for healthcheck
==&amp;gt; Next Steps:
Run some scripts using the px cli. For example:
- px script list : to show pre-installed scripts.
- px run px/service_stats : to run service info for sock-shop demo application (service selection coming soon!).
Check out our docs: https://docs.withpixie.ai:443.
Visit : https://work.withpixie.ai:443 to use Pixie's UI.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  IV. Prepare the payload
&lt;/h2&gt;

&lt;p&gt;As a payload and for greater proximity to the people, the author suggests deploying &lt;a href="https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/"&gt;a WordPress site&lt;/a&gt; and a MySQL database. Both applications use &lt;code&gt;PersistentVolume&lt;/code&gt;s and &lt;code&gt;PersistentVolumeClaim&lt;/code&gt;s to store data.&lt;/p&gt;

&lt;p&gt;🐘 You may decrease &lt;code&gt;storage: 20Gi&lt;/code&gt; value in YAMLs down to &lt;code&gt;2Gi&lt;/code&gt;, for example. &lt;/p&gt;

&lt;p&gt;Verify that PVs are provisioned and bound (it can take up to a few minutes) and pods are running. Then run the following command to get the IP Address for the WordPress Service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ kubectl get svc
NAME              TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP      10.96.0.1      &amp;lt;none&amp;gt;        443/TCP        14h
wordpress         LoadBalancer   10.105.33.77   &amp;lt;pending&amp;gt;     80:30140/TCP   5h31m
wordpress-mysql   ClusterIP      None           &amp;lt;none&amp;gt;        3306/TCP       5h31m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ Minikube can only expose Services through &lt;code&gt;NodePort&lt;/code&gt;. The &lt;code&gt;EXTERNAL-IP&lt;/code&gt; is &lt;em&gt;always&lt;/em&gt; &lt;code&gt;pending&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ minikube service wordpress --url -p=pixie-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the IP address (i.e.&lt;code&gt;http://192.168.39.74:30140&lt;/code&gt;) and load the page in your browser to view your site.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/Hn0CidNcqVIoC2HRXrXkCZxNCk0nYoWaZuQG0HKLbWA/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZ2s4/aGE3Zmxic2R6ZWsy/ZzNuNzYucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/Hn0CidNcqVIoC2HRXrXkCZxNCk0nYoWaZuQG0HKLbWA/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZ2s4/aGE3Zmxic2R6ZWsy/ZzNuNzYucG5n" alt="Image description" width="411" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should see the WordPress set up page similar to the following screenshot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/rzLIVeCyv_tjHsB9Ky_hduutlCOXzAjUAkchDTMfNYw/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvb3Rn/Ym5pNnFkanoyb2Fj/ZzU5bGMucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/rzLIVeCyv_tjHsB9Ky_hduutlCOXzAjUAkchDTMfNYw/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvb3Rn/Ym5pNnFkanoyb2Fj/ZzU5bGMucG5n" alt="WordPress: setting up" width="250" height="536"&gt;&lt;/a&gt;&lt;br&gt;
⚠️ Do not leave your WordPress installation on this page. &lt;br&gt;
Proceed with WordPress installation as usual - by creating a username and password, updating plugins and themes etc. Thus, it will be possible to accumulate a database of requests and traffic for analysis. Refreshing the page in the browser (with F5 key) helps with this, too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/PRDLRVuTkkB6M7Igw32djXp3QQ7E4jyOylJSXj5dGmg/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvYzlx/OHEyOGtyYm0xZmJu/cm4yeGcucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/PRDLRVuTkkB6M7Igw32djXp3QQ7E4jyOylJSXj5dGmg/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvYzlx/OHEyOGtyYm0xZmJu/cm4yeGcucG5n" alt="Image description" width="880" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  V. Pixie's web UI basic concepts
&lt;/h2&gt;

&lt;p&gt;The interface can be conditionally divided into &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a main dropdown menu containing &lt;code&gt;px script&lt;/code&gt; to execute,&lt;/li&gt;
&lt;li&gt;a panel for visualizing services in a cluster,&lt;/li&gt;
&lt;li&gt;reporting and logging panels,&lt;/li&gt;
&lt;li&gt;a hidden information panel that saves screen space and slides up, and &lt;/li&gt;
&lt;li&gt;a sidebar menu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The general view will be something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/pTtu7Bh6DFC_5mleg5PnJ9gCxyQDPM1eFprK8hIS9Tw/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMva2h2/Njlva3R3dWRlZjcw/MDMzNW4ucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/pTtu7Bh6DFC_5mleg5PnJ9gCxyQDPM1eFprK8hIS9Tw/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMva2h2/Njlva3R3dWRlZjcw/MDMzNW4ucG5n" alt="Image description" width="880" height="673"&gt;&lt;/a&gt;&lt;br&gt;
🎨 A full-size image is available &lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khv69oktwudef700335n.png"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Elements in the service visualization panel (top) can be dragged, and you can also use the mouse wheel to zoom.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/FNTIJM8QuqEN2csEsJoc1pLHFj8zgCSL6AQBSkyyo6E/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZHB2/dGJjYjEwZnV0MzBv/emp6emIucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/FNTIJM8QuqEN2csEsJoc1pLHFj8zgCSL6AQBSkyyo6E/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZHB2/dGJjYjEwZnV0MzBv/emp6emIucG5n" alt="Image description" width="460" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In fact, the entire web UI is a display of the scripts' output with various parameters and objects within the cluster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/MpJBzlqf-7V3ZSaudiZh0kTTteb-DkZCPxCIapiQUxI/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvd2xo/dzZ0ejFtbndwN2o4/dzZ0d20ucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/MpJBzlqf-7V3ZSaudiZh0kTTteb-DkZCPxCIapiQUxI/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvd2xo/dzZ0ejFtbndwN2o4/dzZ0d20ucG5n" alt="Image description" width="500" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  VI. List of scripts
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ px script list
Pixie CLI
Table ID: script_list
  NAME                                DESCRIPTION                                         
  bpftrace/capable                    Capable                                             
  bpftrace/dc_snoop                   DC Snoop                                            
  bpftrace/exec_snoop                 Exec Snoop                                          
  bpftrace/md_flush                   MD Flush                                            
  bpftrace/nap_time                   NAP Time                                            
  bpftrace/oom_kill                   OOM Killer                                          
  bpftrace/sync_snoop                 Sync Snoop                                          
  bpftrace/tcp_drops                  TCP drops                                           
  bpftrace/tcp_retransmits            TCP retransmissions                                 
  px/agent_status                     Get agent status.                                   
  px/cluster                          Cluster Overview                                    
  px/cql_data                         Sample CQL Data                                     
  px/cql_stats                        CQL Pod LET metrics                                 
  px/dns_data                         Raw DNS Data                                        
  px/dns_flow_graph                   DNS Flow Graph                                      
  px/dns_query_summary                DNS Queries Overview                                
  px/funcs                            Get a list all of all funcs available in Pixie.     
  px/http_data                        HTTP Data                                           
  px/http_data_filtered               Sample HTTP Data                                    
  px/http_post_requests               Sample HTTP POST Data                               
  px/http_request_stats               HTTP Requests Statistics by Service                 
  px/inbound_conns                    Inbound Connections                                 
  px/ip                               Traffic to/from IP                                  
  px/jvm_data                         JVM stats                                           
  px/jvm_stats                        JVM Stats per Pod                                   
  px/kafka_consumer_rebalancing       Kafka Consumer Rebalancing Events                   
  px/kafka_data                       Kafka messages                                      
  px/kafka_overview                   Kafka Overview                                      
  px/kafka_producer_consumer_latency  Kafka producer-consumer latency                     
  px/largest_http_request             Largest HTTP Request                                
  px/most_http_data                   Pod, Endpoint pair with most HTTP Data Transferred  
  px/mysql_data                       MySQL Data                                          
  px/mysql_flow_graph                 MySQL Flow Graph                                    
  px/mysql_stats                      MySQL Pod LET metrics                               
  px/namespace                        Namespace Overview                                  
  px/namespaces                       Namespaces Overview                                 
  px/nats_data                        NATS data                                           
  px/net_flow_graph                   Network Flow                                        
  px/network_stats                    Network Stats                                       
  px/node                             Node overview                                       
  px/nodes                            Nodes overview                                      
  px/outbound_conns                   Outbound Connections                                
  px/perf_flamegraph                  Flamegraph                                          
  px/pgsql_data                       Postgres Data                                       
  px/pgsql_flow_graph                 PostgreSQL Flow Graph                               
  px/pgsql_stats                      PostgreSQL Pod LET metrics                          
  px/pid_memory_usage                 Memory Usage of Processes.                          
  px/pixie_quality_metrics            Metrics that sample Pixie's collectors              
  px/pod                              Pod Overview                                        
  px/pod_edge_stats                   Pod to Pod SLAs                                     
  px/pod_lifetime_resource            Total resource usage over pod lifetime.             
  px/pod_memory_usage                 Memory Usage of Processes                           
  px/pods                             Pods Overview                                       
  px/redis_data                       Redis RPC messages                                  
  px/redis_flow_graph                 Redis Flow Graph                                    
  px/redis_stats                      Redis Pod LET metrics                               
  px/schemas                          Get all the table schemas available in the system   
  px/service                          Service Overview                                    
  px/service_edge_stats               Basic Service to Service SLAs                       
  px/service_resource_usage           Resource Usage of Services.                         
  px/service_stats                    Basic service SLAs.                                 
  px/services                         Services Overview                                   
  px/slow_http_requests               Sample of Slow Requests                             
  px/sql_queries                      Normalized SQL Queries                              
  px/sql_query                        SQL Query Params                                    
  px/tcp_drops                        TCP drops                                           
  px/tcp_retransmits                  TCP retransmissions                                 
  px/tracepoint_status                Tracepoint Overview                                 
  px/upids                            UPIDs                                               
  pxbeta/pii_cluster_egress           Traffic containing PII leaving the cluster          
  pxbeta/service_endpoint             Endpoint Overview                                   
  pxbeta/service_endpoints            Endpoints Overview                                  
  pxbeta/vfs_snoop                    VFS Write/Delete Snoop                              
  sotw/dns_external_fqdn_list         Lists external FQDNs from DNS traffic.              
  sotw/dns_queries_filtered           All DNS queries filtered by a specific query nameTTP Data                                           
  px/http_data_filtered               Sample HTTP Data                                    
  px/http_post_requests               Sample HTTP POST Data                               
  px/http_request_stats               HTTP Requests Statistics by Service                 
  px/inbound_conns                    Inbound Connections                                 
  px/ip                               Traffic to/from IP                                  
  px/jvm_data                         JVM stats                                           
  px/jvm_stats                        JVM Stats per Pod                                   
  px/kafka_consumer_rebalancing       Kafka Consumer Rebalancing Events                   
  px/kafka_data                       Kafka messages                                      
  px/kafka_overview                   Kafka Overview                                      
  px/kafka_producer_consumer_latency  Kafka producer-consumer latency                     
  px/largest_http_request             Largest HTTP Request                                
  px/most_http_data                   Pod, Endpoint pair with most HTTP Data Transferred  
  px/mysql_data                       MySQL Data                                          
  px/mysql_flow_graph                 MySQL Flow Graph                                    
  px/mysql_stats                      MySQL Pod LET metrics                               
  px/namespace                        Namespace Overview                                  
  px/namespaces                       Namespaces Overview                                 
  px/nats_data                        NATS data                                           
  px/net_flow_graph                   Network Flow                                        
  px/network_stats                    Network Stats                                       
  px/node                             Node overview                                       
  px/nodes                            Nodes overview                                      
  px/outbound_conns                   Outbound Connections                                
  px/perf_flamegraph                  Flamegraph                                          
  px/pgsql_data                       Postgres Data                                       
  px/pgsql_flow_graph                 PostgreSQL Flow Graph                               
  px/pgsql_stats                      PostgreSQL Pod LET metrics                          
  px/pid_memory_usage                 Memory Usage of Processes.                          
  px/pixie_quality_metrics            Metrics that sample Pixie's collectors              
  px/pod                              Pod Overview                                        
  px/pod_edge_stats                   Pod to Pod SLAs                                     
  px/pod_lifetime_resource            Total resource usage over pod lifetime.             
  px/pod_memory_usage                 Memory Usage of Processes                           
  px/pods                             Pods Overview                                       
  px/redis_data                       Redis RPC messages                                  
  px/redis_flow_graph                 Redis Flow Graph                                    
  px/redis_stats                      Redis Pod LET metrics                               
  px/schemas                          Get all the table schemas available in the system   
  px/service                          Service Overview                                    
  px/service_edge_stats               Basic Service to Service SLAs                       
  px/service_resource_usage           Resource Usage of Services.                         
  px/service_stats                    Basic service SLAs.                                 
  px/services                         Services Overview                                   
  px/slow_http_requests               Sample of Slow Requests                             
  px/sql_queries                      Normalized SQL Queries                              
  px/sql_query                        SQL Query Params                                    
  px/tcp_drops                        TCP drops                                           
  px/tcp_retransmits                  TCP retransmissions                                 
  px/tracepoint_status                Tracepoint Overview                                 
  px/upids                            UPIDs                                               
  pxbeta/pii_cluster_egress           Traffic containing PII leaving the cluster          
  pxbeta/service_endpoint             Endpoint Overview                                   
  pxbeta/service_endpoints            Endpoints Overview                                  
  pxbeta/vfs_snoop                    VFS Write/Delete Snoop                              
  sotw/dns_external_fqdn_list         Lists external FQDNs from DNS traffic.              
  sotw/dns_queries_filtered           All DNS queries filtered by a specific query name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  VII. How about practice? Popular queries
&lt;/h2&gt;

&lt;p&gt;With Pixie, observability may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐞 &lt;a href="https://docs.px.dev/tutorials/pixie-101/request-tracing/"&gt;full-body application HTTP requests&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;🐞 &lt;a href="https://docs.px.dev/tutorials/pixie-101/profiler/"&gt;application profiles&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;🐞 &lt;a href="https://docs.px.dev/tutorials/pixie-101/network-monitoring/"&gt;network health metrics&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;🐞 &lt;a href="https://docs.px.dev/tutorials/pixie-101/infra-health/"&gt;infrastructure health metrics&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;🐞 &lt;a href="https://docs.px.dev/tutorials/pixie-101/database-query-profiling/"&gt;database query profiles&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐞 Full-body HTTP request
&lt;/h3&gt;

&lt;p&gt;The involved sripts are &lt;code&gt;px/http_data_filtered&lt;/code&gt; and `px/http_request_stats.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/eZyTssGpKeVlBKWWaf90cfx-TrEiy-TaezI3miNP6Dc/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvYnpn/MmV3Z2VoY2R0enll/ODZ3aWsucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/eZyTssGpKeVlBKWWaf90cfx-TrEiy-TaezI3miNP6Dc/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvYnpn/MmV3Z2VoY2R0enll/ODZ3aWsucG5n" alt="Image description" width="880" height="222"&gt;&lt;/a&gt;&lt;br&gt;
🎨 A full-size image is available &lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bzg2ewgehcdtzye86wik.png"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;💡 Substituting &lt;a href="https://en.wikipedia.org/wiki/List_of_HTTP_status_codes"&gt;HTTP error codes&lt;/a&gt; such as &lt;code&gt;500&lt;/code&gt; you may investigate problematic services or pods. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/ft_DL9GeE1HEsA9enPrkel-LfpgXZbmetQrlVqFVZR8/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvcmMz/OXk3MXRiN3g2Nnh5/OG8yMG4ucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/ft_DL9GeE1HEsA9enPrkel-LfpgXZbmetQrlVqFVZR8/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvcmMz/OXk3MXRiN3g2Nnh5/OG8yMG4ucG5n" alt="Image description" width="844" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐞 Application profiles
&lt;/h3&gt;

&lt;p&gt;The involved scripts are &lt;code&gt;px/namespace&lt;/code&gt; and &lt;code&gt;px/pod&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🐞 Network health metrics
&lt;/h3&gt;

&lt;p&gt;The involved scripts are &lt;code&gt;px/net_flow_graph&lt;/code&gt;, &lt;code&gt;px/dns_flow_graph&lt;/code&gt;, &lt;code&gt;px/tcp_drops&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🐞 Infra health metrics
&lt;/h3&gt;

&lt;p&gt;The involved scripts is &lt;code&gt;px/nodes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/qux-7hsKoqDvIHY8-m7rZEj-MiN4whuJi-BK3LGjAa0/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvNWcz/emtmMmYwZGUxaXVj/aDl2ZWYucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/qux-7hsKoqDvIHY8-m7rZEj-MiN4whuJi-BK3LGjAa0/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvNWcz/emtmMmYwZGUxaXVj/aDl2ZWYucG5n" alt="Image description" width="880" height="197"&gt;&lt;/a&gt;&lt;br&gt;
🎨 A full-size image is available &lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5g3zkf2f0de1iuch9vef.png"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/ZHH8Is32VwC9kjlezuZYeSWjQIBvo5ExMUtMckUxoaw/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvMzU0/OW41NmZqNDgzeG1z/dXpxdnEucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/ZHH8Is32VwC9kjlezuZYeSWjQIBvo5ExMUtMckUxoaw/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvMzU0/OW41NmZqNDgzeG1z/dXpxdnEucG5n" alt="Image description" width="242" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐞 Database query profiles
&lt;/h3&gt;

&lt;p&gt;The involved scripts are &lt;code&gt;px/mysql_stats&lt;/code&gt; and &lt;code&gt;px/sql_queries&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/P_mn4UoL3S6UH11FKRElfsAzs0Q9ZXnx-EZWpLViTkM/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvcmU1/ODc2dmY1aW5oNHFp/NTNwaDEucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/P_mn4UoL3S6UH11FKRElfsAzs0Q9ZXnx-EZWpLViTkM/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvcmU1/ODc2dmY1aW5oNHFp/NTNwaDEucG5n" alt="Image description" width="880" height="421"&gt;&lt;/a&gt;&lt;br&gt;
🎨 A full-size image is available &lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/re5876vf5inh4qi53ph1.png"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Query latencies are visible at a glance, too:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/dnrLrDqaWVkGwFZ96TqTT6qj_OJmfHWCliH9RSSYEr8/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZnBq/MjFsbnE5Nmd3OGl5/cGw0M24ucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/dnrLrDqaWVkGwFZ96TqTT6qj_OJmfHWCliH9RSSYEr8/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZnBq/MjFsbnE5Nmd3OGl5/cGw0M24ucG5n" alt="Image description" width="581" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Based on these data, you can think further, to optimize the operation of the DBMS, but this is a completely different story that goes beyond the scope of this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  VII. Conclusion
&lt;/h2&gt;

&lt;p&gt;Pixie is one of a handful of observability tools that offer eBPF or kernel-level observability. Other ones are &lt;a href="https://community.ops.io/rbalashevich/cilium-ebpf-powered-cni-a-nos-solution-for-modern-clouds-527a"&gt;Cilium, see author's previous article&lt;/a&gt;, and &lt;a href="https://www.mantisnet.com/containerized-visibility-fabric-cvf"&gt;CVF&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/2y0a3j0lwHDDZP-pEIAGngZnQDOOFGm6cxCxKfr87F4/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvM243/ZXlpcDdxbzRzcndm/bzBhYTgucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/2y0a3j0lwHDDZP-pEIAGngZnQDOOFGm6cxCxKfr87F4/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvM243/ZXlpcDdxbzRzcndm/bzBhYTgucG5n" alt="eBPF capable observability tools" width="300" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With a single CLI command, developers are able to see all of their applications’ metrics, events, logs, and traces. Pixie’s technology removes the need to add instrumentation code, set up ad hoc dashboards, or move data off of the cluster, saving developers valuable time so they can focus instead on building better software. &lt;/p&gt;

&lt;p&gt;Skip the code changes and get instant Kubernetes observability! Good luck.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>ebpf</category>
      <category>o11y</category>
    </item>
    <item>
      <title>Cilium: eBPF powered CNI, a NOS Solution for Modern Clouds</title>
      <dc:creator>Roman Balashevich</dc:creator>
      <pubDate>Fri, 29 Jul 2022 18:59:00 +0000</pubDate>
      <link>https://community.ops.io/rbalashevich/cilium-ebpf-powered-cni-a-nos-solution-for-modern-clouds-527a</link>
      <guid>https://community.ops.io/rbalashevich/cilium-ebpf-powered-cni-a-nos-solution-for-modern-clouds-527a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a repost of my latest &lt;a href="https://dev.to/otomato_io/cilium-ebpf-powered-cni-a-nos-solution-for-modern-clouds-1hl1"&gt;article&lt;/a&gt; of July 2022 written for Otomato on Dev.to.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOS&lt;/strong&gt; stands for &lt;strong&gt;N&lt;/strong&gt;etworking, &lt;strong&gt;O&lt;/strong&gt;bservability, and &lt;strong&gt;S&lt;/strong&gt;ecurity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Some details are good to be repeated
&lt;/h2&gt;

&lt;p&gt;Well, you could know that Kubernetes uses &lt;code&gt;iptables&lt;/code&gt; for &lt;code&gt;kube-proxy&lt;/code&gt;, the component which implements &lt;a href="https://kubernetes.io/docs/concepts/services-networking/service/"&gt;services&lt;/a&gt; and &lt;a href="https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/"&gt;load balancing&lt;/a&gt; by &lt;code&gt;DNAT&lt;/code&gt; iptables rules, and also the most of CNI plugins are using &lt;code&gt;iptables&lt;/code&gt; for Network Policies.&lt;/p&gt;

&lt;p&gt;Performance suffers when there is a lot of traffic or when there have been many changes made to the &lt;code&gt;iptables&lt;/code&gt; rules in a system. As the number of services increases, measurements show unexpected latency and decreased performance.&lt;/p&gt;

&lt;p&gt;To overcome these troubles, eBPF technology was invented. It had been eventually implemented in Linux kernel 3.18. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Making full use of eBPF requires at least Linux 4.4 or above!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;e[xtended]BPF, as we know it today, was created by Alexei Starovoitov and Daniel Borkmann, who are still maintainers but are joined by over a hundred contributors. Looking ahead, it is important to note that Daniel now works for Isovalent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ebpf.io/what-is-ebpf/"&gt;eBPF&lt;/a&gt;, which stands for extended Berkeley Packet Filter, is a linux kernel feature that allows to automatically collect network telemetry data such as full-body requests, resource and network metrics, application profiles, and more. &lt;/p&gt;

&lt;p&gt;eBPF mechanics are useful when we need to collect, query and proceed with all telemetry data in the cluster. Providing a granular level of observability is possible thanks to eBPF that makes the kernel programmable in a safe and performant way.&lt;/p&gt;

&lt;p&gt;Rather than relying on gauges and static counters exposed by the operating system, eBPF allows for the generation of visibility events and the collection and in-kernel aggregation of custom metrics based on a broad range of potential sources.&lt;/p&gt;

&lt;p&gt;With the advent of eBPF, you could add logic to the kernel from user-space rather than altering the kernel code. This technique is significantly safer because to eBPF, in addition to being simplified. By implementing safety checks, the eBPF verification process ensures that the eBPF code you load into your kernel is secure to execute. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/iQvP9WeiFgqP_ZncE-JrF8nNagekRYsgsbteVRs1Snk/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvbzd2/OWQ5NWRvcXdpbWlw/aXNxZ3oucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/iQvP9WeiFgqP_ZncE-JrF8nNagekRYsgsbteVRs1Snk/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvbzd2/OWQ5NWRvcXdpbWlw/aXNxZ3oucG5n" alt="Image description" width="500" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For instance, it ensures and enforces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your program runs in a limited amount of CPU time (no indefinite loops);&lt;/li&gt;
&lt;li&gt;your program does not crash or produce harmful, fatal bugs;&lt;/li&gt;
&lt;li&gt;your eBPF code is being loaded by a process with the necessary permissions;&lt;/li&gt;
&lt;li&gt;your code has a size restriction;&lt;/li&gt;
&lt;li&gt;no unreachable code is permitted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, think of it as a lightweight, fully-sandboxed virtual machine (VM) inside the Linux kernel. eBPF programs are event based, and are executed on a specific hook, such as network events, system calls, function entries, and kernel trace points.&lt;/p&gt;

&lt;h3&gt;
  
  
  Popular Projects Powered by eBPF
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/otomato_io/pixie-an-x-ray-machine-for-kubernetes-traffic-23pd"&gt;Pixie&lt;/a&gt;, application troubleshooting platform for Kubernetes&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://isovalent.com/product/"&gt;Cilium by Isovalent&lt;/a&gt;, eBPF Networking, Security and Observability for Kubernetes&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://falco.org/"&gt;Falco&lt;/a&gt; ,  cloud-native runtime security&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.aquasec.com/products/tracee/"&gt;Tracee  by Aqua&lt;/a&gt;, runtime security and forensics&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.tigera.io/tigera-products/calico-enterprise/"&gt;Calico by Tigera&lt;/a&gt;, a direct competitor to Cilium as the CNI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is Cilium? What it features?
&lt;/h2&gt;

&lt;p&gt;In order to fulfill the networking, security, and visibility requirements of container workloads, Cilium is an open source project built on top of eBPF. On top of eBPF, it offers a high-level abstraction. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What Kubernetes and container runtimes are to the Linux kernel's &lt;code&gt;namespaces&lt;/code&gt;, &lt;code&gt;cgroups&lt;/code&gt;, and &lt;code&gt;seccomp&lt;/code&gt;, Cilium is to the eBPF: the appropriate abstraction layer above it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/sXD8zGOGwRAst-Cc-Va3BHox1c5c7uI6sWzrtr-xCaE/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZ3h0/cWF1N3B4b3lzZXo2/djRuOWYucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/sXD8zGOGwRAst-Cc-Va3BHox1c5c7uI6sWzrtr-xCaE/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZ3h0/cWF1N3B4b3lzZXo2/djRuOWYucG5n" alt="Image description" width="880" height="784"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Least Privilege security paradigm for network policy
&lt;/h3&gt;

&lt;p&gt;Implementing the Least Privilege security when your K8s pods communicate with one another is a recommended practice. The fundamental &lt;a href="https://kubernetes.io/docs/concepts/services-networking/network-policies/"&gt;K8s Network Policies&lt;/a&gt; (which function at L3/L4) are effective, but Cilium Network Policies allow you to improve upon them (operate broader, at L3-L7).&lt;/p&gt;

&lt;p&gt;In the age of K8s and microservices, this can be quite helpful because monitoring and regulating network traffic with metadata (such as IPs and ports) doesn't add much value. As services arrive and leave, IPs and ports are always changing. &lt;/p&gt;

&lt;p&gt;The approach's flexibility is that you can manage the traffic with Cilium by using Pod, HTTP, gRPC, Kafka, DNS, &lt;a href="https://docs.cilium.io/en/stable/policy/language/#layer-7-examples"&gt;and other metadata&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For instance, you can create &lt;a href="https://isovalent.com/blog/post/cilium-release-112/"&gt;HTTP rules&lt;/a&gt; that specify the &lt;code&gt;route&lt;/code&gt;, &lt;code&gt;header&lt;/code&gt;, and &lt;code&gt;request&lt;/code&gt; methods that let a particular Pod to make a specific API call. Another example is creating DNS rules based on &lt;code&gt;FQDN&lt;/code&gt; to restrict access to only certain domains. Because of this, we are able to establish security policies that are more beneficial and practical for our real-world use-cases. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/dD8Umwo5m9986ewNjWBjALdx4JEZKenmPRZGWt1y2Ro/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvcDZr/aXdld2dhYTh1cDVi/a3R5bDAucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/dD8Umwo5m9986ewNjWBjALdx4JEZKenmPRZGWt1y2Ro/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvcDZr/aXdld2dhYTh1cDVi/a3R5bDAucG5n" alt="Image description" width="706" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With Cilium v1.12 you may even install a route which informs other endpoints that the Pod is now unreachable (i.e., when a Pod is deleted)!&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Cluster Connectivity &amp;amp; Load Balancing
&lt;/h3&gt;

&lt;p&gt;Cilium enables K8s pods to communicate and be discovered across K8s clusters by utilizing a cluster mesh. High Availability and Multi-Cloud are a few use scenarios (connecting K8s clusters across cloud providers).&lt;/p&gt;

&lt;p&gt;With Cilium, services are now capable of understanding topology and affinity. This means that instead of balancing evenly across load-balancing backends, you can &lt;a href="https://docs.cilium.io/en/latest/gettingstarted/clustermesh/affinity/"&gt;choose to prefer backends&lt;/a&gt; only in the local or remote clusters.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kube-proxy&lt;/code&gt; &lt;a href="https://docs.cilium.io/en/stable/gettingstarted/kubeproxy-free/"&gt;may be changed to Cilium&lt;/a&gt; for eBPF; &lt;code&gt;iptables&lt;/code&gt;, &lt;a href="https://docs.cilium.io/en/v1.12/_images/kubernetes_iptables.svg"&gt;which is being superseded&lt;/a&gt; by eBPF, is used by &lt;code&gt;kube-proxy&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/Y2QPpm0Z9DyOgKjpdBUeq2qvoIUWKuT5rXpFbkSMFfY/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZnBz/dGxmNDltYjN0bTA4/eXZxMTIucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/Y2QPpm0Z9DyOgKjpdBUeq2qvoIUWKuT5rXpFbkSMFfY/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvZnBz/dGxmNDltYjN0bTA4/eXZxMTIucG5n" alt="Image description" width="880" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a result, performance is significantly enhanced by this adjustment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cilium's “underwater” features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Between-pod transparent encryption. Support for IPsec and Wireguard protocols&lt;/li&gt;
&lt;li&gt;Network Performance Improvement&lt;/li&gt;
&lt;li&gt;Infra Scalability&lt;/li&gt;
&lt;li&gt;Enhanced visibility of traffic flows, including L7 protocols, in addition to IPs and ports. &lt;/li&gt;
&lt;li&gt;Monitoring and better network fault visibility between your microservices Metrics that work with Prometheus are offered by Cilium.
&lt;img src="https://community.ops.io/images/C6PJXRPJrYG76k-xX6cVsOXAw5eNiCj3tL5e85xIM9I/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvbDEz/ZnNkaDNyb2xiejVt/M2o1N28ucG5n" alt="Image description" width="728" height="691"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cilium CNI supports Layer 7 (L7) policies. It &lt;a href="https://www.cncf.io/blog/2022/07/22/exploring-cilium-layer-7-capabilities-compared-to-istio/"&gt;competes with Istio&lt;/a&gt; on such feature. Cilium’s Layer 7 policy is simple to use with its own &lt;a href="https://github.com/envoyproxy/envoy"&gt;Envoy&lt;/a&gt; &amp;amp; proxylib based filter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observability matters!
&lt;/h3&gt;

&lt;p&gt;Cilium team also offers &lt;a href="https://github.com/cilium/hubble"&gt;Hubble&lt;/a&gt; (yes, the name is the same as the famous far space crawling telescope's one, but for clouds), which is a fully distributed networking and security observability platform for cloud native workloads. Hubble is open source software and built on top of Cilium and eBPF to enable deep visibility into the communication and behavior of services as well as the networking infrastructure in a completely transparent manner.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/C7f5kjoHnPfPG_RXS5A3Tnkt__F6JnoaJKxMcX55PAs/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvYnF5/bzB5cmNldDR5YnQ5/NmFsdXUucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/C7f5kjoHnPfPG_RXS5A3Tnkt__F6JnoaJKxMcX55PAs/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvYnF5/bzB5cmNldDR5YnQ5/NmFsdXUucG5n" alt="Image description" width="880" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Only pods that are a part of the Cilium agent's network can have policies enforced on them. Unmanaged pods are frequently the outcome of delivering workloads to a cluster before installing or running Cilium, which can lead to the platform missing any recently produced pods in your environment. To identify which pods are not managed by the platform, you can compare a node's total pod count with the number of Cilium-managed pods on it (endpoint state).&lt;/p&gt;

&lt;p&gt;According to Cilium's &lt;a href="https://docs.cilium.io/en/stable/policy/lifecycle/"&gt;endpoint lifecycle&lt;/a&gt;, the metric's &lt;code&gt;state&lt;/code&gt; tag &lt;a href="https://docs.cilium.io/en/stable/operations/metrics/#cilium-agent"&gt;offers further details&lt;/a&gt; about the stage that a set of endpoints are in. This allows you to keep track of how each of your pods is doing when Cilium applies and modifies network restrictions. The agent may be refreshing its networking configuration, for instance, if several endpoints have the regenerating status. It's crucial to keep an eye on pods in this condition to make sure they receive the required policy updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/OBTwXx3LZmNlMIZs3klaJGeuYazguOlEsTa_L5WEC64/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvamR3/NTk4cTVqOWVlY3Q5/MGxoMzQucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/OBTwXx3LZmNlMIZs3klaJGeuYazguOlEsTa_L5WEC64/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvamR3/NTk4cTVqOWVlY3Q5/MGxoMzQucG5n" alt="Image description" width="847" height="462"&gt;&lt;/a&gt;&lt;br&gt;
And no one understood &lt;a href="https://www.datadoghq.com/blog/cilium-metrics-and-architecture/"&gt;Cilium based monitoring's nuances&lt;/a&gt; better than Datadog team. The illustration belongs to them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.cilium.io/en/v1.12/operations/metrics/#hubble-metrics"&gt;Hubble's metrics&lt;/a&gt;, in contrast to &lt;a href="https://docs.cilium.io/en/v1.12/operations/metrics/#cilium-metrics"&gt;Cilium metrics&lt;/a&gt;, allow you to keep an eye on the connectivity and security of the network in which your Cilium-managed Kubernetes pods are operating.&lt;/p&gt;
&lt;h2&gt;
  
  
  “How can I benefit from this?”
&lt;/h2&gt;

&lt;p&gt;Well, the author's conviction: if useless to the masses, no new technology is needed!&lt;/p&gt;
&lt;h3&gt;
  
  
  GCP GKE
&lt;/h3&gt;

&lt;p&gt;☁️ Google had already introduced so-called GKE Dataplane V2, an opinionated data plane that harnesses the power of eBPF and Cilium, in mid-2021. They also use Dataplane V2 to bring Kubernetes Network Policy logging to Google Kubernetes Engine (GKE).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/yhEVVcFRH5iM8X9FcFLtKDJhJAtbTutD1ORRRJG8Gw4/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvODlv/NHhoc3JzeXZxdTl1/aGFiczAucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/yhEVVcFRH5iM8X9FcFLtKDJhJAtbTutD1ORRRJG8Gw4/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvODlv/NHhoc3JzeXZxdTl1/aGFiczAucG5n" alt="Image description" width="880" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To try out Kubernetes Network Policy logging for yourself, create &lt;a href="http://cloud.google.com/kubernetes-engine/docs/how-to/dataplane-v2"&gt;a new GKE cluster with Dataplane V2&lt;/a&gt; using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gcloud container clusters create &amp;lt;cluster-name&amp;gt; \
    --enable-dataplane-v2 \
    --enable-ip-alias \
    --release-channel rapid \
    {--region region-name | --zone zone-name}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The configuration of the Cilium agent and the Cilium Network Policy determines whether an endpoint &lt;a href="https://docs.cilium.io/en/v1.12/policy/intro/"&gt;accepts traffic&lt;/a&gt; from a source or not.  Network policy enforcement is built into GKE Dataplane V2. You do not need to enable network policy enforcement in clusters that use GKE Dataplane V2.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/wQbTC7NZsfwWsNB_QrXLNP7hG1q6kKmvtLyzjJgNNjc/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvM2cw/aXEwZGJ4czdrbHoz/NnN6cHoucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/wQbTC7NZsfwWsNB_QrXLNP7hG1q6kKmvtLyzjJgNNjc/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMvM2cw/aXEwZGJ4czdrbHoz/NnN6cHoucG5n" alt="Image description" width="880" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS EKS
&lt;/h3&gt;

&lt;p&gt;☁️ If you are on AWS, know the fact &lt;a href="https://anywhere.eks.amazonaws.com/docs/tasks/workload/networking-and-security/"&gt;EKS Anywhere uses Cilium&lt;/a&gt; for pod networking and security.&lt;/p&gt;

&lt;p&gt;Every form of Pod to Pod communication is by default permitted within a Kubernetes cluster. Although it might encourage experimentation, this flexibility is not seen as secure. You can limit network traffic between pods (often referred to as East/West traffic) and between pods and external services using Kubernetes network policies. The levels 3 and 4 of the OSI model are where Kubernetes network policies operate. Network policies can also employ IP addresses, port numbers, protocol numbers, or a combination of these to identify source and destination pods in addition to pod selectors and labels. Tigera's Calico is an open source policy engine that is compatible with EKS.&lt;/p&gt;

&lt;p&gt;When combined with Istio, Calico enables expanded network policies with a broader set of functionality, including support for layer 7 rules, such as HTTP, in addition to providing the entire set of Kubernetes network policy features. The Cilium developers, Isovalent, have also expanded the network policies to offer a limited amount of support for layer 7 rules, such as HTTP. For limiting communication between Kubernetes Services/Pods and resources that run inside or outside of your VPC, Cilium additionally supports DNS hostnames.&lt;/p&gt;

&lt;h3&gt;
  
  
  Azure AKS
&lt;/h3&gt;

&lt;p&gt;☁️ If you are on Azure, you may know AKS has only officially supported two CNI’s, Kubenet and Azure CNI. In April 2022 when they &lt;a href="https://docs.microsoft.com/en-us/azure/aks/use-byo-cni?tabs=azure-cli"&gt;announced&lt;/a&gt; the ability to create an AKS cluster with no CNI. This means you can deploy any CNI you would like. In &lt;a href="https://pixelrobots.co.uk/2022/04/bring-your-own-container-network-interface-cni-plugin-with-azure-kubernetes-service-aks-preview/"&gt;this blog post&lt;/a&gt;, British MVPs from Pixel Robots show how to create an AKS cluster &lt;em&gt;with no CNI&lt;/em&gt; and then... deploy Cilium!&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenShift
&lt;/h3&gt;

&lt;p&gt;☁️ OpenShift: Cilium can also be installed on traditional VMs or bare-metal servers. OpenShift platform teams &lt;a href="https://isovalent.com/blog/post/2022-03-openshift/"&gt;are able to implement label-based controls&lt;/a&gt; on the communication between application pods and external nodes by permitting VMs or bare-metal servers to join the Cilium cluster. On the other hand, the external nodes will have access to the cluster services and be able to resolve cluster names.&lt;/p&gt;

&lt;h3&gt;
  
  
  k3s &amp;amp; minikube
&lt;/h3&gt;

&lt;p&gt;☁️ Eventually, you can play with Cilium &lt;a href="https://docs.cilium.io/en/stable/gettingstarted/k3s/"&gt;on k3s&lt;/a&gt;, or even &lt;a href="https://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy/"&gt;on minikube&lt;/a&gt;, just in the garage. 🚜 &lt;/p&gt;

&lt;p&gt;Moreover, by learning well with this chic &lt;a href="https://editor.cilium.io/"&gt;Network Policy editor&lt;/a&gt; from Cilium, you will be able to expand the functionality of your laboratory stage. Manifests which designed there can be downloaded.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/LsouxqLCY_YVSfAg_cNdVP9gpopjryLWa3XuDa9yMik/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMveDUx/cmMyM2l5aXJnMXUw/d2hwaTUucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/LsouxqLCY_YVSfAg_cNdVP9gpopjryLWa3XuDa9yMik/w:880/mb:500000/ar:1/aHR0cHM6Ly9kZXYt/dG8tdXBsb2Fkcy5z/My5hbWF6b25hd3Mu/Y29tL3VwbG9hZHMv/YXJ0aWNsZXMveDUx/cmMyM2l5aXJnMXUw/d2hwaTUucG5n" alt="Image description" width="492" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Hands-on labs on Instruqt®
&lt;/h3&gt;

&lt;p&gt;You may try &lt;a href="https://play.instruqt.com/isovalent/tracks/cilium-getting-started"&gt;these interactive labs&lt;/a&gt; to learn more about the Cilium technology. You can learn and experiment in each lab's specialized live environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good wishes &amp;amp; who else to read
&lt;/h2&gt;

&lt;p&gt;Deploy with care! &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:6957047287730589696/"&gt;Strive to have gurus by your side!&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The author wish to thank Yarel Maman, Johann Rehberger, Chris Mutchler, Lin Sun, Arthur Chiao, Glen Yu and  Richard Hooper for their contribution to community. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;P.S.: Hardcore devs may find some technical details &lt;a href="http://arthurchiao.art/blog/cracking-k8s-network-policy/"&gt;here&lt;/a&gt; and &lt;a href="https://cilium.io/blog/2018/10/23/cilium-13-envoy-go/"&gt;here&lt;/a&gt;, on L7 parsing with proxylib in Golang.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>ebpf</category>
      <category>o11y</category>
    </item>
  </channel>
</rss>
