<?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 ⚙️: Gulcan Topcu</title>
    <description>The latest articles on The Ops Community ⚙️ by Gulcan Topcu (@gulcantopcu).</description>
    <link>https://community.ops.io/gulcantopcu</link>
    <image>
      <url>https://community.ops.io/images/fKzA16G8h6S_GLv3cFbtfacGFQ7iAbdvZ-SWlE8F41g/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL3Vz/ZXIvcHJvZmlsZV9p/bWFnZS8zMzEwLzk0/MTUwMzE5LTNhMmUt/NDA2NS04NjI4LTM5/ZmUwZmIyZjMxYi5w/bmc</url>
      <title>The Ops Community ⚙️: Gulcan Topcu</title>
      <link>https://community.ops.io/gulcantopcu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://community.ops.io/feed/gulcantopcu"/>
    <language>en</language>
    <item>
      <title>Hacking Alibaba Cloud's Kubernetes Cluster</title>
      <dc:creator>Gulcan Topcu</dc:creator>
      <pubDate>Tue, 02 Jul 2024 06:34:03 +0000</pubDate>
      <link>https://community.ops.io/gulcantopcu/hacking-alibaba-clouds-kubernetes-cluster-3g11</link>
      <guid>https://community.ops.io/gulcantopcu/hacking-alibaba-clouds-kubernetes-cluster-3g11</guid>
      <description>&lt;p&gt;Hacking Alibaba Cloud's Kubernetes Cluster with Hillai Ben-Sasson &amp;amp;Ronen Shustin, Security Researchers at Wiz and Bart Farrell, KubeFM Host&lt;/p&gt;

&lt;p&gt;Securing Kubernetes clusters is one of the toughest challenges in cloud security, but for Ronen Shustin and Hillai Ben-Sasson at Wiz, it's just another day at work. These top-tier researchers are fearless in diving into the deep end. Their latest exploit? Cracking Alibaba Cloud's Kubernetes clusters through clever PostgreSQL vulnerabilities.&lt;/p&gt;

&lt;p&gt;Join Bart Farell as he dives into how their innovative approach identifies vulnerabilities and enhances the overall security of cloud ecosystems.&lt;/p&gt;

&lt;p&gt;You can watch (or listen to) this interview &lt;a href="https://kube.fm/hacking-alibaba-ronen-hillai"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: What are three emerging Kubernetes or other tools that you're keeping an eye on?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Ronen and I have extensive knowledge of Kubernetes, but our expertise only originates from working directly with Kubernetes. We're hackers who transitioned into Kubernetes hacking, not Kubernetes experts who started hacking. So, we need to familiarize ourselves with many Kubernetes tools. Most of the tools we know are those we've encountered and exploited during our engagements. Therefore, we might not be the best sources for the latest Kubernetes tools, but we are excited about ongoing Kubernetes research.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; Are there any specific tools or infrastructure that you particularly like?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Instead of specific tools, we're more interested in infrastructure elements like service meshes. From an attacker's perspective, engaging with these is quite fascinating. Currently, we need to mention standout tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; For those unfamiliar, can you tell us more about your roles and what you do at&lt;a href="https://www.wiz.io/"&gt; Wiz&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Ronen and I work at Wiz, a cloud security company, as part of the vulnerability research team. We focus on researching primary cloud services and providers like Azure, GCP, AWS, and more. We utilize their open&lt;a href="https://en.wikipedia.org/wiki/Bug_bounty_program"&gt; bug bounty programs&lt;/a&gt; to find and report vulnerabilities. By sharing our findings, we aim to enhance the security of the cloud community, not just for our clients but for everyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; Is hacking cloud environments your primary focus, or is this a specialized area within security research?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; It's unique. We didn't start with cloud environments. We began as general security researchers, focusing on hacking techniques. Over time, we transitioned into specializing in cloud security. Our research aims to discover innovative ways attackers might exploit cloud systems, ultimately leading to more secure cloud environments for everyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; How has your hacking experience influenced your approach to Kubernetes security? Did you discover any exciting findings during this research?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Many cloud providers rely on Kubernetes and container technology to manage their services efficiently. Traditionally, setting up individual virtual or physical machines for each customer would only be scalable for some companies. Containers offer a more efficient way to manage large infrastructures. Focusing on cloud environments, we discovered Kubernetes as the go-to tool for&lt;a href="https://www.alibabacloud.com/"&gt; Alibaba Cloud&lt;/a&gt; and companies like IBM. Our journey started with cloud security research and ultimately led us to specialize in Kubernetes security within that domain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Our initial focus was on container security. We researched container escapes and other vulnerabilities that might impact containers. This research naturally led us to Kubernetes, as many infrastructures we encountered used it. We had to learn Kubernetes and develop specific techniques to achieve our goals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; If you could go back in time and share one career tip with your younger self, what would it be?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Always follow your curiosity. Research is all about pursuing leads and hunches. We were curious about cloud security, even though we didn't start in that field. It became popular, and we wanted to explore this new area. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; What resources do you use to stay updated on Kubernetes?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; I rely on technical documents the most. I also follow blogs from cloud providers, mainly the&lt;a href="https://www.cncf.io/blog/"&gt; CNCF blog&lt;/a&gt;, because they have valuable information. I use The Kubernetes community on Twitter to learn about new features and technologies; they are highly active there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Additionally, I recommend Reddit. Many communities focused on security, Kubernetes, and cloud computing offer great content. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; We came across an article about how you hacked Alibaba Cloud's Kubernetes cluster and&lt;a href="https://www.youtube.com/watch?v=d81qnGKv4EE"&gt; a talk you gave at KubeCon&lt;/a&gt;. What motivated you to do this research, and did your company support you?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Our company supports security research. At Wiz, we focus on cloud security research, often utilizing&lt;a href="https://en.wikipedia.org/wiki/Offensive_Security"&gt; offensive security&lt;/a&gt; methodologies. We act like attackers to find vulnerabilities and then report them to the vendors. By identifying vulnerabilities, we can report them to the cloud providers and prevent actual attacks. Alibaba Cloud is just one example of this engagement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Our research often leads us to discover new hacking techniques we need to learn about. We share these discoveries with everyone so they can protect themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; One of our previous guests talked about Kubernetes secrets management and&lt;a href="https://owasp.org/www-community/Threat_Modeling"&gt; threat modelling&lt;/a&gt;. How do you approach exploiting vulnerabilities from a hacker's perspective?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt;Our best security insights come from working with different applications, frameworks, and cloud systems. When we engage with one, our primary goal is to find critical security mistakes in its setup. To do this, we must fully understand how the system works and where attackers might discover weaknesses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; There's an interesting difference between traditional and cloud security research. In traditional research, the goal is often to achieve "Remote Code Execution" (&lt;a href="https://en.wikipedia.org/wiki/Remote_code_execution"&gt;RCE&lt;/a&gt;) on a specific application, which means taking control of a machine and running unauthorized code. However, in the cloud, things are different. Since you often have access to a virtual machine yourself, RCE becomes less attractive.&lt;/p&gt;

&lt;p&gt;The real challenge in cloud security lies in breaching the barriers between different customers. Unlike traditional environments, the cloud is a shared space with hundreds of thousands of users. Our focus is to demonstrate the possibility of attackers moving between these customers, even without data access. This risk highlights a unique cloud security risk - the potential for attackers to "jump" from one user to another and compromise their information. This type of research, proving a breach of trust without actually stealing data, is a crucial aspect of cloud security and something rarely seen in traditional security research.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; When starting this research, why did you choose Alibaba Cloud? &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Our initial study focused on&lt;a href="https://www.postgresql.org/"&gt; PostgreSQL&lt;/a&gt;. Since many cloud providers offer managed PostgreSQL instances, we were interested in how they handle the infrastructure. We discovered vulnerabilities that allowed us to execute code on these instances. We tested several providers, including Alibaba, and presented our findings at&lt;a href="https://www.blackhat.com/us-23/briefings/schedule#bingbang-hacking-bingcom-and-much-more-with-azure-active-directory-33206"&gt; the Black Hat talk&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai&lt;/strong&gt;: We began with PostgreSQL and expanded to Alibaba and other cloud providers. Our&lt;a href="https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities"&gt; blog post&lt;/a&gt; provides more details about PostgreSQL and our Black Hat talk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; Why did you choose to focus on PostgreSQL for your research?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; PostgreSQL is a robust database with many features, including the ability to execute code within the database. While this capability can benefit certain users, it poses a potential security risk in cloud environments.&lt;/p&gt;

&lt;p&gt;Cloud providers typically modify PostgreSQL to prevent users from executing code on their managed instances. However, our research identified vulnerabilities in these modifications, not in the core PostgreSQL code itself. We were able to exploit these vulnerabilities to bypass the restrictions and still execute code on the managed databases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; How does PostgreSQL relate to Kubernetes in this context? Did you find a way to access a Kubernetes cluster by exploiting the PostgreSQL vulnerabilities?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Cloud providers often use containers and orchestration tools like Kubernetes to manage large-scale services, including PostgreSQL. This approach allows them to offer these services to many customers efficiently. While exploiting the PostgreSQL vulnerabilities, we discovered that we were actually in a Kubernetes environment. The user interface typically abstracts away the underlying infrastructure from the user, but our research methods disclosed it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; We've seen various infrastructures, but Alibaba and IBM used Kubernetes for their managed services. Other providers might use different implementations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; Security experts often talk about avoiding vulnerabilities caused by misconfigurations, which can be human errors. What were the biggest misconfigurations you found that created security risks?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai&lt;/strong&gt;: The biggest misconfiguration we found is treating containers as the only security barrier. It's important to remember that containers can be a security layer within a more extensive security system, but they should be relied on only partially. Containers alone wouldn't be strong enough to isolate each company's data from each other entirely because any security flaw in the core Linux system (the kernel) could bypass container security. We were able to exploit such misconfigurations during our research.&lt;/p&gt;

&lt;p&gt;Another problem is poorly managed secrets within the Kubernetes environment. These secrets could read information across the system and write and change it, which meant we could overwrite software packages used by many cloud services and customer accounts within Alibaba. Essentially, these powerful secrets allowed someone to access different environments, services, and customer data—all with a single key. That's a significant security risk we wouldn't recommend taking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; The specific secret we found was the&lt;a href="https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod"&gt; image pull secret&lt;/a&gt;. In Kubernetes, when you want to download images from a private registry, you need this secret to configure network access. If you misconfigure it, you might accidentally include a secret key with push permissions instead of pull permissions. This key should only allow downloading images, not uploading them. If an attacker gains access to a key with push permissions (like what we achieved in Alibaba), it could have devastating consequences for your entire environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: To those without a strong background in security, it may seem that security experts click a button, scan your system, and find vulnerabilities. However, security research, like many other fields, is a blend of art and science. Can you elaborate on this further?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Security research requires a lot of creativity. When you hear about a new attack vector, it boils down to creative thinking - coming up with something no one else has considered. In this research, we started by looking for patterns we already knew were risky, like overly permissive settings and shared volumes. We had to think outside the box. Returning to the Alibaba Cloud control panel, we began experimenting. This exploration led us to a breakthrough when we discovered a button enabling SSL encryption for the PostgreSQL instance. Clicking it triggered new activity in the container, which we followed to escape the container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; To help our audience understand, could you explain&lt;a href="https://en.wikipedia.org/wiki/Secure_copy_protocol"&gt; SCP&lt;/a&gt;, its role in the attack, and how you exploited it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; SCP stands for Secure Copy. It's a standard tool on Linux systems that transfers files between machines using secure SSH connections. In our case, the SSL encryption feature we triggered used a new Alibaba management container. This container ran the SCP command on our container to move the SSL certificate.&lt;/p&gt;

