<?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>DEV Community: vijaykanth1729</title>
    <description>The latest articles on DEV Community by vijaykanth1729 (@vijaykanth-devops).</description>
    <link>https://dev.to/vijaykanth-devops</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3946211%2F77ed9e4e-ee07-4938-8fa8-79103483c791.jpeg</url>
      <title>DEV Community: vijaykanth1729</title>
      <link>https://dev.to/vijaykanth-devops</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vijaykanth-devops"/>
    <language>en</language>
    <item>
      <title>8 Kubernetes Security Misconfigurations That Make It to Production (And How to Fix Them)</title>
      <dc:creator>vijaykanth1729</dc:creator>
      <pubDate>Fri, 22 May 2026 13:50:13 +0000</pubDate>
      <link>https://dev.to/vijaykanth-devops/8-kubernetes-security-misconfigurations-that-make-it-to-production-and-how-to-fix-them-439l</link>
      <guid>https://dev.to/vijaykanth-devops/8-kubernetes-security-misconfigurations-that-make-it-to-production-and-how-to-fix-them-439l</guid>
      <description>&lt;p&gt;After reviewing Kubernetes manifests across multiple production environments, &lt;br&gt;
I keep seeing the same issues. These aren't edge cases — they're in most &lt;br&gt;
clusters I've touched.&lt;/p&gt;

&lt;p&gt;Here are the 8 most common ones, why they matter, and the exact fix.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Container Running as Root
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it looks like:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;api&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx:latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No &lt;code&gt;securityContext&lt;/code&gt; defined = runs as root by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; If an attacker gets shell access inside the container, &lt;br&gt;
they have root privileges. Combined with a volume mount, this can mean &lt;br&gt;
full host access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;securityContext&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;runAsNonRoot&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;runAsUser&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1000&lt;/span&gt;
  &lt;span class="na"&gt;allowPrivilegeEscalation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Missing Resource Limits
&lt;/h2&gt;

&lt;p&gt;No &lt;code&gt;resources.limits&lt;/code&gt; means one misbehaving pod can consume all node &lt;br&gt;
resources — taking down everything else on that node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;500m&lt;/span&gt;
    &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;256Mi&lt;/span&gt;
  &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;100m&lt;/span&gt;
    &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;128Mi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Using :latest Image Tag
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;:latest&lt;/code&gt; is mutable. Two pods on different nodes can be running &lt;br&gt;
different versions of your image without you knowing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Pin to digest or specific version:&lt;/p&gt;
&lt;h2&gt;
  
  
  4. No Liveness or Readiness Probes
&lt;/h2&gt;

&lt;p&gt;Without probes, Kubernetes sends traffic to pods that aren't ready &lt;br&gt;
and doesn't restart pods that are deadlocked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;livenessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/health&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
  &lt;span class="na"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
&lt;span class="na"&gt;readinessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/ready&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Secrets in Plain Text Environment Variables
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DB_PASSWORD&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mysecretpassword"&lt;/span&gt;  &lt;span class="c1"&gt;# visible in pod spec, logs, kubectl describe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Use secretKeyRef:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DB_PASSWORD&lt;/span&gt;
    &lt;span class="na"&gt;valueFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;secretKeyRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db-secret&lt;/span&gt;
        &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. No Network Policies
&lt;/h2&gt;

&lt;p&gt;By default, every pod can communicate with every other pod in the cluster. &lt;br&gt;
Zero segmentation.&lt;/p&gt;

&lt;p&gt;A compromised frontend pod can directly query your database pod &lt;br&gt;
unless you have NetworkPolicy defined.&lt;/p&gt;
&lt;h2&gt;
  
  
  7. Writable Root Filesystem
&lt;/h2&gt;

&lt;p&gt;Without &lt;code&gt;readOnlyRootFilesystem: true&lt;/code&gt;, an attacker with shell access &lt;br&gt;
can modify binaries inside the container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;securityContext&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;readOnlyRootFilesystem&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. ClusterRoleBinding to cluster-admin
&lt;/h2&gt;

&lt;p&gt;Giving a service account &lt;code&gt;cluster-admin&lt;/code&gt; is the Kubernetes equivalent &lt;br&gt;
of &lt;code&gt;chmod 777&lt;/code&gt;. Seen this in production more times than I can count.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Use the principle of least privilege — bind only the specific &lt;br&gt;
verbs and resources the service account actually needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Scan for These Automatically
&lt;/h2&gt;

&lt;p&gt;I got tired of manually reviewing manifests for these same issues, &lt;br&gt;
so I built a scanner that checks for all of them automatically.&lt;/p&gt;

&lt;p&gt;Paste your YAML or connect a GitHub repo → findings in under 3 seconds, &lt;br&gt;
mapped to CIS Kubernetes Benchmark 1.8.&lt;/p&gt;

&lt;p&gt;Free to try: &lt;a href="https://deploypilotai.automationvijay.site" rel="noopener noreferrer"&gt;deploypilotai.automationvijay.site&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Which of these do you see most often in your clusters? &lt;br&gt;
Any I missed that should be on the list?&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoci2uayx7tiisctyb1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoci2uayx7tiisctyb1n.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>security</category>
      <category>docker</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