&lt;p&gt;SCP reads its configuration from a directory we control within our container by default. We placed a malicious SSH configuration file there. When the SCP command loaded this configuration, it ran a command we placed within the file. This trick let us escape our limited container and jump to the Alibaba Management Container because it unknowingly executed our command.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; A crucial factor in this exploit was the shared volume. This volume acted like a shared home directory for our container and the management container since the same user existed in both containers. We could exploit this shared space because SCP reads its configuration from the user's home directory by default. By replacing the default configuration with ours containing a malicious command, we tricked the management container into running it when it used SCP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; What does successfully creating a&lt;a href="https://kubernetes.io/docs/concepts/policy/pod-security-policy#privileged"&gt; privileged container&lt;/a&gt; using the&lt;a href="https://docs.docker.com/engine/api"&gt; Docker API&lt;/a&gt; tell us about cloud security in general?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Many cloud environments rely on Docker to manage their containers. You can create a new container through an HTTP request if you gain access to the Docker API socket. This container could be privileged, meaning it shares resources like namespaces and possibly even volumes with the underlying host machine, the Kubernetes node. Spawning a privileged container grants you access to almost everything the node has access to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; You transition from being a guest in the container to gaining complete control of the host machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Gainin access to the node would only give you control of some of the Kubernetes clusters, would it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; With code execution on the node, we could use&lt;a href="https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet"&gt; Kubelet&lt;/a&gt; credentials to explore further, looking for commands, codes, secrets, and other information. In our case, Alibaba had misconfigured its Kubelet credentials: it was too powerful. We could list all pods, see all the code in the cluster, potentially containing customer data, and even retrieve all the secrets using the "kubectl get secret" command. This misconfiguration was the key that unlocked broader access for us.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; Did you achieve the entire exploit on a single node within the cluster?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Yes, we were on a single node. Using the compromised Kubelet credentials, we could see all the other nodes and resources in the cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; While the specific node we compromised was isolated and didn't contain data from other customers, the service account associated with Kubelet had excessive permissions. Even though the node itself was secure, this service account allowed us to access sensitive information across the entire cluster, including pods, nodes, and secrets belonging to other customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; What was the next step after taking over Alibaba's managed PostgreSQL offering? Did you contact Alibaba to report your findings?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Once we discovered the ability to access data belonging to other customers, our research stopped immediately. We wouldn't risk even accidentally accessing someone else's data. At that point, we documented everything we found and sent a detailed report to Alibaba Cloud, and they responded quickly and professionally. They kept us updated on the fixes they deployed throughout the research process. We immediately report any critical issues to prevent others from exploiting them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; Can you tell us about any specific fixes they implemented based on your findings?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; The first issue was a misconfiguration that falsely indicated increased resource consumption. We exploited it to execute unauthorized code on the operating system. We collaborated with Alibaba Cloud to fix this problem. They also resolved the SCP vulnerability problem that allowed unauthorized access to their management container. Finally, they restricted the Kubelet permissions to a narrower scope, granting only specific permissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Following our research, Alibaba took several steps to address the vulnerabilities we discovered. They limited image pull secret permissions to read-only access, preventing unauthorized uploads. Additionally, they implemented a secure container technology similar to Google's&lt;a href="https://gvisor.dev"&gt; gVisor&lt;/a&gt; project. This technology hardens containers and makes them more difficult to escape from, adding another layer of security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; Throughout this process, what key lessons did you learn?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; There are two main lessons learned. First, containers shouldn't be relied on as the sole security barrier. While they can be a layer of security, they can be bypassed in various ways. Additional precautions are crucial to ensure proper isolation between customers. We recommend building a layered defense so that a single vulnerability doesn't allow unauthorized access to a competitor company's data.&lt;/p&gt;

&lt;p&gt;Second, strong credentials require careful management. As Ronen mentioned, Alibaba originally had a powerful secret that could be read and written across the cluster. This secret also had push access to the central Docker image registry. Following our report, they limited the scope of these credentials. It's essential to be very cautious with such powerful secrets. Ideally, you should scope the secrets to specific actions and minimize them whenever possible. A powerful secret can allow attackers to move across different environments, including production, development, testing, and even development workstations.&lt;/p&gt;

&lt;p&gt;Another lesson learned relates to the container itself. The SCP vulnerability we exploited highlights the risk of shared namespaces between containers. In the Alibaba incident, the shared namespace and home directory allowed us to exploit the SCP vulnerability. Always be very careful when sharing namespaces between trusted and untrusted containers. The lesson learned is to minimize what you share and never grant unnecessary permissions. Attackers may exploit even seemingly minor misconfigurations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; Can you recommend any specific tools that people might need to be aware of if they want to discuss implementing some of these mitigation tactics with their managers?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; There's one framework I highly recommend:&lt;a href="http://peach"&gt; Peach&lt;/a&gt;. It's an open-source project developed by our research team and contributions from fantastic people at many companies.&lt;/p&gt;

&lt;p&gt;Peach is a framework that outlines how to build secure and isolated environments, whether in the cloud or not. Like a white paper, it's a valuable resource that guides you on properly isolating tenants or customers in a multi-tenant environment. It covers common mistakes to avoid, what to look out for, and how to implement the necessary precautions.&lt;/p&gt;

&lt;p&gt;If you manage a multi-tenant environment or need to isolate resources within your environment, Peach is a valuable resource worth exploring. It covers the common mistakes to avoid and offers best practices for implementing protection. It's completely open-source and available on&lt;a href="https://github.com/wiz-sec/peach"&gt; GitHub&lt;/a&gt;. We also welcome contributions from anyone with additional tips or tricks we might need to know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; I also recommend using secret scanning tools. These tools are essential in our research; we use them to identify potential secrets-related vulnerabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; Do you have any recommendations for securing multi-tenant Kubernetes clusters?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Securing multi-tenant Kubernetes clusters involves a few key areas. First, prioritize network security. By default, Kubernetes doesn't restrict node communication, so strong network isolation is essential.&lt;/p&gt;

&lt;p&gt;Second, separating namespaces between customers is a good practice when dealing with multi-tenancy.&lt;/p&gt;

&lt;p&gt;Additionally, consider implementing container security technologies like gVisor or&lt;a href="https://katacontainers.io/"&gt; Kata Containers&lt;/a&gt;. Don't solely rely on Docker's security features to prevent container escapes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; What advice would you give for hardening containers to make them more secure?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Our case study with Alibaba revealed they were using shared Linux namespaces between containers, such as their management container and our container. Sharing Linux namespaces can be dangerous. When designing a system that shares namespaces or resources between management and regular user containers, constantly carefully assess and be aware of the risks involved. Container technologies like GVisor and&lt;a href="https://katacontainers.io/"&gt; Kata Containers&lt;/a&gt; can mitigate the risk of attackers exploiting Linux kernel vulnerabilities in your environment to achieve kernel-level code execution and jump to the Kubernetes node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; What advice would you give to Kubernetes engineers needing more security experience?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Security is crucial. Companies of all sizes, from startups to large corporations, are constantly targeted by malicious actors, not just ethical hackers like us. Anyone managing a service on the internet must understand that they are a potential target for cyberattacks. These attacks range from data breaches to ransomware attacks that turn off your entire operation. Even small projects need to pay more attention to security.&lt;/p&gt;

&lt;p&gt;The good news is that many tools can help you achieve security without being a security expert. Tools like gVisor are relatively easy to implement because you don't need to write them from scratch. By using security hardening tools, you gain significant protection benefits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Besides the tools, many online resources are available to learn about security. These resources can help you understand security risks and how to mitigate them. Kubernetes itself has built-in security features, including default security policies. Be security-conscious and take steps to secure your environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; You discover a vulnerability and report it to the vendor. What prevents you from exploiting the vulnerability for malicious purposes instead? Wouldn't Alibaba eventually find the problem on its own?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; We started seeing signs that Alibaba was taking steps to address the issue while we were still in the research phase. They were transparent with us about their efforts. Cloud providers all have security teams that constantly monitor their environments. They likely knew we were there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; Cloud providers are doing a great job with security. We're ethical hackers; our goal is to improve security for the cloud community. Penetration testing, or offensive research, is a tool to achieve that goal. We want to fix the vulnerabilities, and it's rewarding to hear that our reports lead to security updates that benefit many customers. We do this to make cloud products more secure and help users learn how to secure their deployments.&lt;/p&gt;

&lt;p&gt;We publish blogs and give talks so that security professionals and developers can learn from our research and identify potential problems in their environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; What's next on the agenda for you both?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; We're always working on new research projects.&lt;a href="https://www.wiz.io/authors/sagi"&gt; Sagi&lt;/a&gt; from our team recently published a blog about a vulnerability in&lt;a href="https://www.wiz.io/blog/wiz-and-hugging-face-address-risks-to-ai-infrastructure"&gt; Hugging Face&lt;/a&gt;, an AI provider. We have several ongoing projects under disclosure, meaning we can only reveal them once we fix the vulnerabilities.&lt;/p&gt;

&lt;p&gt;Follow our blog; it's the first place we announce new findings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ronen:&lt;/strong&gt; Our research will benefit the Kubernetes security community as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart:&lt;/strong&gt; How can people contact you if they have questions?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hillai:&lt;/strong&gt; We're both on Twitter. My handle is&lt;a href="https://x.com/hillai"&gt; @hillai&lt;/a&gt;, and Ronen's is&lt;a href="https://x.com/RonenSHH"&gt; @RonenSHH&lt;/a&gt;. You can also email us at &lt;a href="mailto:research@wiz.io"&gt;research@wiz.io&lt;/a&gt;, but Twitter is the best way. Make sure to spell the names correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrap up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you enjoyed this interview and want more Kubernetes stories and opinions, visit&lt;a href="https://kube.fm/"&gt; KubeFM&lt;/a&gt; and subscribe to the podcast.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you want to keep up-to-date with Kubernetes, subscribe to&lt;a href="https://learnk8s.io/learn-kubernetes-weekly"&gt; Learn Kubernetes Weekly&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you're going to become an expert in Kubernetes, look at courses on&lt;a href="https://learnk8s.io/training"&gt; Learnk8s&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you want to keep in touch, follow me on&lt;a href="https://www.linkedin.com/in/gulcantopcu/"&gt; Linkedin&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>security</category>
      <category>devops</category>
      <category>cloudops</category>
    </item>
    <item>
      <title>eBPF, sidecars, and the future of the service mesh</title>
      <dc:creator>Gulcan Topcu</dc:creator>
      <pubDate>Fri, 07 Jun 2024 07:56:41 +0000</pubDate>
      <link>https://community.ops.io/gulcantopcu/ebpf-sidecars-and-the-future-of-the-service-mesh-3hb3</link>
      <guid>https://community.ops.io/gulcantopcu/ebpf-sidecars-and-the-future-of-the-service-mesh-3hb3</guid>
      <description>&lt;p&gt;Kubernetes and service meshes may seem complex, but not for William Morgan, an engineer-turned-CEO who excels at simplifying the intricacies. In this enlightening podcast, he shares his journey from AI to the cloud-native world with Bart Farrell. &lt;/p&gt;

&lt;p&gt;Discover William's cost-saving strategies for service meshes, gain insights into the ongoing debate between sidecars, Ambient Mesh, and Cilium Cluster Mesh, his surprising connection to Twitter's early days and unique perspective on balancing tech expertise with the humility of being a piano student.&lt;/p&gt;

&lt;p&gt;You can watch (or listen) to this interview &lt;a href="https://kube.fm/service-mesh-william"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Imagine you've just set up a fresh Kubernetes cluster. What's your go-to trio for the first tools to install?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: My first pick would be &lt;a href="https://linkerd.io/"&gt;Linkerd&lt;/a&gt;. It's a must-have for any Kubernetes cluster. I then lean towards tools that complement Linkerd, like &lt;a href="https://argo-cd.readthedocs.io/en/stable/"&gt;Argo &lt;/a&gt;and &lt;a href="https://cert-manager.io/"&gt;cert-manager&lt;/a&gt;. You're off to a solid start with these three.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Cert Manager and Argo are popular choices, especially in the GitOps domain. What about &lt;a href="https://fluxcd.io/"&gt;Flux&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: Flux would work just fine. I don't have a strong preference between the two. Flux and Argo are great options, especially for tasks like progressive delivery. When paired with Linkerd, they provide a robust safety net for rolling out new code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: As the CEO, who are you accountable to? Could you elaborate on your role and responsibilities?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: Being a CEO is an exciting shift from my previous role as an engineer. I work for myself, and I must say, I’m a demanding boss. As a CEO, I focus on the big picture and align everyone toward a common goal. These are the two skills I’ve had to develop rapidly since transitioning from an engineer, where my primary concern was writing and maintaining code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: From a technical perspective, how did you transition into the cloud-native space? What were you doing before it became mainstream?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: My early career was primarily focused on AI, &lt;a href="https://en.wikipedia.org/wiki/https://en.wikipedia.org/wiki/Natural_language_processing"&gt;NLP&lt;/a&gt;, and machine learning long before they became trendy. I thought I’d enter academia but realized I enjoyed coding more than research. &lt;/p&gt;

&lt;p&gt;I worked at several Bay Area startups, mainly in NLP and machine learning roles. I was part of a company called PowerSet, which was building a natural language processing engine and was acquired by Microsoft. I then joined Twitter in its early days, around 2010, when it had about 200 employees. I started on the AI side but transitioned to infrastructure because I found it more satisfying and challenging. We were doing what I now describe at Twitter as cloud-native, even though the terminology differed. We didn’t have Kubernetes or Docker, but we had &lt;a href="https://mesos.apache.org/"&gt;Mesos&lt;/a&gt;, the JVM for isolation, and cgroups for a basic form of containerization. We transitioned from a monolithic Ruby on Rails service to a massive microservices deployment. When I left Twitter, we tried to apply those same ideas to the emerging world of Kubernetes and Docker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: How do you keep up with the rapid changes in the Kubernetes and cloud-native ecosystems, especially transitioning from infrastructure and AI/NLP?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: My current role primarily shapes my strategy. I learn a lot from the engineers and users of &lt;a href="https://www.reddit.com/r/linkerd/new/"&gt;Linkerd&lt;/a&gt;, who are at the forefront of these technologies. I also keep myself updated by reading discussions on Reddit platforms like &lt;a href="https://www.reddit.com/r/kubernetes/"&gt;r/kubernetes&lt;/a&gt; and &lt;a href="https://www.reddit.com/r/linkerd/new/"&gt;r/Linkerd&lt;/a&gt;. Occasionally, I contribute to or follow discussions on &lt;a href="https://news.ycombinator.com/"&gt;Hacker News&lt;/a&gt;. Overall, my primary source of knowledge comes from the experts I work with daily, giving me valuable insights into the latest developments. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: If you could return to your time at Twitter or even before that, what one tip would you give yourself?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: I'd tell myself to prioritize impact. As an engineer, I was obsessed with building and exploring new technologies, which was rewarding. However, I later understood the value of stepping back to see where I could make a real difference in the company. Transitioning my focus to high-impact areas, such as infrastructure at Twitter, was a turning point. Despite my passion for NLP, I realized that infrastructure was where I could truly shine. Always look for opportunities where you can make the most significant impact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Let’s focus on "&lt;a href="https://www.techtarget.com/searchitoperations/news/365535362/Sidecarless-eBPF-service-mesh-sparks-debate"&gt;Sidecarless eBPF Service Mesh Sparks Debate&lt;/a&gt;," which follows up on your previous article “&lt;a href="https://buoyant.io/blog/ebpf-sidecars-and-the-future-of-the-service-mesh"&gt;eBPF, sidecars, and the future of the service mesh&lt;/a&gt;.” You're one of the creators of Linkerd. For those unfamiliar, what exactly is a service mesh? Why would someone need it, and what value does it add? &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: There are two ways to describe service mesh: what it does and how it works. Service mesh is an additional layer for Kubernetes that enhances key areas Kubernetes doesn't fully address. &lt;/p&gt;

&lt;p&gt;The first area is security. It ensures all connections in your cluster are encrypted, authorized, and authenticated. You can set policies based on services, gRPC methods, or HTTP routes, like allowing Service A to talk to /foo but not /bar. &lt;/p&gt;

&lt;p&gt;The second area is reliability. It enables graceful failovers, transparent traffic shifting between clusters, and progressive delivery. For example, deploying new code and gradually increasing traffic to it to avoid immediate production traffic. It also includes mechanisms like load balancing, circuit breaking, retries, and timeouts.&lt;/p&gt;

&lt;p&gt;The last area is observability. It provides uniform metrics for all workloads across all services, such as success rates, latency distribution, and traffic volume. Importantly, it does this without requiring changes to your application code. &lt;/p&gt;

&lt;p&gt;The most prevalent method today involves using many proxies. This approach has become feasible thanks to technological advancements like Kubernetes and containers, which simplify the deployment and management of many proxies as a unified fleet. A decade ago, deploying 10,000 proxies would have been absurd, but it is feasible and practical today. The specifics of deploying these proxies, their locations, programming languages, and practices are subject to debate. However, at a high level, service meshes work by running these layer seven proxies that understand HTTP, HTTP2, and gRPC traffic and enable various functionalities without requiring changes to your application code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Can you briefly explain &lt;a href="https://blog.envoyproxy.io/service-mesh-data-plane-vs-control-plane-2774e720f7fc"&gt;how the data and control planes work in service meshes&lt;/a&gt;, especially compared to the older sidecar model with an extra container?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: A service mesh architecture consists of two main components: a control plane and a data plane. The control plane allows you to manage and configure the data plane, which directs network traffic within the service mesh. In Kubernetes, the control plane operates as a collection of standard Kubernetes services, typically running within a dedicated namespace or across the entire cluster.&lt;/p&gt;

&lt;p&gt;The data plane is the operational core of a service mesh, where proxies manage network traffic. The sidecar model, employed by service meshes like Linkerd, deploys a dedicated proxy alongside each application pod. Therefore, a service mesh with 20 pods would have 20 corresponding proxies. The overall efficiency and scalability of the service mesh rely heavily on the size and performance of these individual proxies.&lt;/p&gt;

&lt;p&gt;In the sidecar model, service A and service B communication flows through service A's and service B's proxy. Service A sends its message to its sidecar proxy, and then the service A proxy forwards it to service B's sidecar proxy. Finally, service B's proxy delivers the message to service B itself. This indirect communication path adds extra hops, leading to a slight increase in latency. You must carefully consider the potential performance impacts to ensure that service mesh benefits outweigh the trade-offs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: We've been discussing the benefits of service meshes, but running an extra container for each pod sounds expensive. Does cost become a significant issue?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: Service meshes have a compute cost, just like adding any component to a system. You pay for CPU and memory, but memory tends to be the more significant concern, as it can force you to scale up instances or nodes.&lt;/p&gt;

&lt;p&gt;However, Linkerd has minimized this issue with a "micro proxy" written in Rust. Rust's strict memory management allows fast, lightweight proxies and avoids memory vulnerabilities like buffer overflows, which are common in C and C++. Studies from both &lt;a href="https://security.googleblog.com/2024/03/secure-by-design-googles-perspective-on.html"&gt;Google&lt;/a&gt; and Microsoft have shown that roughly 70% of security bugs in C and C++ code are due to memory management errors.&lt;/p&gt;

&lt;p&gt;Our choice of Rust as the programming language in 2018 was a calculated risk. Rust offers the best of both worlds: the speed and control of languages like C/C++ and the safety and ease of use of languages with runtime environments like Go. Rust and its network library ecosystem were still relatively young at that time. We invested significantly in underlying libraries like &lt;a href="https://tokio.rs/"&gt;Tokio&lt;/a&gt;, &lt;a href="https://github.com/tower-rs/tower"&gt;Tower&lt;/a&gt;, and H2 to build the necessary infrastructure.&lt;/p&gt;

&lt;p&gt;The critical role of the data plane in handling sensitive application data drove this decision. We ensured its reliability and security.  Rust enables us to build small, fast, and secure proxies that scale with traffic, typically using minimal memory, directly translating to the user experience. Instead of facing long response times (like 5-second tail latencies), users experience faster interactions (closer to 30 milliseconds). A service mesh can optimize these tail latencies, improving user experience and customer retention.  Choosing Rust has proven to be instrumental in achieving these goals.&lt;/p&gt;

&lt;p&gt;While cost is a factor, the actual cost often stems from operational complexity. Do you need dedicated engineers to maintain complex proxies, or does the system primarily work independently? That human cost usually dwarfs the computational one.&lt;/p&gt;

&lt;p&gt;Our design choices have made managing Linkerd’s costs relatively straightforward. However, for other service meshes, costs can escalate if the proxies are large and resource-intensive. Even so, the more significant cost is often not the resources but the operational overhead and complexity. This complexity can demand considerable time and expertise, increasing the overall cost. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: You raise a crucial point about the human aspect. While we address technical challenges, the time spent resolving errors detracts from other tasks. The community has developed products and projects to tackle these concerns and costs. One such example is &lt;a href="https://istio.io/"&gt;Istio&lt;/a&gt; with Ambient Mesh. Another approach is sidecarless service meshes like Cilium Cluster Mesh. Can you explain what Ambient Mesh is and how it enhances the classic sidecar model of service meshes?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: We've delved deep into both of these options in Linkerd. While there might come a time when adopting these projects makes sense for us, we're not there yet. &lt;/p&gt;

&lt;p&gt;Every decision involves trade-offs regarding distributed systems, especially in production environments within companies where the platform is a tool to support applications. At Linkerd, our priority is constantly reducing the operational workload.&lt;/p&gt;

&lt;p&gt;Ambient Mesh and eBPF aren't primarily reactions to complexity but responses to the practical annoyances of sidecars. Their key selling point is eliminating the need for sidecars. However, the real question is: What's the cost of this shift? That's where the analysis becomes crucial.&lt;/p&gt;

&lt;p&gt;In Ambient Mesh, rather than having sidecar containers, you utilize connective components, such as tunnels, within the namespace. These tunnels communicate with proxies located elsewhere in the cluster. So essentially, you have multiple proxies running outside of the pod, and the pods use these tunnels to communicate with the proxies, which then handle specific tasks.&lt;/p&gt;

&lt;p&gt;This setup is indeed intriguing. As mentioned earlier, running sidecars can be challenging due to specific implications. One such implication is the cost factor, which we discussed earlier. In Linkerd’s case, this is a minor concern. However, a more significant implication is the need to restart the pod to upgrade the proxy to the latest version, given the immutability of pods in Kubernetes.&lt;/p&gt;

&lt;p&gt;This situation necessitates managing two separate updates: one to keep the applications up-to-date and another to upgrade the service mesh. Therefore, while the setup has advantages, it also requires careful management to ensure smooth operation and optimal performance.&lt;/p&gt;

&lt;p&gt;We operate the proxy as the first container for various reasons, which can lead to friction points, such as when using &lt;code&gt;kubectl logs&lt;/code&gt;. Typically, when you request logs, you're interested in your application's logs, not the proxy's. This friction, combined with a desire for networking to operate seamlessly in the background, drives the development of solutions like Ambient and eBPF, which aim to eliminate the need for explicit sidecars.&lt;/p&gt;

&lt;p&gt;Both Ambient and eBPF solutions, which are closely related, are reactions to this sentiment of not wanting to deal with sidecars directly. The aim is to make sidecars disappear. Take &lt;a href="https://istio.io/"&gt;Istio&lt;/a&gt; and most service meshes built on &lt;a href="https://www.envoyproxy.io/"&gt;Envoy&lt;/a&gt;, for instance. Envoy is complex and memory-intensive and requires constant attention and tuning based on traffic specifics.&lt;/p&gt;

&lt;p&gt;Challenges with sidecars are more of a cloud-native trend to market solutions, like writing a blog post proclaiming the &lt;a href="https://thenewstack.io/ambient-mesh-no-sidecar-required/"&gt;death of sidecars&lt;/a&gt; rather than being specific to Linkerd. They can sometimes be an inaccurate reflection of the reality of engineering.&lt;/p&gt;

&lt;p&gt;In Ambient, eliminating sidecars by running the proxy elsewhere and using tunnel components allows for separate proxy maintenance without needing to reboot applications for upgrades. However, in a Kubernetes environment, the idea is that pods should be rebootable anytime. Kubernetes can reschedule pods as needed, which aligns with the principles of building applications as distributed systems. Yet, there are legacy applications or specific scenarios where rebooting could be more convenient, making the sidecar approach less appealing. &lt;/p&gt;

&lt;p&gt;Historically, running cron jobs with sidecar proxies in Kubernetes posed a significant challenge. Kubernetes lacked a built-in mechanism to signal the sidecar proxy when the main job was complete, necessitating manual intervention to prevent the proxy from running indefinitely. This manual process went against the core principle of service mesh, which aims to decouple services from their proxies for easier management and scalability.&lt;/p&gt;

&lt;p&gt;Thankfully, one significant development is the &lt;a href="https://kubernetes.io/blog/2023/08/25/native-sidecar-containers/"&gt;Sidecar Container Kubernetes Enhancement Proposal&lt;/a&gt;. With this enhancement, you can designate your proxy as a sidecar container, leading to several benefits, like jobs terminating the proxy once finished and eliminating unnecessary resource consumption.&lt;/p&gt;

&lt;p&gt;For Linkerd, adopting Ambient mesh architecture introduces more complexity than benefits. The additional components, like the tunnel and separate proxies, add unnecessary layers to the system. Unlike Istio, which has encountered issues due to its architecture, Linkerd's existing design hasn't faced similar challenges. Therefore, the trade-offs associated with Ambient aren't justified for Linkerd.&lt;/p&gt;

&lt;p&gt;In contrast, the sidecar model offers distinct advantages. It creates clear operational and security boundaries at the pod level. Each pod becomes a self-contained unit, making independent decisions regarding security and operations, aligning with Kubernetes principles, and simplifying management in a cloud-native environment.&lt;/p&gt;

&lt;p&gt;This sidecar approach is crucial for implementing &lt;a href="https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/#:~:text=Zero%20Trust%20security%20is%20an,outside%20of%20the%20network%20perimeter."&gt;zero-trust&lt;/a&gt; security. The critical principle of zero trust is to enforce security policies at the most granular level possible. Traditional approaches relying on a perimeter firewall and implicitly trusting internal components are no longer sufficient. Instead, each security decision must be made independently at every system layer. This granular enforcement is achieved by deploying a sidecar proxy within each application pod, acting as a security boundary and enabling fine-grained control over network traffic, authentication, and authorization.&lt;/p&gt;

&lt;p&gt;In Linkerd, every request undergoes a rigorous security check within the pod. This check includes verifying the validity of the TLS encryption, confirming the client's identity through cryptographic algorithms, and ensuring the request comes from a trusted source. Additionally, Linkerd checks whether the request can access the specific resource or method it's trying to reach. This multi-layered scrutiny happens directly inside the pod, providing the highest possible level of security within the Kubernetes framework. Maintaining this tight security model is crucial, as any deviation, like separating the proxy and TLS certificate, weakens the model and introduces potential vulnerabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: The next point I'd like to discuss has garnered significant attention in recent years through &lt;a href="https://cilium.io/use-cases/service-mesh/"&gt;Cilium Service Mesh&lt;/a&gt; and various domains. What is eBPF?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: eBPF is a kernel technology that enables the execution of specific code within the kernel, offering significant advantages. Firstly, operations within the kernel are high-speed, eliminating the overhead of context switching between kernel and user space. Secondly, the kernel has unrestricted access to all system resources, requiring robust security measures to ensure eBPF programs are safe. This powerful technology empowers developers to create highly efficient and secure solutions for various system tasks, particularly networking, security, and observability.&lt;/p&gt;

&lt;p&gt;Traditionally, user-space programs lacked direct access to kernel resources, relying on &lt;a href="https://phoenixnap.com/kb/system-call#:~:text=A%20system%20call%20is%20an,functionalities%20from%20the%20OS's%20kernel."&gt;system calls&lt;/a&gt; to communicate with the kernel. While providing security, this syscall boundary introduced cost overhead, especially with frequent requests like network packet processing. &lt;/p&gt;

&lt;p&gt;eBPF revolutionized this by enabling user-defined code to run within the kernel with stringent safety measures. The number of instructions an eBPF program can execute is limited, and infinite loops are prohibited to prevent resource monopolization. The bytecode verifier meticulously ensures every possible execution path can be explored to avoid unexpected behavior or malicious activity. The bytecode is also verified for&lt;a href="https://opensource.stackexchange.com/questions/6549/does-program-that-uses-ebpf-module-needs-to-be-distributed-under-gpl"&gt; GPL compliance&lt;/a&gt; by checking for specific strings in its initial bytes. &lt;/p&gt;

&lt;p&gt;These security measures make eBPF a powerful but restrictive mechanism, enabling previously unattainable capabilities. Understanding what eBPF can and cannot do is crucial, despite marketing claims that might blur these lines. While many promote eBPF as a groundbreaking solution that could eliminate the need for sidecars, the reality is more nuanced. It's crucial to understand its limitations and not be swayed by marketing hype.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: There appears to be some confusion regarding the extent of limitations associated with eBPF. If eBPF has limitations, does that imply that these limitations constrain all service meshes using eBPF?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: The idea of an eBPF-based service mesh can sometimes need clarification. In reality, the Envoy proxy still handles the heavy lifting, even in these eBPF-powered meshes. eBPF has limitations, especially in the network space, and can't fully replace the functionality of a traditional proxy.&lt;/p&gt;

&lt;p&gt;While eBPF has many applications, including security and performance monitoring, its most interesting potential lies in instrumenting applications. The kernel can directly measure CPU usage, function calls, and other performance metrics by residing in the kernel.&lt;/p&gt;

&lt;p&gt;However, when it comes to networking, eBPF faces significant challenges. Maintaining large amounts of state, essential for many network operations, is difficult, bordering on impossible. This challenge highlights the limitations of eBPF in entirely replacing traditional networking components like proxies.&lt;/p&gt;

&lt;p&gt;The role of eBPF in networking, particularly within service meshes, is often overstated. While it excels in certain areas, like efficient TCP packet processing and simple metrics collection, other options exist beyond traditional proxies. Complex tasks like &lt;a href="https://blog.px.dev/ebpf-http2-tracing/"&gt;HTTP2 parsing&lt;/a&gt;, TLS handshakes, or layer seven routings are challenging, if possible, to implement purely with eBPF.&lt;/p&gt;

&lt;p&gt;Some projects attempt complex eBPF implementations for these tasks but often involve convoluted workarounds that sacrifice performance and practicality. In practice, eBPF is typically used for layer 4 (transport layer) tasks, while user-space proxies like Envoy handle more complex layer 7 (application layer) operations.&lt;/p&gt;

&lt;p&gt;Service meshes like Cilium, despite their claims of being sidecar-less, often rely on daemonset proxies to handle these complex tasks. While eliminating sidecars, this approach introduces its own set of problems. Security is compromised as TLS certificates are mixed in the proxy's memory, and operational challenges arise when the daemonset goes down, affecting seemingly random pods scheduled on that machine.&lt;/p&gt;

&lt;p&gt;Linkerd, having experienced similar issues with its &lt;a href="https://github.com/linkerd/linkerd"&gt;first version&lt;/a&gt; (Linkerd1.x) running as a daemonset, opted for the sidecar model in subsequent versions. Sidecars provide clear operational and security boundaries, making management and troubleshooting easier.&lt;/p&gt;

&lt;p&gt;Looking ahead, eBPF can still be a valuable tool for service meshes. Linkerd, for instance, could significantly speed up raw TCP proxying by offloading tasks to the kernel. However, for complex layer seven operations, a user-space proxy remains essential.&lt;/p&gt;

&lt;p&gt;The decision to use eBPF and the choice between sidecars and daemonsets are distinct considerations, each with advantages and drawbacks. While eBPF offers powerful capabilities, it doesn't inherently dictate a specific proxy architecture. Choosing the most suitable approach requires careful evaluation of the system's requirements and trade-offs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Can you share your predictions about conflict or uncertainty concerning service meshes and sidecars for the next few years? Is there a possibility of resolving this? Should we anticipate the emergence of new groups? What are your expectations for the near and distant future?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: While innovation in this field is valuable, relying solely on marketing over technical analysis needs more appeal, especially for those prioritizing tangible customer benefits. &lt;/p&gt;

&lt;p&gt;Regarding the future of service meshes, their value proposition is now well-established. The initial hype has given way to a practical understanding of their necessity, with users selecting and implementing solutions without extensive deliberation. This maturity is a positive development, shifting the focus from explaining the need for a service mesh to optimizing its usage.&lt;/p&gt;

&lt;p&gt;Functionally, service meshes converge on core features like MTLS, load balancing, and circuit breaking. However, a significant area of development and our primary focus is mesh expansion, which involves integrating non-Kubernetes components into the mesh. We have a &lt;a href="https://linkerd.io/2024/02/21/announcing-linkerd-2.15/"&gt;big announcement&lt;/a&gt; regarding this in mid-February.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: That sounds intriguing. Please give us a sneak peek into what this announcement is about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: It is about Linkerd 2.15! The release of Linkerd 2.15 is a significant step forward. It introduces the ability to run the data plane outside Kubernetes, enabling seamless TLS communication for both VM and pod workloads.&lt;/p&gt;

&lt;p&gt;The industry mirrors this direction, as evidenced by developments like the Gateway API, which converges to handle both ingress and service mesh configuration within Kubernetes. This unified approach allows consistent configuration primitives for traffic entering, transiting, and exiting the cluster.&lt;/p&gt;

&lt;p&gt;The industry will likely focus on refining details like eBPF integration or the advantages of Ambient Mesh while the fundamental value proposition of service meshes remains consistent. I'm particularly excited about how these advancements can be applied across entire organizations, starting with securing and optimizing Kubernetes environments and extending these benefits to the broader infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Shifting away from the professional side, we heard you have an interesting &lt;a href="https://twitter.com/wm/status/1584940854384685056"&gt;tattoo&lt;/a&gt;. Is it of Linkerd, or what is it about?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: It’s just a temporary one. We handed them out at KubeCon last year as part of our swag. While everyone else gave out stickers, we thought we'd do something more extraordinary. So, we made temporary tattoos of Linky the Lobster, our Linkerd mascot.&lt;/p&gt;

&lt;p&gt;When Linkerd graduated within the CNCF, reaching the top tier of project maturity, we needed a mascot. Most mascots are cute and cuddly, like the &lt;a href="https://go.dev/blog/gopher"&gt;Go Gopher&lt;/a&gt;. We wanted something different, so we chose a blue lobster—an unusual and rare creature reflecting Linkerd's unique position in the CNCF universe.&lt;/p&gt;

&lt;p&gt;The tattoo featured Linky the Lobster crushing some sailboats, which is part of our logo. It was a fun little easter egg. If you were at KubeCon, you might have seen them. That event was in Amsterdam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: What's next for you? Are there any side projects or new ventures you're excited about?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: I'm devoting all my energy to Linkerd and &lt;a href="https://buoyant.io/"&gt;Buoyant&lt;/a&gt;. That takes up most of my focus. Outside of work, I'm a dad. My kids are learning the piano, so I decided to start learning, too. It's humbling to see how fast they pick it up compared to me. As an adult learner, it's a slow process. It's interesting to be in a role where I'm the student, taking lessons from a teacher who's probably a third my age and incredibly talented. It’s an excellent reminder to stay humble, especially since much of my day involves being the authority on something. It’s a nice change of pace and a bit of a reality check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: That's a good balance. It's important to remind people that doing something you could be better at is okay. As a kid, you're used to it—no expectations, no judgment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: Exactly. However, it can be a struggle as an adult, especially as a CEO. I've taught Linkerd to hundreds of people without any panic, but playing a piano recital in front of 20 people is terrifying. It's the complete opposite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: If people want to contact you, what's the best way?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;William&lt;/strong&gt;: You can email me at &lt;a href="//mailto:william@buoyant.io"&gt;william@buoyant.io&lt;/a&gt;, find me on Linkerd Slack at slack.linkerd.io, or DM me at @WM on Twitter. I'd love to hear about your challenges and how I can help.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrap up&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you enjoyed this interview and want to hear more Kubernetes stories and opinions, visit &lt;a href="https://kube.fm/"&gt;KubeFM&lt;/a&gt; and subscribe to the podcast.&lt;/li&gt;
&lt;li&gt;If you want to keep up-to-date with Kubernetes, subscribe to &lt;a href="https://learnk8s.io/learn-kubernetes-weekly"&gt;Learn Kubernetes Weekly&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you want to become an expert in Kubernetes, look at courses on &lt;a href="https://learnk8s.io/training"&gt;Learnk8s&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Finally, if you want to keep in touch, follow me on &lt;a href="https://www.linkedin.com/in/gulcantopcu/"&gt;Linkedin&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>servicemesh</category>
      <category>ebpf</category>
    </item>
    <item>
      <title>Clusters Are Cattle Until You Deploy Ingress</title>
      <dc:creator>Gulcan Topcu</dc:creator>
      <pubDate>Thu, 30 May 2024 13:42:36 +0000</pubDate>
      <link>https://community.ops.io/gulcantopcu/clusters-are-cattle-until-you-deploy-ingress-241g</link>
      <guid>https://community.ops.io/gulcantopcu/clusters-are-cattle-until-you-deploy-ingress-241g</guid>
      <description>&lt;p&gt;Managing repeatable infrastructure is the bedrock of efficient Kubernetes operations. While the ideal is to have easily replaceable clusters, reality often dictates a more nuanced approach. Dan Garfield, Co-founder of Codefresh, briefly captures this with the analogy: "A Kubernetes cluster is treated as disposable until you deploy ingress, and then it becomes a pet." &lt;/p&gt;

&lt;p&gt;Dan Garfield joined Bart Farrell to understand how he managed Kubernetes clusters, transforming them from "cattle" to "pets" weaving in fascinating anecdotes about fairy tales, crypto, and snowboarding.&lt;/p&gt;

&lt;p&gt;You can watch (or listen) to this interview &lt;a href="https://kube.fm/ingress-gitops-dan"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: What are your top three must-have tools starting with a fresh Kubernetes cluster?&lt;br&gt;
&lt;strong&gt;Dan&lt;/strong&gt;: &lt;a href="https://argo-cd.readthedocs.io/en/stable/"&gt;Argo CD&lt;/a&gt; is the first tool I install. For AWS, I will add &lt;a href="https://karpenter.sh/"&gt;Karpenter&lt;/a&gt; to manage costs. I will also use &lt;a href="https://longhorn.io/"&gt;Longhorn&lt;/a&gt; for on-prem storage solutions, though I'd need ingress. Depending on the situation, I will install Argo CD first and then one of those other two.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Many of our recent podcast guests have highlighted Argo or &lt;a href="https://fluxcd.io/"&gt;Flux&lt;/a&gt;, emphasizing their significance in the  &lt;a href="https://www.gitops.tech/"&gt;GitOps&lt;/a&gt; domain. Why do you think these tools are considered indispensable?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: The entire deployment workflow for Kubernetes revolves around Argo CD. When I set up a cluster, some might default to using &lt;code&gt;kubectl apply&lt;/code&gt;, or if they're using &lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt;, they might opt for the &lt;a href="https://registry.terraform.io/providers/hashicorp/helm/latest/docs"&gt;Helm provider&lt;/a&gt; to install various Helm charts. However, with Argo CD, I have precise control over deployment processes. &lt;/p&gt;

&lt;p&gt;Typically, the bootstrap pattern involves using Terraform to set up the cluster and Helm provider to install Argo CD and predefined repositories. From there, Argo CD takes care of the rest.&lt;/p&gt;

&lt;p&gt;I have my Kubernetes cluster displayed on the screen behind me, running Argo CD for those who can't see. I utilize &lt;a href="https://argocd-autopilot.readthedocs.io/en/stable/"&gt;Argo CD autopilot&lt;/a&gt;, which streamlines repository setup. Last year, when my system was compromised, Argo CD autopilot swiftly restored everything. It's incredibly convenient. Moreover, when debugging, the ability to quickly toggle sync, reset applications, and access logs through the UI is invaluable. Argo CD is, without a doubt, my go-to tool for Kubernetes. Admittedly, I'm biased as an Argo maintainer, but it's hard to argue with its effectiveness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Our numerous podcast discussions with seasoned professionals show that GitOps has been a recurring theme in about 90% of our conversations. Almost every guest we've interviewed has emphasized its importance, often mentioning it as their primary tool alongside other essentials like &lt;a href="https://cert-manager.io/"&gt;cert manager&lt;/a&gt;, &lt;a href="https://kyverno.io/"&gt;Kyverno&lt;/a&gt;, or &lt;a href="https://www.openpolicyagent.org/"&gt;OPA&lt;/a&gt;, depending on their preferences. &lt;/p&gt;

&lt;p&gt;Could you introduce yourself to those unfamiliar with you? Tell us your background, work, and where you're currently employed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: I'm Dan Garfield, the co-founder and chief open-source officer at CodeFresh. As Argo maintainers, we're deeply involved in shaping the GitOps landscape. I've played a key role in creating the GitOps standard, establishing the GitOps working group, and spearheading the &lt;a href="https://opengitops.dev/"&gt;OpenGitOps&lt;/a&gt; project. &lt;/p&gt;

&lt;p&gt;Our journey began seven years ago when we launched &lt;a href="https://codefresh.io/"&gt;CodeFresh&lt;/a&gt; to enhance software delivery in the cloud-native ecosystem, primarily focusing on Kubernetes. Alongside my responsibilities at CodeFresh, I actively contribute to &lt;a href="https://github.com/kubernetes/sig-security"&gt;SIG security&lt;/a&gt; within the Kubernetes community and oversee community-driven events like &lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/co-located-events/argocon/"&gt;ArgoCon&lt;/a&gt;. Outside of work, I reside in Salt Lake City, where I indulge in my passion for snowboarding. Oh, and I'm a proud father of four, eagerly awaiting the arrival of our fifth child.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: It’s a fantastic journey. We'll have to catch up during &lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/"&gt;KubeCon in Salt Lake City&lt;/a&gt; later this year. Before delving into your entrepreneurial venture, could you share how you entered Cloud Native?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: My journey into the tech world began early on as a programmer. However, I found myself gravitating more towards the business side, where I discovered my knack for marketing. My pivotal experience was leading enterprise marketing at &lt;a href="https://www.atlassian.com/"&gt;Atlassian&lt;/a&gt; during the release of &lt;a href="https://www.atlassian.com/enterprise/data-center"&gt;Data Center&lt;/a&gt;, Atlassian's clustered tool version. Initially, it didn't garner much attention internally, but it soon became a game-changer, driving significant revenue for the company. Witnessing this transformation, including Atlassian's public offering, was exhilarating, although my direct contribution was modest as I spent less than two years there.&lt;/p&gt;

&lt;p&gt;I noticed a significant change in containerization, which sparked my interest in taking on a new challenge. Conversations with friends starting container-focused experiences captivated me. Then, &lt;a href="https://www.linkedin.com/in/razielt/"&gt;Raziel&lt;/a&gt;, the founder of Codefresh, reached out, sharing his vision for container-driven software development. His perspective resonated deeply, prompting me to join the venture.&lt;/p&gt;

&lt;p&gt;Codefresh initially prioritized building robust CI tools, recognizing that effective CD hinges on solid CI practices and needed to be improved in many organizations at the time (and possibly still is). As we expanded, we delved into CD and explored ways to leverage Kubernetes insights.&lt;/p&gt;

&lt;p&gt;Kubernetes had yet to emerge as the dominant force when we launched this journey. We evaluated competitors like &lt;a href="https://www.rancher.com/"&gt;Rancher&lt;/a&gt;, &lt;a href="https://www.redhat.com/en/technologies/cloud-computing/openshift"&gt;OpenShift&lt;/a&gt;, &lt;a href="https://kube.fm/ingress-gitops-dan#:~:text=.%20And%20maybe-,Mesosphere,-is%20going%20to"&gt;Mesosphere&lt;/a&gt;, and &lt;a href="https://docs.docker.com/engine/swarm/"&gt;Docker Swarm&lt;/a&gt;. However, after thorough analysis, Kubernetes emerged as the frontrunner, boldly cueing us to bet on its potential.&lt;/p&gt;

&lt;p&gt;Our decision proved visionary as other platforms gradually transitioned towards Kubernetes. Amazon's launch of &lt;a href="https://aws.amazon.com/eks/"&gt;EKS&lt;/a&gt; validated our foresight. This strategic alignment with Kubernetes paved the way for our deep dive into GitOps and Argo CD, driving the project's growth within the &lt;a href="https://www.cncf.io/"&gt;CNCF&lt;/a&gt; and its eventual graduation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: It's impressive how much you've accomplished in such a short timeframe, especially while balancing family life. With the industry evolving rapidly, How do you keep up with the cloud-native scene as a maintainer and a co-founder?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: Indeed, staying updated involves reading blogs, scrolling through Twitter, and tuning into podcasts. However, I've found that my most insightful learnings come from direct conversations with individuals. For instance, I've assisted the community with Argo implementations, not as a sales pitch but to help gather insights genuinely. Interacting with Codefresh users and engaging with the broader community provides invaluable perspectives on adoption challenges and user needs.&lt;/p&gt;

&lt;p&gt;Oddly enough, sometimes, the best way to learn is by putting forth incorrect opinions or questions. Recently, while wrestling with AI project complexities, I pondered aloud whether all Docker images with AI models would inevitably be bulky due to &lt;a href="https://pytorch.org/"&gt;PyTorch&lt;/a&gt; dependencies. To my surprise, this sparked many helpful responses, offering insights into optimizing image sizes. Being willing to be wrong opens up avenues for rapid learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: That vulnerability can indeed produce rich learning experiences. It's a valuable practice. Shifting gears slightly, if you could offer one piece of career advice to your younger self, what would it be?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: Firstly, embrace a mindset of rapid learning and humility. Be more open to being wrong and detach ego from ideas. While standing firm on important matters is essential, recognize that failure and adaptation are part of the journey. Like a stone rolling down a mountain, each collision smooths out the sharp edges, leading to growth.&lt;/p&gt;

&lt;p&gt;Secondly, prioritize hiring decisions. The people you bring into your business shape its trajectory more than any other factor. A wrong hire can have far-reaching consequences beyond their salary. Despite some missteps, I've been fortunate to work with exceptional individuals who contribute immensely to our success. When considering a job opportunity, I always emphasize the people's quality, the mission's significance, and fair compensation. Prioritizing in this order ensures fulfillment and satisfaction in your career journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: That's insightful advice, especially about hiring. Surrounding yourself with talented individuals can make all the difference in navigating business challenges. Now, shifting gears to your recent tweet about Kubernetes and Ingress, who was the intended audience for that &lt;a href="https://twitter.com/todaywasawesome/status/1701625561536454879"&gt;tweet&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: Honestly, it was more of a reflection for myself, perhaps shouted into the void. I was weighing the significance of deploying Ingress within Kubernetes. In engineering, a saying that "the problem is always DNS" suggests that your cluster becomes more tangible once you configure DNS settings. Similarly, setting up Ingress signifies a shift in how you perceive and manage your cluster. Without Ingress, it might be considered disposable, like a development environment. However, once Ingress is in place, your cluster hosts services that require more attention and care.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: For those unfamiliar with the "&lt;a href="https://www.hava.io/blog/cattle-vs-pets-devops-explained"&gt;cattle versus pets&lt;/a&gt;" analogy in Kubernetes, could you elaborate on its relevance, particularly in the context of Ingress?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: While potentially controversial, the "cattle versus pets" analogy illustrates a fundamental concept in managing infrastructure. In this analogy, cattle represent interchangeable and disposable resources, much like livestock in a ranching operation. Conversely, pets are unique, loved entities requiring personalized care.&lt;/p&gt;

&lt;p&gt;In Kubernetes, deploying resources as "cattle" means treating them as replaceable, identical units. However, Ingress introduces a shift towards a "pet" model, where individual services become distinct and valuable entities. Just as you wouldn't name every cow on a farm, you typically wouldn't concern yourself with the specific details of each interchangeable resource. But once you start deploying services accessible via Ingress, each service becomes unique and worthy of individual attention, akin to caring for a pet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: It seems the "cattle versus pets" analogy is stirring some controversy among vegans, which is understandable given its context. How does this analogy relate to Kubernetes and Ingress?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: In software, the analogy helps distinguish between disposable, interchangeable components (cattle) and unique, loved entities (pets). For instance, in my Kubernetes cluster, the individual nodes are like cattle—replaceable and without specific significance. If one node malfunctions, I can easily swap it out without concern.&lt;/p&gt;

&lt;p&gt;However, once I deploy Ingress and start hosting services, the cluster takes on a different role. While the individual nodes remain disposable, the cluster becomes more akin to a pet. I care about its state, its configuration, and its uptime. Suddenly, I'm monitoring metrics and ensuring its well-being, similar to caring for a pet's health.&lt;/p&gt;

&lt;p&gt;So, the analogy underscores the shift in perception and care that occurs when transitioning from managing generic infrastructure to hosting meaningful services accessible via Ingress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: That's a fascinating perspective. How do Kubernetes and Ingress relate to all of this?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: The ingress in Kubernetes is a central resource for managing incoming traffic to the cluster and routing it to different services. However, unlike other resources in Kubernetes, such as those managed by Argo CD, the ingress is often shared among multiple applications. Each application may have its own deployment rules, allowing for granular control over updates and configurations. For example, one application might only update when manually triggered, while another automatically updates when changes are detected.&lt;/p&gt;

&lt;p&gt;The challenge arises because updating Ingress impacts multiple applications simultaneously. Through this centralized routing mechanism, you're essentially juggling the needs of various applications. This complexity underscores the importance of managing the cluster effectively, as each change to Ingress affects the entire ecosystem of applications.&lt;/p&gt;

&lt;p&gt;The Argo CD community is discussing introducing delegated server-side field permissions. This feature would allow one application to modify components of another, easing the burden of managing shared resources like Ingress. However, it's still under debate, and alternative solutions may emerge. Other tools, like &lt;a href="https://projectcontour.io/"&gt;Contour&lt;/a&gt;, offer a different approach by treating each route as a separate custom resource, allowing applications to manage their routing independently.&lt;/p&gt;

&lt;p&gt;Ultimately, deploying the ingress marks a shift in the cluster's dynamics, requiring considerations such as DNS settings and centralized routing configurations. As a result, the cluster becomes more specialized and less disposable as its configuration becomes bespoke to accommodate the routing needs of various applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Any recommendations for those who aim to keep their infrastructure reproducible while needing Ingress?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: One approach is abstraction and leveraging wildcards. While technically, you can deploy an Ingress without external pointing; I prefer the concept of self-updating components. Tools like &lt;a href="https://www.crossplane.io/"&gt;Crossplane&lt;/a&gt; or &lt;a href="https://cloud.google.com/config-connector/docs/overview"&gt;Google Cloud's Config Connector&lt;/a&gt; allow you to represent non-Kubernetes resources as Kubernetes objects. Incorporating such tools into your cluster bootstrap process ensures the dynamic creation of necessary components.&lt;/p&gt;

&lt;p&gt;However, there's a caveat. Despite reproducible clusters, external components like DNS settings may not be. Updating name servers remains a manual task. It's a tricky aspect of operations that needs a perfect solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: How do GitOps and Argo CD fit into solving this challenge?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: GitOps and Argo CD play a crucial role in managing complex infrastructure, especially with sensitive data. The key lies in representing all infrastructure resources, including secrets and certificates, as Kubernetes objects. This approach enables Argo CD to track and reconcile them, ensuring that the desired state defined in Git reflects accurately in your cluster.&lt;/p&gt;

&lt;p&gt;Tools like Crossplane, &lt;a href="https://www.vcluster.com/"&gt;vCluster&lt;/a&gt; (for managing multiple clusters), or &lt;a href="https://cluster-api.sigs.k8s.io/"&gt;Cluster API&lt;/a&gt; (for provisioning additional clusters) can extend this approach to handle various infrastructure resources beyond Kubernetes. Essentially, Git serves as the single source of truth for your entire infrastructure, with Argo CD functioning as the engine to enforce that truth.&lt;/p&gt;

&lt;p&gt;A common issue with Terraform is that its state can get corrupted easily because it must constantly monitor changes. Crossplane often uses Terraform under the hood. The problem is not with Terraform's primitives but with the data store and its maintenance. Crossplane ensures the data store remains uncorrupted, accurately reflecting the current state. If changes occur, they appear as out of sync in Argo CD.&lt;/p&gt;

&lt;p&gt;You can then define policies for reconciliation and updates, guiding the controller on the next steps. This approach is crucial for managing infrastructure effectively. Using etcd as your data store is an excellent pattern and likely the future of infrastructure management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: What would happen if the challenges of managing Kubernetes infrastructure extend beyond handling ingress traffic to managing sensitive information like state secrets and certificates? This added complexity could lead to a "pet" cluster scenario. Would you think backup and recovery tools like &lt;a href="https://velero.io/"&gt;Velero&lt;/a&gt; would be easier to use without these additional challenges?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: I need to familiarize myself with Velero. Can you tell me about it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Velero is a tool focused on backing up and restoring Kubernetes resources. Since you mentioned Argo CD and custom resources earlier, I'm curious about your approach to backing up persistent volumes. How did you manage disaster recovery in your home lab when everything went haywire? &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: I've used Longhorn for volume restoration, and clear protocols were in place. I'm currently exploring Velero, which looks like a promising tool for data migration. &lt;/p&gt;

&lt;p&gt;Managing data involves complexities like caring for a pet, requiring careful handling and migration. Many people need help managing stateful workloads in Kubernetes. Fortunately, most of my stateful workloads in Kubernetes can rebuild their databases if data is lost. Therefore, data loss is manageable for me. Most of the elements I work with are replicable. Any items needing persistence between sessions are stored in Git or a versioned, immutable secret repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: It's worth noting, especially considering what happened with your home lab. Should small startups prioritize treating their clusters like cattle, or is ClickOps sufficient?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: It depends on the use cases. vCluster, a project I'm fond of, is particularly well-suited for creating disposable development clusters, providing developers with isolated sandboxes for testing and experimentation. It allows deploying a virtualized cluster on an existing Kubernetes setup, which saves significantly on ingress costs, especially on platforms like AWS, where you can consolidate ingress into one.&lt;/p&gt;

&lt;p&gt;Another example is using Argo CD's application sets to create full-stack environments for each pull request in a Git repository. These environments, which include a virtual cluster, are unique to each pull request but remain completely disposable and easily recreated, much like cattle.&lt;/p&gt;

&lt;p&gt;However, managing ingress for disposable clusters can be challenging. When deployed and applied to vClusters, ingress needs custom configurations, requiring separate tracking and maintenance. Despite this, it's still beneficial to prioritize treating infrastructure as disposable. For example, while my on-site Kubernetes cluster is a "pet" that requires careful maintenance, its nodes are considered "cattle" that can be replaced or reconfigured without disrupting overall operations. This abstraction is a core principle of Kubernetes and allows for greater flexibility and resilience.&lt;/p&gt;

&lt;p&gt;By abstracting clusters away from custom configurations and focusing on reproducibility, you can treat them more like cattle, even if they have some pet-like qualities due to ingress deployment and DNS configurations. This commoditization of clusters simplifies management and enables greater scalability. The more you abstract and standardize your infrastructure, the smoother your operations will become. And to be clear, this analogy has nothing to do with dietary choices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: If you could rewind time and change anything, what scenario would you create to avoid writing that tweet?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: We've been discussing a feature in Argo CD that allows for delegated field permissions to happen server-side. It addresses a problem inherent in Kubernetes architecture, particularly regarding ingress. The current setup doesn't allow for external delegation of its components, even though many users operate it that way. If I could make changes, I might have split ingress into an additional resource, including routes as a separate definition that users could manage independently.&lt;/p&gt;

&lt;p&gt;Exploring other scenarios where delegated field permissions would be helpful is crucial. Ingress is the most obvious example, highlighting an area for potential improvement. Creating separate routes and resources could solve this issue without altering Argo CD. This approach, similar to Contour's, could be a promising solution. Contour's separate resource strategy demonstrates learning from Ingress and making improvements. We should consider adopting tools like Contour or other service mesh ingress providers, as several compelling options are available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: If you had to build a cluster from scratch today, how would you address these issues whenever possible?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: Sometimes you just have to accept the challenge and not try to work around it. Setting up ingress and configuring DNS for a single cluster might not be a big deal, but it's worth considering a re-architecture if you're doing it on a large scale, like 250,000 times. For instance, with Codefresh, many users opt for our hybrid setup. They deploy our GitOps agent, based on Argo CD, on their cluster, which then connects to our control plane. &lt;/p&gt;

&lt;p&gt;One of the perks we offer is a hosted ingress. Instead of setting up ingresses for each of their 5000 Argo CD instances, users can leverage our hosted ingress, saving money and configuration headaches. Consider alternatives like a tunneling system instead of custom ingress setups, depending on your use case. A hosted ingress can be a game-changer for large-scale distributed setups like multiple Argo CD instances, saving costs and simplifying configurations. Ultimately, re-architecting is always an option tailored to what works best for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: We're nearing the end of the podcast and want to touch on a closing question, which we are looking at from a few different angles. How do you deal with the anxiety of adopting a new tool or practice, only to find out later that it might be wrong?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: I've seen this dynamic play out. Sometimes, organizations invest heavily in a tool, only to realize a few years later that there are better fits. Take the example of a company transitioning to Argo workflows for CICD and deployment, only to discover that Argo CD would have been a better fit for most of their use cases. However, these transitions are well-spent efforts. In their case, the journey through Argo workflows paved the way for a smoother transition to Argo CD. Sometimes, detaching the wrong direction is necessary to reach the correct destination faster.&lt;/p&gt;

&lt;p&gt;You can only sometimes foresee the ideal solution from where you are, and experimenting with different tools is part of the learning process. It's essential not to dwell on mistakes but to learn from them and move forward. After all, even if a tool ultimately proves to be the wrong choice, it often still brings value. The key is recognizing when a change is needed and adapting accordingly. Mistakes only become fatal if we fail to acknowledge and learn from them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: We stumbled upon your blog, &lt;a href="https://todaywasawesome.com/"&gt;Today Was Awesome&lt;/a&gt;, which hasn't seen an update in a while. You wrote a &lt;a href="https://todaywasawesome.com/why-a-bitcoin-crash-could-be-great-for-bitcoin/"&gt;post&lt;/a&gt; about Bitcoin, priced at around $450 in 2015. Are you a crypto millionaire now?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: Not quite! Crypto is a fascinating topic, often sparking wild debates. While there's no shortage of scams in the crypto world, there's also genuine innovation happening. I dabbled in Bitcoin early on and even mined a bit to understand its potential use cases better. One notable experience was mentoring at &lt;a href="https://hackthenorth.com/"&gt;Hack the North&lt;/a&gt;, a massive hackathon where numerous projects leveraged Ethereum. I strategically sold my Bitcoin for Ethereum, which turned out well. However, I'm still waiting on those Lambos—I'm not quite at millionaire status yet!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Your blog covers many topics, including one post titled  "&lt;a href="https://todaywasawesome.com/what-are-we-really-supposed-to-learn-from-fairy-tales/"&gt;What are we really supposed to learn from fairy tales&lt;/a&gt;.” How did you decide on such diverse content?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan:&lt;/strong&gt; I can't recall the exact inspiration, but my wife and I often joke about how outdated the moral lessons in fairy tales feel. Exploring their relevance in today's world is an interesting angle to explore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: What's next for you? More fairy tales, moon-bound Lamborghinis, or snowboarding adventures? Also, let's discuss your recent tweet about making your bacon. How did that start?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: Ah, yes, making bacon! It's surprisingly simple. First, you get pork belly and cure it in the fridge for seven to ten days. Then, you smoke it for a couple of hours.&lt;/p&gt;

&lt;p&gt;My primary motivation was to avoid the nitrates found in store-bought bacon linked to health issues. Homemade bacon tastes better, is of higher quality, and is cheaper. My freezer now overflows with homemade bacon, which makes for a unique and well-received gift. People love the taste; overall, it's been a rewarding and delicious effort! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Regardless of dietary choices, considering where your food comes from and being involved in the process—whether by growing your food or making it yourself and turning it into a gift for others—creates a different, enriching experience. What's next for you?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: This year, my focus is on environment management and promotion. In the Kubernetes world, we often think about applications, clusters, and instances of Argo CD to manage everything. We're working on a paradigm shift: we think about products instead of applications. In our context, a product is an application in every environment in which it exists. Hence, if you deploy a development application, move it to stage, and finally to production, you're deploying the same application with variations three times. That's what we call a product. We’re shifting from thinking about where an application lives to considering its entire life cycle. Instead of focusing on clusters, we think about environments because an environment might have many clusters.&lt;/p&gt;

&lt;p&gt;For instance, retail companies like Starbucks, Chick-fil-A, and Pizza Hut often have Kubernetes clusters on-site. Deploying to US West might mean deploying to 1,300 different clusters and 1,300 different Argo CD instances. We abstract all that complexity by grouping them into the environments bucket. We focus on helping people scale up and build their workflow using environments and establishing these relationships. The feedback has been incredible; people are amazed by what we’re demonstrating.&lt;/p&gt;

&lt;p&gt;We're showcasing this at ArgoCon next month in Paris. After that, I plan to do some snowboarding and then make it back in time for the birth of my fifth child. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bart&lt;/strong&gt;: That's a big plan. 2024 is packed for you. If people want to contact you, what's the best way to do it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dan&lt;/strong&gt;: Twitter is probably the best. You can find me at @todaywasawesome. If you visit my blog and leave comments, I won't see them, as it's more of an archive now. I keep it around because I worked on it ten years ago and occasionally reference something I wrote. &lt;/p&gt;

&lt;p&gt;You can also reach out on LinkedIn, GitHub, or Slack. I respond slower on Slack, but I do get to it eventually.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Wrap up&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;If you enjoyed this interview and want to hear more Kubernetes stories and opinions, visit &lt;a href="https://kube.fm"&gt;KubeFM&lt;/a&gt; and subscribe to the podcast.&lt;/li&gt;
&lt;li&gt;If you want to keep up-to-date with Kubernetes, subscribe to &lt;a href="https://learnk8s.io/learn-kubernetes-weekly"&gt;Learn Kubernetes  Weekly&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you want to become an expert in Kubernetes, look at courses on &lt;a href="https://learnk8s.io/training"&gt;Learnk8s&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Finally, if you want to keep in touch, follow me on &lt;a href="https://www.linkedin.com/in/gulcantopcu/"&gt;Linkedin&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>gitops</category>
      <category>argo</category>
    </item>
    <item>
      <title>Upgrading Hundreds of Kubernetes Clusters</title>
      <dc:creator>Gulcan Topcu</dc:creator>
      <pubDate>Wed, 03 Apr 2024 07:15:53 +0000</pubDate>
      <link>https://community.ops.io/gulcantopcu/upgrading-hundreds-of-kubernetes-clusters-117j</link>
      <guid>https://community.ops.io/gulcantopcu/upgrading-hundreds-of-kubernetes-clusters-117j</guid>
      <description>&lt;p&gt;Automating the upgrade process for hundreds of Kubernetes clusters is a formidable task, but it's one that Pierre Mavro, the co-founder and CTO at Qovery, is well-equipped to handle. With his extensive experience and a dedicated team of engineers, they have successfully automated the upgrade process for both public and private clouds.&lt;/p&gt;

&lt;p&gt;Bart Farell sat with Pierre to understand how he did it without breaking the bank.&lt;/p&gt;

&lt;p&gt;You can watch (or listen) to this interview &lt;a href="https://kube.fm/upgrading-100s-clusters-pierre"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: If you installed three tools on a new Kubernetes cluster, which tools would they be and why?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: The first tool I recommend is &lt;a href="https://k9scli.io/"&gt;K9s&lt;/a&gt;. It's not just a time-saver but a productivity booster. With its intuitive interface, you can speed up all the usual kubectl commands, access logs, edit resources and configurations, and more. It's like having a personal assistant for your cluster management tasks.&lt;/p&gt;

&lt;p&gt;The second one is a combination of tools: &lt;a href="https://github.com/kubernetes-sigs/external-dns"&gt;External DNS&lt;/a&gt;, &lt;a href="https://cert-manager.io/"&gt;cert-manager&lt;/a&gt;, and &lt;a href="https://github.com/kubernetes/ingress-nginx"&gt;NGINX ingress&lt;/a&gt;. Using these as a stack, you can quickly deploy an application, making it available through a DNS with a TLS without much effort via simple annotations. When I first discovered External DNS, I was amazed at its quality.&lt;/p&gt;

&lt;p&gt;The last one is mostly an observability stack with &lt;a href="https://github.com/prometheus-operator/kube-prometheus"&gt;Prometheus&lt;/a&gt;, &lt;a href="https://github.com/kubernetes-sigs/metrics-server"&gt;Metric server&lt;/a&gt;, and &lt;a href="https://github.com/kubernetes-sigs/prometheus-adapter"&gt;Prometheus adapter&lt;/a&gt; to have excellent insights into what is happening on the cluster. You can reuse the same stack for autoscaling by repurposing all the data collected for monitoring.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Tell us more about your background and how you progressed through your career.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: My journey in the tech industry has been diverse and enriching. I've had the privilege of working for renowned companies like Red Hat and Criteo, where I honed my skills in cloud deployment. Today, as the co-founder and CTO of Qovery, I bring a wealth of experience in distributed systems, particularly for NoSQL databases, and a deep understanding of Kubernetes, which I began exploring in 2016 with version 1.2.&lt;/p&gt;

&lt;p&gt;To provide some context to Qovery's services, we offer a self-service developer platform that allows code deployment on Kubernetes without requiring expertise in infrastructure. We keep our platform cloud-agnostic and place Kubernetes at the core to ensure our deployments are portable across different cloud providers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: How was your journey into Kubernetes and the cloud-native world, given the changes since 2016?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: Actually, learning Kubernetes was quite a journey. You had a less developed landscape with most Kubernetes components in alpha at these times. In 2016, I was also juggling between my job at Criteo and my own company. &lt;/p&gt;

&lt;p&gt;When it came to deployment, I had several options, and I chose the hard way: deploying Kubernetes on bare metal nodes using &lt;a href="https://github.com/kubernetes-sigs/kubespray"&gt;KubeSpray&lt;/a&gt;. Troubleshooting bare metal Kubernetes deployments honed my skills in pinpointing issues. This hands-on experience provided a deep understanding of how each component, like the &lt;a href="https://kubernetes.io/docs/concepts/overview/components/#control-plane-components:~:text=a%20Kubernetes%20cluster-,Control%20Plane%20Components,-The%20control%20plane%27s"&gt;Control Plane&lt;/a&gt;, &lt;a href="https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#:~:text=kubelet-,kubelet,-Synopsis"&gt;kubelet&lt;/a&gt;, &lt;a href="https://kubernetes.io/docs/setup/production-environment/container-runtimes/#:~:text=Container%20Runtimes-,Container%20Runtimes,-Note%3A%20Dockershim"&gt;Container Runtime&lt;/a&gt;, and &lt;a href="https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/#:~:text=Kubernetes%20Scheduler-,Kubernetes%20Scheduler,-In%20Kubernetes%2C"&gt;scheduler&lt;/a&gt;, interacts to orchestrate containers. &lt;/p&gt;

&lt;p&gt;Another resource that I found pretty helpful was "&lt;a href="https://github.com/kelseyhightower/kubernetes-the-hard-way"&gt;Kubernetes the Hard Way&lt;/a&gt;" by Kelsey Hightower despite its complexity.&lt;/p&gt;

&lt;p&gt;Lastly, I got help from the official &lt;a href="https://kubernetes.io/docs/home/"&gt;Kubernetes docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Looking back, is there anything you would do differently or advice you would give to your past self?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: Not really. Looking back, KubeSpray was the best option at the time, and there were no significant changes I would make to the decision.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: You've worked on various projects involving bare metal and private clouds. Can you share more about your Kubernetes experience, such as the scale of clusters and nodes?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: At Criteo, I led a NoSQL team supporting several million requests per second on a massive 4,500-node bare-metal cluster. Managing this infrastructure - particularly node failures and data consistency across stateful databases like Cassandra, Couchbase, and Elasticsearch -  was a constant challenge.&lt;/p&gt;

&lt;p&gt;While at Criteo, I also had a personal project where I built a smaller 10-node bare-metal cluster.&lt;br&gt;
This experience with bare metal management solidified my belief in the benefits of Kubernetes, which I later implemented at Criteo.&lt;/p&gt;

&lt;p&gt;When we adopted Kubernetes at Criteo, we encountered initial hurdles. In 2018, Kubernetes operators were still new, and there was internal competition from &lt;a href="https://mesos.apache.org/"&gt;Mesos&lt;/a&gt;. We addressed these challenges by validating Kubernetes performance for our specific needs and building custom Chef recipes, &lt;a href="https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#:~:text=StatefulSets-,StatefulSets,-StatefulSet%20is%20the"&gt;StatefulSet &lt;/a&gt;hooks, and startup scripts. &lt;/p&gt;

&lt;p&gt;Migrating to Kubernetes took eight months of dedicated effort. It was a complex process, but it was worth it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: As you’ve mentioned, Kubernetes had competitors in 2018 and continues to do so today. Despite the tooling's immaturity, you led a team to adopt Kubernetes for stateful workloads, which was unconventional. How did you guide your team through this transition?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: We had large instances — all between 50 and 100 CPUs each and 256 gigabytes of RAM up to 500 gigabytes of RAM.&lt;/p&gt;

&lt;p&gt;We had multiple Cassandra clusters on a single Kubernetes cluster, and each Kubernetes node was dedicated to a single Cassandra node. We chose this bare metal setup to optimize disk access with  SSD or NVMe.&lt;/p&gt;

&lt;p&gt;Running these stateful &lt;a href="https://kubernetes.io/docs/concepts/workloads/#:~:text=Workloads-,Workloads,-A%20workload%20is"&gt;workloads &lt;/a&gt;wasn't just a matter of starting them up. We had to handle them carefully because stateful sets like Elasticsearch and Cassandra must keep their data safe even if the machine they're running on fails. &lt;/p&gt;

&lt;p&gt;Kubernetes helped us detect issues with these apps using features like &lt;a href="https://kubernetes.io/docs/tasks/run-application/configure-pdb/"&gt;Pod Disruption Budgets (PDBs)&lt;/a&gt; that limit how often pods can be disrupted, StatefulSets that have consistent ordering of execution and stable storage, and automated &lt;a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#:~:text=and%20Startup%20Probes-,Configure%20Liveness%2C%20Readiness%20and%20Startup%20Probes,-This%20page%20shows"&gt;probes &lt;/a&gt;that trigger actions and alerts when something goes wrong.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Your experiences helped me better understand your blog post, The Cost of Upgrading Hundreds of Kubernetes Clusters. After managing large infrastructures, you founded Qovery. What drove you to take this step as an engineer?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: Kubernetes has become a standard, but managing it can be a headache for developers. Cloud providers offer a basic Kubernetes setup, but it often needs more features developers need to get started and deploy applications quickly. Managing the cluster and nodes and keeping them up-to-date is time-consuming. Developers must spend a lot of time adding extra tools and configurations on top of the basic setup and then updating everything, which can be time-consuming.&lt;/p&gt;

&lt;p&gt;To tackle these challenges, I founded Qovery. &lt;/p&gt;

&lt;p&gt;Qovery provides two critical solutions. First, it offers a unified, user-friendly stack across cloud providers, simplifying Kubernetes deployment and management complexity. Second, it enables developers to deploy code without hassle.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Managing clusters can have various interpretations. The term can be broad. How do you define cluster management at Qovery in the context of upgrading and recovery?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: Yes, that's right. At Qovery, we understand the complexity of managing Kubernetes for customers. That's why we automate and simplify the entire process.&lt;/p&gt;

&lt;p&gt;We automatically notify you about upcoming &lt;a href="https://kubernetes.io/releases/"&gt;Kubernetes updates&lt;/a&gt; and handle the upgrade process on schedule, eliminating the need for manual intervention.&lt;/p&gt;

&lt;p&gt;We deploy and manage various essential charts for your environment, including tools for logging, metrics collection, and certificate management. You don't need to worry about these intricacies.&lt;/p&gt;

&lt;p&gt;We deploy all the necessary infrastructure elements to create a fully functional Kubernetes environment for production within 30 minutes. We provide a complete solution that's ready to go.&lt;/p&gt;

&lt;p&gt;We build your container images, push them to a registry, and deploy them based on your preferences. We also handle the lifecycle of the applications deployed.&lt;/p&gt;

&lt;p&gt;We use &lt;a href="https://github.com/kubernetes/autoscaler"&gt;Cluster Autoscaler&lt;/a&gt; to automatically adjust the number of nodes (cluster size) based on your actual usage to ensure efficiency. Additionally, we deploy &lt;a href="https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler"&gt;Vertical &lt;/a&gt;and &lt;a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/"&gt;Horizontal Pod Autoscalers&lt;/a&gt; to scale your applications' resources as their needs change automatically.&lt;/p&gt;

&lt;p&gt;By taking care of these complexities, Qovery frees your developers to focus solely on what matters most: building incredible applications.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: How large is your team of engineers?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: We have ten engineers working on the project.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: How do you manage hundreds of clusters with such a small team?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: We run various tests on each code change, including unit tests for individual components and end-to-end tests that simulate real-world usage. These tests cover configurations and deployment scenarios to catch potential issues early on.&lt;/p&gt;

&lt;p&gt;Before deploying a new cluster for a customer, we put it through its paces on our internal systems for weeks. Then, we deploy it to a separate non-production environment where we closely monitor its performance and address any problems before it reaches your applications. &lt;/p&gt;

&lt;p&gt;We closely monitor Kubernetes and cloud providers' updates by following official &lt;a href="https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG"&gt;changelogs&lt;/a&gt;and using RSS feeds, allowing us to anticipate potential issues and adapt our infrastructure proactively.&lt;/p&gt;

&lt;p&gt;We also leverage tools like &lt;a href="https://github.com/doitintl/kube-no-trouble"&gt;Kubent&lt;/a&gt;, &lt;a href="https://github.com/derailed/popeye"&gt;popeye&lt;/a&gt;, &lt;a href="https://github.com/wayfair-incubator/kdave"&gt;kdave&lt;/a&gt;, and &lt;a href="https://github.com/FairwindsOps/pluto"&gt;Pluto &lt;/a&gt;to help us manage &lt;a href="https://kubernetes.io/docs/reference/using-api/deprecation-guide/#:~:text=API%20Migration%20Guide-,Deprecated%20API%20Migration%20Guide,-As%20the%20Kubernetes"&gt;API deprecations&lt;/a&gt; (when Kubernetes deprecates features in updates) and ensure the overall health of our infrastructure.&lt;/p&gt;

&lt;p&gt;Our multi-layered approach has proven successful. We haven't encountered any significant problems when deploying clusters to production environments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Managing new releases in the Kubernetes ecosystem can be daunting, especially with the extensive changelog. How do you navigate this complexity and spot potential difficulties when a new release is on the horizon?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: While reading the official update changelogs from Kubernetes and cloud providers is our first step, there are other paths to smooth sailing. Furthermore, understanding these detailed technical documents can be challenging, especially for newer team members who don’t have prior on-premise Kubernetes experience.&lt;/p&gt;

&lt;p&gt;Cloud providers typically offer well-defined upgrade processes and document significant changes like removed functionalities, changes in API behavior, or security updates in their changelogs. However, many elements are interconnected in a Kubernetes cluster, especially when you deploy multiple charts for components like logging, observability, and ingress. Even with automated tools, we still need extensive testing and a manual process to ensure everything functions smoothly after an update.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: So, what is your upgrading plan for helm charts?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: Upgrading &lt;a href="https://helm.sh/docs/topics/charts/#:~:text=Contribute%20to%20Docs-,Charts,-Helm%20uses%20a"&gt;Helm charts&lt;/a&gt; can be tricky because they bundle both the deployment and the software; for example, upgrading the &lt;a href="https://grafana.com/docs/loki/latest/"&gt;Loki &lt;/a&gt;chart also upgrades Loki itself. To better understand what's changing, you need to review two changelogs: one for the chart itself and another for the software it includes.&lt;/p&gt;

&lt;p&gt;We keep a close eye on all the charts we use by storing them in a central repository. This way, we have a clear history of every version we've used. We use a tool called &lt;a href="https://github.com/Qovery/helm-freeze"&gt;helm-freeze&lt;/a&gt; to lock down the specific version of each chart we want to use. We can also track changes between chart and software versions using the &lt;code&gt;git diff&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;If needed, we can also adjust specific settings within the chart using values override.&lt;/p&gt;

&lt;p&gt;Like any other code change, we thoroughly test the upgraded charts with unit and functional tests to ensure everything works as expected.&lt;/p&gt;

&lt;p&gt;Once testing is complete, we route the updated charts to our test cluster for a final round of real-world testing. After a few days of monitoring, if everything looks good, we confidently release the updates to our customers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: How do you handle unexpected situations? Do you have a specific strategy or write more automation in the Helm charts?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: We're excited to see more community Helm charts, including &lt;a href="https://helm.sh/docs/topics/chart_tests/#:~:text=Contribute%20to%20Docs-,Chart%20Tests,-A%20chart%20contains"&gt;built-in tests&lt;/a&gt;! This practice will make it easier for everyone to trust and use these charts in the future.&lt;/p&gt;

&lt;p&gt;At Qovery, we enable specific Helm options by default, like '&lt;a href="https://helm.sh/docs/helm/helm_install/#:~:text=Options-,%2D%2Datomic,-if%20set%2C%20the"&gt;atomic&lt;/a&gt;' and '&lt;a href="https://helm.sh/docs/helm/helm_install/#:~:text=version%20is%20used-,%2D%2Dwait,-if%20set%2C%20will"&gt;wait&lt;/a&gt;,' which help prevent upgrade failures during the process. However, there can still be issues that only show up in the logs, so we run additional tests specifically designed to catch these hidden problems.&lt;/p&gt;

&lt;p&gt;Upgrading charts that deploy &lt;a href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#:~:text=Custom%20Resources-,Custom%20Resources,-Custom%20resources%20are"&gt;Custom Resource Definitions (CRDs)&lt;/a&gt; requires special attention. We've automated this process to upgrade the CRDs first (to the required version) and then upgrade the chart itself. Additionally, for critical upgrades like cert-manager (which manages certificates), we back up and restore resources before applying the upgrade to avoid losing any critical certificates.&lt;/p&gt;

&lt;p&gt;If you’re running an older version of a non-critical tool like a logging system, upgrading through each minor version one by one can be time-consuming. We have a better way! Our system allows you to skip to the desired newer version, bypassing all those intermediate updates.&lt;/p&gt;

&lt;p&gt;We've also built safeguards into our system to handle potential problems before they occur during cluster upgrades. For example, the system checks for issues like failed jobs, incorrect Pod Disruption Budgets configuration, or ongoing processes that might block the upgrade. If it detects any problems, our engine automatically attempts to fix or clean up the issue. It will also warn you if any manual intervention is needed.&lt;/p&gt;

&lt;p&gt;Our ultimate goal is to automate the upgrade process as much as possible.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Would you say CRDs are your favorite feature in Kubernetes, or do you have another one?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: CRDs are a powerful tool for customizing Kubernetes, offering a high degree of flexibility. However, the current support and tooling around them leave room for improvement. For example, enhancing Helm with better CRD management capabilities would significantly improve the user experience.&lt;/p&gt;

&lt;p&gt;Despite these limitations, the potential of CRDs for customizing Kubernetes is undeniable, making them a genuinely standout feature.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: With your vast Kubernetes experience since 2016, how does your current process scale beyond 100 clusters? What do you need for such scalability?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: While basic application metrics can provide a general sense of health, managing hundreds of clusters requires more in-depth testing. Here at Qovery, with our experience handling nearly 300 clusters, we've found that:&lt;/p&gt;

&lt;p&gt;More than basic metrics are needed. We need comprehensive testing that leverages application-specific metrics to ensure everything functions as expected.&lt;/p&gt;

&lt;p&gt;Scaling requires more granular control over deployments, such as halting failures and providing detailed information to our users. For instance, quota issues from the cloud provider might necessitate user intervention.&lt;/p&gt;

&lt;p&gt;Drawing from my experience at Criteo, where robust tooling was essential for managing complex tasks, powerful tools are the key to effectively scaling beyond 100 clusters.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Looking ahead at Qovery's roadmap, what's next for your team?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;:  Qovery will add &lt;a href="https://cloud.google.com/?hl=en"&gt;Google Cloud Platform (GCP)&lt;/a&gt; by year-end, joining &lt;a href="https://aws.amazon.com/"&gt;AWS &lt;/a&gt;and &lt;a href="https://www.scaleway.com/en/"&gt;Scaleway&lt;/a&gt;! This expansion gives you more choices for your cloud needs.&lt;/p&gt;

&lt;p&gt;We're extracting reusable code sections, like those related to Helm integration, and transforming them into dedicated libraries. By making these functionalities available as open-source libraries, we empower the developer community to leverage them in their projects.&lt;/p&gt;

&lt;p&gt;We strongly believe in &lt;a href="https://www.rust-lang.org/"&gt;Rust &lt;/a&gt;as a powerful language for building production-grade software, especially for systems like ours that run alongside Kubernetes. &lt;/p&gt;

&lt;p&gt;We're also developing a service catalog feature that offers a user-friendly interface and streamlines complex deployments. This feature will allow users to focus on their applications, not the intricacies of the underlying technology.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: Do you have any plans to include &lt;a href="https://azure.microsoft.com/en-us"&gt;Azure&lt;/a&gt;?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: Yes, we have, but integrating a new cloud provider, given our current team size, is challenging. While we are a team of seniors, each cloud provider has nuances; some are more mature or resource-extensive than others. &lt;/p&gt;

&lt;p&gt;Today, our focus is on AWS and GCP, as our customers most request. However, we're also working on a more modular approach that will allow Qovery to be deployed on any Kubernetes cluster, irrespective of the cloud provider, although this is still in progress.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: We're looking forward to hearing more about that. So, with your black belt in karate, how does that experience influence how you approach challenges, breaking them down into manageable steps?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: Karate has taught me the importance of discipline, focus, and breaking down complex tasks into manageable steps. Like in karate, where each move is deliberate and precise, I apply the same approach to challenges in my work, breaking them down into smaller, achievable goals. &lt;/p&gt;

&lt;p&gt;Karate has also instilled in me a sense of perseverance and resilience, which are invaluable when facing difficult situations.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: I'm a huge martial arts fan. How do you see martial arts' influence on managing stress in challenging situations?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: It varies from person to person. My experience in the banking industry has shown me that while some can handle stressful situations, others struggle. Martial arts can help manage stress somewhat, depending on the person.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: How has your 25-year journey in karate shaped your perspective?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: Karate has become a part of me, and I plan to continue as long as possible. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bart&lt;/strong&gt;: What's the best way to reach out to you&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre&lt;/strong&gt;: You can reach me on LinkedIn or via email. I'm always happy to help.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrap up 🌄&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you enjoyed this interview and want to listen to more Kubernetes stories and opinions, head to &lt;a href="https://kube.fm"&gt;KubeFM&lt;/a&gt; and subscribe to the podcast.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you want to keep up-to-date with Kubernetes, subscribe to &lt;a href="https://learnk8s.io/learn-kubernetes-weekly"&gt;Learn Kubernetes  Weekly&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you want to become an expert in Kubernetes, look at courses on &lt;a href="https://learnk8s.io/training"&gt;Learnk8s&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And finally, if you want to keep in touch, follow me on &lt;a href="https://www.linkedin.com/in/gulcantopcu/"&gt;Linkedin&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
    </item>
  </channel>
</rss>
