<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>The Wombelix Post - Kubernetes</title><link href="https://dominik.wombacher.cc/" rel="alternate"/><link href="/feeds/tag_kubernetes.atom.xml" rel="self"/><id>https://dominik.wombacher.cc/</id><updated>2025-07-24T00:00:00+02:00</updated><entry><title>AWS Neuron Kernel Modules on OpenShift with KMM</title><link href="https://dominik.wombacher.cc/posts/aws-neuron-kernel-modules-on-openshift-with-kmm.html" rel="alternate"/><published>2025-07-24T00:00:00+02:00</published><updated>2025-07-24T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2025-07-24:/posts/aws-neuron-kernel-modules-on-openshift-with-kmm.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2025 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;As part of my work at AWS, I've been diving deep into running AI/ML
workloads with the &lt;a class="reference external" href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/index.html"&gt;AWS Neuron SDK&lt;/a&gt;
on &lt;a class="reference external" href="https://aws.amazon.com/ai/machine-learning/inferentia/"&gt;Inferentia&lt;/a&gt;
and &lt;a class="reference external" href="https://aws.amazon.com/ai/machine-learning/trainium/"&gt;Trainium&lt;/a&gt;
instances on &lt;a class="reference external" href="https://aws.amazon.com/rosa/"&gt;Red Hat OpenShift  ... &lt;/a&gt;&lt;a class="read-more" href="/posts/aws-neuron-kernel-modules-on-openshift-with-kmm.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2025 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;As part of my work at AWS, I've been diving deep into running AI/ML
workloads with the &lt;a class="reference external" href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/index.html"&gt;AWS Neuron SDK&lt;/a&gt;
on &lt;a class="reference external" href="https://aws.amazon.com/ai/machine-learning/inferentia/"&gt;Inferentia&lt;/a&gt;
and &lt;a class="reference external" href="https://aws.amazon.com/ai/machine-learning/trainium/"&gt;Trainium&lt;/a&gt;
instances on &lt;a class="reference external" href="https://aws.amazon.com/rosa/"&gt;Red Hat OpenShift Services on AWS (ROSA)&lt;/a&gt;.
What started as exploring concepts quickly turned into building actual
tooling to solve real problems.&lt;/p&gt;
&lt;p&gt;The challenge: how do you get AWS Neuron drivers working reliably
across different OpenShift versions? The solution turned out to be more
interesting than I initially thought.&lt;/p&gt;
&lt;p&gt;I developed and published
&lt;a class="reference external" href="https://github.com/awslabs/kmod-with-kmm-for-ai-chips-on-aws"&gt;kmod-with-kmm-for-ai-chips-on-aws&lt;/a&gt;,
a project that automates building Kernel Module Management (KMM)
compatible container images for AWS Neuron drivers.&lt;/p&gt;
&lt;p&gt;Running specialized hardware like AWS Inferentia and Trainium chips
requires kernel modules. Kernel modules are tied to specific kernel
versions, and new driver releases need to be built against different
kernel versions. This creates ongoing maintenance work that grows with each supported
platform version.&lt;/p&gt;
&lt;p&gt;Red Hat's &lt;a class="reference external" href="https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/specialized_hardware_and_driver_enablement/kernel-module-management-operator"&gt;Kernel Module Management (KMM) operator&lt;/a&gt;
solves this by automating kernel module lifecycle management. But you
still need to build the container images that contain your modules for
each kernel version.&lt;/p&gt;
&lt;p&gt;That's where the &lt;a class="reference external" href="https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/specialized_hardware_and_driver_enablement/driver-toolkit#about-driver-toolkit_driver-toolkit"&gt;Driver Toolkit&lt;/a&gt;
comes in - it provides the exact kernel headers and build environment
for each OpenShift release.&lt;/p&gt;
&lt;p&gt;I fully automated this using GitHub Actions with nightly scans for new
OpenShift releases, automated builds triggered by driver or mapping
changes, and minimal container images containing only busybox and the
compiled kernel module.&lt;/p&gt;
&lt;p&gt;GitHub Actions proved surprisingly powerful for this automation. The
dual tagging strategy works well - images get both kernel-specific and
OpenShift-specific tags for different use cases. The build script also
works locally for development, automatically detecting the environment
and adapting accordingly.&lt;/p&gt;
&lt;p&gt;This removes the manual work of tracking releases and building modules
for each kernel version. The process now happens automatically. The
approach is reusable for other specialized hardware drivers on
OpenShift.&lt;/p&gt;
&lt;p&gt;If you're running specialized hardware on OpenShift, KMM and the
Driver Toolkit are powerful tools once you understand how to use them
effectively.&lt;/p&gt;
</content><category term="Code"/><category term="AWS"/><category term="OpenShift"/><category term="AI/ML"/><category term="Neuron"/><category term="KMM"/><category term="Kubernetes"/><category term="RedHat"/></entry><entry><title>SUSE Certified Administrator (SCA) in Longhorn 1.5 - Cloud native Storage</title><link href="https://dominik.wombacher.cc/posts/suse-certified-administrator-sca-in-longhorn-15-cloud-native-storage.html" rel="alternate"/><published>2024-10-07T00:00:00+02:00</published><updated>2024-10-07T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2024-10-07:/posts/suse-certified-administrator-sca-in-longhorn-15-cloud-native-storage.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2024 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I passed the new &lt;strong&gt;SUSE Certified Administrator (SCA) in Longhorn 1.5&lt;/strong&gt;  Exam today!
Finally back at 100% SUSE Certified after almost a month since it was released ;)
Now I'm  ... &lt;a class="read-more" href="/posts/suse-certified-administrator-sca-in-longhorn-15-cloud-native-storage.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2024 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I passed the new &lt;strong&gt;SUSE Certified Administrator (SCA) in Longhorn 1.5&lt;/strong&gt;  Exam today!
Finally back at 100% SUSE Certified after almost a month since it was released ;)
Now I'm waiting for the SUSE Training Team to create and publish a new Tech Exam :)&lt;/p&gt;
&lt;p&gt;I used the official SUSE Course
&lt;a class="reference external" href="https://www.suse.com/training/course/lhn201/"&gt;Longhorn Deployment and Operations - LHN201v1.5&lt;/a&gt;
to prepare and found it sufficient. A couple of questions were a bit tricky from
a wording perspective and not well reflected in the Course content.
But the majority was of questions was well structured and balanced.&lt;/p&gt;
&lt;p&gt;Never heard of Longhorn before?
It's SUSEs &lt;em&gt;Cloud native distributed block storage for Kubernetes&lt;/em&gt;,
to learn more visit: &lt;a class="reference external" href="https://longhorn.io"&gt;https://longhorn.io&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS: Yeah, I know, &lt;em&gt;Longhorn&lt;/em&gt; was also the codename for an
operating system that spectacularly failed many many years ago ;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: This certification validates fundamental knowledge of Longhorn, including installation, configuration,
management, and troubleshooting of Longhorn clusters. It tests the candidate's ability to utilize Longhorn's features
such as automated backups, disaster recovery, and volume snapshots to ensure high availability and data protection in
Kubernetes environments.&lt;/p&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.suse.com"&gt;https://www.suse.com&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="skills"&gt;
&lt;h2&gt;Skills&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Longhorn Features&lt;/li&gt;
&lt;li&gt;Longhorn Architecture&lt;/li&gt;
&lt;li&gt;Installation Requirements&lt;/li&gt;
&lt;li&gt;Installation with Helm&lt;/li&gt;
&lt;li&gt;Installation as a Rancher Application&lt;/li&gt;
&lt;li&gt;Longhorn Web UI Features&lt;/li&gt;
&lt;li&gt;Enabling and Disabling Nodes&lt;/li&gt;
&lt;li&gt;Adding a new Node in Cluster&lt;/li&gt;
&lt;li&gt;Node Maintenance&lt;/li&gt;
&lt;li&gt;Removing a Node from Cluster&lt;/li&gt;
&lt;li&gt;Adding Individual Disk Partitions&lt;/li&gt;
&lt;li&gt;Removing Disk Storage&lt;/li&gt;
&lt;li&gt;Adding LVM Storage&lt;/li&gt;
&lt;li&gt;Creating a Volume&lt;/li&gt;
&lt;li&gt;Using Trim to Reclaim Storage Space&lt;/li&gt;
&lt;li&gt;Resizing a Volume&lt;/li&gt;
&lt;li&gt;Tuning Storage Performance by Data Locality&lt;/li&gt;
&lt;li&gt;Defining Replica Counts and Location&lt;/li&gt;
&lt;li&gt;Replica Balancing for even Distribution of Resources&lt;/li&gt;
&lt;li&gt;Installation of Prometheus and Grafana for Monitoring Longhorn’s Vital Metrics&lt;/li&gt;
&lt;li&gt;Integration of Longhorn Metrics with the Rancher Monitoring System&lt;/li&gt;
&lt;li&gt;Configuration of Longhorn Alert Rules&lt;/li&gt;
&lt;li&gt;Recovering from Failures&lt;/li&gt;
&lt;li&gt;Manually Creating a Snapshot of a Volume&lt;/li&gt;
&lt;li&gt;Restoring a Volume from a Snapshot Manually&lt;/li&gt;
&lt;li&gt;Deleting a Volume Snapshot&lt;/li&gt;
&lt;li&gt;Working with Recurring Volume Snapshots&lt;/li&gt;
&lt;li&gt;Manually Creating a Backup of a Volume&lt;/li&gt;
&lt;li&gt;Restoring a Volume from a Backup&lt;/li&gt;
&lt;li&gt;Working with Recurring Volume Backups&lt;/li&gt;
&lt;li&gt;Working with Disaster Recovery Volumes&lt;/li&gt;
&lt;li&gt;Upgrading Longhorn Manager&lt;/li&gt;
&lt;li&gt;Upgrading Longhorn Engine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.suse.com"&gt;https://www.suse.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="certificate"&gt;
&lt;h2&gt;Certificate&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Downloads&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/SCA_LHN_133.pdf"&gt;Certificate (ID 133)&lt;/a&gt; (PDF, 41K)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Links&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="https://suse.useclarus.com/view/verify/"&gt;Verify Certificate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://badges.suse.com/f4a30a53-f24a-43d6-bba9-6fb4669d421b"&gt;SUSE Badges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="Certification"/><category term="SUSE"/><category term="Certification"/><category term="Administrator"/><category term="Longhorn"/><category term="Storage"/><category term="Rancher"/><category term="Kubernetes"/><category term="Exam"/></entry><entry><title>How-to ace the CKAD, CKA and CKS exam in just one month</title><link href="https://dominik.wombacher.cc/posts/how-to-ace-the-ckad-cka-and-cks-exam-in-just-one-month.html" rel="alternate"/><published>2023-09-30T00:00:00+02:00</published><updated>2023-09-30T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-09-30:/posts/how-to-ace-the-ckad-cka-and-cks-exam-in-just-one-month.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;Between 31st July and 21st August 2023, I passed the
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/cka-certified-kubernetes-administrator.html"&gt;CKA&lt;/a&gt;,
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/ckad-certified-kubernetes-application-developer.html"&gt;CKAD&lt;/a&gt; and
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/cks-certified-kubernetes-security-specialist.html"&gt;CKS&lt;/a&gt; Exam.
It was quite a ride and required some discipline. Everything boils down to a lot  ... &lt;a class="read-more" href="/posts/how-to-ace-the-ckad-cka-and-cks-exam-in-just-one-month.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;Between 31st July and 21st August 2023, I passed the
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/cka-certified-kubernetes-administrator.html"&gt;CKA&lt;/a&gt;,
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/ckad-certified-kubernetes-application-developer.html"&gt;CKAD&lt;/a&gt; and
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/cks-certified-kubernetes-security-specialist.html"&gt;CKS&lt;/a&gt; Exam.
It was quite a ride and required some discipline. Everything boils down to a lot of hands-on practice.&lt;/p&gt;
&lt;p&gt;I know that something like this isn't common, most people need much more time
to prepare, which is totally fine. I do a lot of different trainings and certification exams
on a regular basis. I'm also a quick learner, have a lot of knowledge across a vast variaty
of topics. During the years, I developed mechanisms to effectively prepare and take exams.
But I'm not a role model, take all the time you need, don't rush it!&lt;/p&gt;
&lt;div class="section" id="key-learning-resources"&gt;
&lt;h2&gt;Key learning resources&lt;/h2&gt;
&lt;p&gt;The CKA, CKAD and CKS courses from Mumshad Mannambeth are pretty good.
Quality is exactly in that order, CKA is superb, CKAD is ok and CKS the lowest.
They are available as subscription on &lt;a class="reference external" href="https://kodekloud.com"&gt;KodeKloud&lt;/a&gt;
and from time to time on-sale for ~$15 on &lt;a class="reference external" href="https://www.udemy.com/user/mumshad-mannambeth/"&gt;Udemy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://killercoda.com"&gt;killercoda.com&lt;/a&gt; gives you free access to lab environments to practice various scenarios.
Make use of it! When the Exam date comes closer, you should get bored by this excercises and just know what to-do while reading the instructions.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://killer.sh"&gt;killer.sh&lt;/a&gt; with every Exam you purchase, you will get two session vouchers for free.
This should be your last preparation step before the actual Exam.
As soon you feel ready, use the killer.sh exam simulator to validate your knowledge.
Think of it like the real thing, block time, focus on the tasks, keep an eye on the timer.
Afterwards take a close look on the questions that you had wrong.
The environment is available for 24h, try to solve failed questions again.
If necessary practice again with KodeKloud and/or killercoda.
Take the second killer.sh session a day or two before your Exam as final preparation.
When you ace killer.sh, you ace the actual Exam too :)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="common-knowledge"&gt;
&lt;h2&gt;&amp;quot;common&amp;quot; knowledge&lt;/h2&gt;
&lt;p&gt;You can call it common knowledge, basic knowledge or whatever name you think fits for all those
skills you should already have or brush up real quickly, because you will need them for the
kubernetes trifecta.&lt;/p&gt;
&lt;div class="section" id="linux"&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;p&gt;You should feel at home in a shell like bash, navigating around through different folder,
becoming root, starting/stopping services, copying or editing files, all this should be
your daily business.&lt;/p&gt;
&lt;p&gt;If I ask you to start and enable service &lt;code&gt;xyz&lt;/code&gt;, you should right away have
something like &lt;code&gt;systemctl enable --now xyz&lt;/code&gt; in mind.&lt;/p&gt;
&lt;p&gt;Copy file &lt;code&gt;abc.yaml&lt;/code&gt; to &lt;code&gt;/etc/&lt;/code&gt; on server &lt;code&gt;node01&lt;/code&gt;, for sure you know
that you can achieve this by running something like &lt;code&gt;scp ./abc.yaml node01:/etc/&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="yaml"&gt;
&lt;h3&gt;YAML&lt;/h3&gt;
&lt;p&gt;Widely used markup language, Kubernetes Manifests are written in YAML but also
Ansible Playbooks and much more. You should familiar with the overall syntax.
How to spot syntax errors and perform the correct indentation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="vim"&gt;
&lt;h3&gt;vim&lt;/h3&gt;
&lt;p&gt;Vim is everywhere and in most shells set as default editor.
I highly recommend you brush up your skills.
Navigating and basic editing should be something you are familiar with.
YAML friendly settings in your &lt;code&gt;.vimrc&lt;/code&gt; are life safers.
The good news: In your Exam environment, that's pre-configured already :)&lt;/p&gt;
&lt;p&gt;Some relevant settings from my vim rc file:&lt;/p&gt;
&lt;pre class="code text literal-block"&gt;
set fileencoding=UTF-8
set syntax=on
set ts=2
set sw=2
set sts=2
set et nu

&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="kubectl"&gt;
&lt;h2&gt;kubectl&lt;/h2&gt;
&lt;p&gt;During the Exams, you use &lt;code&gt;kubectl&lt;/code&gt;, or the alias &lt;code&gt;k&lt;/code&gt;, all the time.
It is key that you life and breathe it, for example:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Which sub-commands are available?&lt;/li&gt;
&lt;li&gt;How to find and show resources?&lt;/li&gt;
&lt;li&gt;How can you do a dry-run and redirect the output as YAML into a file?&lt;/li&gt;
&lt;li&gt;When should you use it to create/edit a resource and when write a Manifest?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Focus during your study on these things and practice, practice, practice!&lt;/p&gt;
&lt;p&gt;Get used to type quickly and use tab-completion.
Copy &amp;amp; Paste is fine but I recommend to do it only for names or values.
This way you avoid typos but don't slow yourself down.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="before-the-exam"&gt;
&lt;h2&gt;Before the Exam&lt;/h2&gt;
&lt;p&gt;Read all instructions about the PSI testing environment carefully!
They have comprehensive FAQ that will cover everything.
It is important that you do exactly what they expect.
Otherwise your risk that your Exam will be terminated by the proctor.&lt;/p&gt;
&lt;p&gt;Perform a complete system test and fix any issues.
Trust me, you don't want that stress on the Exam day.&lt;/p&gt;
&lt;p&gt;Remove everything from your Desk. If you have an external monitor and camera, I suggest you use them!
The display resolution should be as large as possible, I used a 4k display.
Don't try it with the standard Laptop Display, it will not provide enough space, you have to scroll around all the time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="exam-day"&gt;
&lt;h2&gt;Exam day&lt;/h2&gt;
&lt;p&gt;You did all the practice and preparation, go relaxed into the Exam.
Get a good night sleep, stay hydrated but keep in mind that you can't pause the Exam.
So don't drink too much and use the Restroom before you start.
You going to focus for quite some time, your brain needs energy.
I always eat a Banana right before sitting the Exam.&lt;/p&gt;
&lt;p&gt;Reading and understanding is key. Ensure you fully understand what you have to do.
For example, you might have a question about creating a backup of etcd.
Then there will be additional details like the node where you have to do it.
The path of the etcd database that you have to backup. The path where you have to store it.
All those details matter, don't waste points by overseeing parts of the instructions.&lt;/p&gt;
&lt;p&gt;Prioritize questions with a high point count and start with them.
Read the instructions very carefully, if you feel comfortable, do it right away, if not flag it.
Pick the next question and repeat. Don't waste time on questions you can't solve.
Don't waste time with 5 questions that give you 1 point when you can solve 2 questions with 10 points each in the same time.
If there is time left at the end, go for the low score questions.
But solving the majority of high score question will make you pass.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I found it extremely valuable to take all three Exams.
I learned so much during the preparation.
It helped me a lot in my Job as well.
I would do it again and if you decide to tackle them, I wish you all the best!&lt;/p&gt;
&lt;/div&gt;
</content><category term="Certification"/><category term="CKA"/><category term="CKAD"/><category term="CKS"/><category term="Kubernetes"/><category term="Certification"/><category term="Exam"/></entry><entry><title>CKS: Certified Kubernetes Security Specialist</title><link href="https://dominik.wombacher.cc/posts/cks-certified-kubernetes-security-specialist.html" rel="alternate"/><published>2023-08-21T00:00:00+02:00</published><updated>2023-08-21T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-08-21:/posts/cks-certified-kubernetes-security-specialist.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I did it, after already passing &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/cka-certified-kubernetes-administrator.html"&gt;CKA&lt;/a&gt;
and &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/ckad-certified-kubernetes-application-developer.html"&gt;CKAD&lt;/a&gt;, I completed the trifecta
today by passing the &lt;strong&gt;CKS: Certified Kubernetes Security Specialist&lt;/strong&gt; as well. Taking and passing all three within  ... &lt;a class="read-more" href="/posts/cks-certified-kubernetes-security-specialist.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I did it, after already passing &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/cka-certified-kubernetes-administrator.html"&gt;CKA&lt;/a&gt;
and &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/ckad-certified-kubernetes-application-developer.html"&gt;CKAD&lt;/a&gt;, I completed the trifecta
today by passing the &lt;strong&gt;CKS: Certified Kubernetes Security Specialist&lt;/strong&gt; as well. Taking and passing all three within one Month was
challenging, at some point a little stressful, but very rewarding and satisfying!&lt;/p&gt;
&lt;p&gt;As mentioned in the &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/cka-certified-kubernetes-administrator.html"&gt;CKA&lt;/a&gt;
and &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/ckad-certified-kubernetes-application-developer.html"&gt;CKAD&lt;/a&gt;, post already,
no real problems with PSI, everything went quite smooth again, nothing to complain about.&lt;/p&gt;
&lt;p&gt;The Exam was, as expected, on a whole other level compared to CKA and CKAD. The requirement to take the CKS is to hold an active
CKA, which you going to need. All the additional knowledge you have to gain about various security tools and best-practices is massive.
But also extremely valuable, preparing for the Exam and diving deep into Kubernetes security made me realize how many attack vectors are
out there I wasn't even thinking of so far. For me it was an eye opener and I'm glad I decided to tackle all three exams, I learned
more in a month as I did on my own within the last year.&lt;/p&gt;
&lt;p&gt;I took some Red Hat Exams in 2021 and loved the fact that they are also performance-based, I'm three specialist certifications short
to become a Red Hat Certified Architect, so I guess some Red Hat OpenShift Certifications are next on my list :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: Earners of this designation are accomplished Kubernetes practitioners (as evidenced by holding the CKA credential).
Earners demonstrated the requisite abilities to secure container-based applications and Kubernetes platforms during build,
deployment and runtime, and are qualified to perform these tasks in a professional setting.&lt;/p&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.credly.com"&gt;https://www.credly.com&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="skills"&gt;
&lt;h2&gt;Skills&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;API objects&lt;/li&gt;
&lt;li&gt;AWS Cloud Security Services&lt;/li&gt;
&lt;li&gt;Cloud&lt;/li&gt;
&lt;li&gt;Custom Resource Definitions&lt;/li&gt;
&lt;li&gt;Helm&lt;/li&gt;
&lt;li&gt;Ingress&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Logging and Troubleshooting&lt;/li&gt;
&lt;li&gt;Open Source Software&lt;/li&gt;
&lt;li&gt;Orchestration&lt;/li&gt;
&lt;li&gt;Scheduling&lt;/li&gt;
&lt;li&gt;Security Policies&lt;/li&gt;
&lt;li&gt;Services&lt;/li&gt;
&lt;li&gt;Site Reliability Engineer&lt;/li&gt;
&lt;li&gt;System Administrator&lt;/li&gt;
&lt;li&gt;Volumes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.credly.com"&gt;https://www.credly.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="certificate"&gt;
&lt;h2&gt;Certificate&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Downloads&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/cks-dominik-wombacher-e3091973-84c6-4f70-a7ff-a503bbc19409-certificate.pdf"&gt;Certificate - The Linux Foundation (ID LF-fvagino0m0)&lt;/a&gt; (PDF, 499K)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/CKSCertifiedKubernetesSecuritySpecialist_Badge20230822-28-n1gxng.pdf"&gt;Certificate - Credly&lt;/a&gt; (PDF, 117K)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/cks-certified-kubernetes-security-specialist.png"&gt;Badge&lt;/a&gt; (PNG, 110K)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Links&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.credly.com/go/kBSzOuIZ"&gt;Credly Badge&lt;/a&gt;
(Archive: &lt;a class="reference external" href="https://web.archive.org/web/20230825092525/https://www.credly.com/badges/d8e6df85-df83-49cd-903b-702ebbeaa04c/print"&gt;[1]&lt;/a&gt;,
&lt;a class="reference external" href="https://archive.today/2023.08.25-092331/https://www.credly.com/badges/d8e6df85-df83-49cd-903b-702ebbeaa04c/print"&gt;[2]&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://training.linuxfoundation.org/certification/verify/"&gt;Certificate verification (The Linux Foundation)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="Certification"/><category term="Certification"/><category term="Kubernetes"/><category term="Security"/><category term="Specialist"/><category term="Exam"/></entry><entry><title>CKAD: Certified Kubernetes Application Developer</title><link href="https://dominik.wombacher.cc/posts/ckad-certified-kubernetes-application-developer.html" rel="alternate"/><published>2023-08-07T00:00:00+02:00</published><updated>2023-08-07T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-08-07:/posts/ckad-certified-kubernetes-application-developer.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;And the next one, after passing the &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/cka-certified-kubernetes-administrator.html"&gt;CKA&lt;/a&gt;
a week ago, I cleared &lt;strong&gt;CKAD: Certified Kubernetes Application Developer&lt;/strong&gt; today, which makes two out of three, next stop CKS!&lt;/p&gt;
&lt;p&gt;I wrote  ... &lt;a class="read-more" href="/posts/ckad-certified-kubernetes-application-developer.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;And the next one, after passing the &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/cka-certified-kubernetes-administrator.html"&gt;CKA&lt;/a&gt;
a week ago, I cleared &lt;strong&gt;CKAD: Certified Kubernetes Application Developer&lt;/strong&gt; today, which makes two out of three, next stop CKS!&lt;/p&gt;
&lt;p&gt;I wrote a bit about the experience with PSI already last week in the CKA Post, it was very similar this week, swift check-in process,
quite relaxed proctor, no real technical issues with the exam environment, my setup was exactly the same.&lt;/p&gt;
&lt;p&gt;From an Exam perspective it was really cool to dive deep into different deployment scenarios, how to configure and troubleshoot them,
gave me even more confidence with Kubernetes and using &lt;code&gt;kubectl&lt;/code&gt;. In hindsight, it would've probably better to take the CKAD &lt;em&gt;before&lt;/em&gt;
the CKA Exam. Now that I know what's covered and how the Exams are, that feels like a more logical order, CKAD is overall a little easier as CKA.&lt;/p&gt;
&lt;p&gt;It was again performance-based, as all Kubernetes Exam from The Linux Foundation, and I can't get enough of it. This type of exam is just so
much more fun, engaging and challenging as question-based ones. From that perspective I'm a little sad that I only have one other Exam ahead.&lt;/p&gt;
&lt;p&gt;I'm now going to prepare for the Certified Kubernetes Security Specialist (CKS), after all I heard, that's a complete different beast compared to
CKA and CKAD. Let's see if I can make it in two weeks and how different it really will be.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: Earners of this designation demonstrated the skills, knowledge and competencies to perform the responsibilities of a
Kubernetes Application Developer. Earners are able to define application resources and use core primitives to build, monitor,
and troubleshoot scalable applications and tools in Kubernetes. The skills and knowledge demonstrated by earners include Core
Concepts, Configuration, Multi-Container Pods, Observability, Pod Design, Services &amp;amp; Networking, State Persistence.&lt;/p&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.credly.com"&gt;https://www.credly.com&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="skills"&gt;
&lt;h2&gt;Skills&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;cloud native applications&lt;/li&gt;
&lt;li&gt;ConfigMaps&lt;/li&gt;
&lt;li&gt;Containers&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Open Source Software&lt;/li&gt;
&lt;li&gt;Orchestration&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;rkt&lt;/li&gt;
&lt;li&gt;Secrets&lt;/li&gt;
&lt;li&gt;Software Developer&lt;/li&gt;
&lt;li&gt;Volumes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.credly.com"&gt;https://www.credly.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="certificate"&gt;
&lt;h2&gt;Certificate&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Downloads&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/ckad-dominik-wombacher-bf80bca4-0520-4077-bb9d-bde26be0e9c7-certificate.pdf"&gt;Certificate - The Linux Foundation (ID LF-pl8i8vvtrb)&lt;/a&gt; (PDF, 714K)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/CKADCertifiedKubernetesApplicationDeveloper_Badge20230808-28-k3vbuv.pdf"&gt;Certificate - Credly&lt;/a&gt; (PDF, 142K)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/ckad-certified-kubernetes-application-developer.png"&gt;Badge&lt;/a&gt; (PNG, 122K)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Links&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.credly.com/go/IivxX2A9"&gt;Credly Badge&lt;/a&gt;
(Archive: &lt;a class="reference external" href="https://web.archive.org/web/20230825081619/https://www.credly.com/badges/ec77b362-f901-4645-81b0-e6e725780fe4/print"&gt;[1]&lt;/a&gt;,
&lt;a class="reference external" href="https://archive.today/2023.08.25-081558/https://www.credly.com/badges/ec77b362-f901-4645-81b0-e6e725780fe4/print"&gt;[2]&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://training.linuxfoundation.org/certification/verify/"&gt;Certificate verification (The Linux Foundation)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="Certification"/><category term="Certification"/><category term="Kubernetes"/><category term="Application"/><category term="Developer"/><category term="Exam"/></entry><entry><title>CKA: Certified Kubernetes Administrator</title><link href="https://dominik.wombacher.cc/posts/cka-certified-kubernetes-administrator.html" rel="alternate"/><published>2023-07-31T00:00:00+02:00</published><updated>2023-07-31T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-07-31:/posts/cka-certified-kubernetes-administrator.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;My goal is to get all three Kubernetes Certifications from The Linux Foundation (CKA, CKAD, CKS),
today I started this journey by passing the first Exam (CKA) and becoming a  ... &lt;a class="read-more" href="/posts/cka-certified-kubernetes-administrator.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;My goal is to get all three Kubernetes Certifications from The Linux Foundation (CKA, CKAD, CKS),
today I started this journey by passing the first Exam (CKA) and becoming a &lt;strong&gt;CKA: Certified Kubernetes Administrator&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It's the first performance-based exam since almost two years and I have to admit, I missed it!
For whatever reason, it became standard in the industry to go with question-based exams instead.
I understand that those are easier to deliver and might even attract more people, but in my opinion,
demonstrating real Hands-On experience during an Exam is way more valuable and requires a lot of practice.&lt;/p&gt;
&lt;p&gt;Don't get me wrong, every Exam has it's values, there is not a single one I took were I not learned something new during preparation.
But at least for me, I gained the deepest level of understanding and the most real world experience from practical exams.&lt;/p&gt;
&lt;p&gt;I did a lot with Kubernetes before and of course knew already much about it, but preparing for the CKA Exam gave me a massive boost
in my &lt;code&gt;kubectl&lt;/code&gt; skills and pushed my knowledge about all the different components and how to interact with objects to a new level.
Personally, I never felt that comfortable with Kubernetes before and can recommend the CKA to everyone who works with Kubernetes.&lt;/p&gt;
&lt;p&gt;A lot of people complain about the Exam provider PSI and the exam environment, especially the PSI secure browser, it's poor performance
and a bad experience with the proctors. For me things went actually very well, I used the MacBook Pro M1 with an external 27&amp;quot; Monitor,
external Webcam (Logitech C925e), wired Keyboard and Mouse. As per policy, the MacBook was closed during the Exam, before I launched
the PSI secure browser I connected all external devices and closed the lid. Monitor and Webcam were recognized as expected, scan of my
ID was no problem with the Logitech Webcam. I have another Monitor on my desk, which I unplugged and turned around. I removed anything else
(e.g. smartphone charger, pens, paper). The proctor was fine with the external monitor that way, I showed my whole desk, in more detail the
region below keyboard, mouse and macbook. I have some stickers on my macbook and had to zoom in to show that there are no notes or something.
Then the rest of my room, the walls, ceiling, below my desk and so on. All this went fine, no complains from the proctor, I just followed
the instructions and was ready to take the exam after around 15 minutes, which is a good time and comparable to PearsonVUE and Questionmark.
Also the actual exam environment, remote desktop delivered through the PSI secure browser, was working without much issues. I had a few times
a brief &amp;quot;lag&amp;quot; and the sticky key problem - you press a key once and it gets repeated multiple times, hitting &lt;em&gt;k&lt;/em&gt; becomes &lt;em&gt;kkkkkkkkkk&lt;/em&gt; for example -
but most of the time I could use the environment just the same way as I would run the commands on my local machine.&lt;/p&gt;
&lt;p&gt;So my recommendations in regards to PSI: Ensure the computer you use has a supported operating system and enough cpu/ram resources.
Keep your desk clean as good as possible but don't worry too much about if there are still some cables or a second monitor, just ensure
that the proctor can clearly see that it's impossible for you to use. Follow the instructions of the Proctor, arguing will not help even
if they might ask &amp;quot;stupid questions&amp;quot;, just answer, explain what something is or what it's used for and show it in the camera, everything
will be fine. Check your internet connectivity, in my case it's a 400mbit up/down fibre connection which did great, just ensure you have
some bandwidth and that not the rest of the household is streaming Netflix in 4k in parallel ;). Last but not least, focus on your monitor and
don't look around too much, that's something the PSI system will otherwise recognized and trigger the proctor, worst case they close your Exam.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: Earners of this designation demonstrated the skills, knowledge and competencies to perform the responsibilities
of a Kubernetes Administrator. Earners demonstrated proficiency in Application Lifecycle Management, Installation,
Configuration &amp;amp; Validation, Core Concepts, Networking, Scheduling, Security, Cluster Maintenance,
Logging / Monitoring, Storage, and Troubleshooting&lt;/p&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.credly.com"&gt;https://www.credly.com&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="skills"&gt;
&lt;h2&gt;Skills&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;API objects&lt;/li&gt;
&lt;li&gt;Cloud&lt;/li&gt;
&lt;li&gt;Custom Resource Definitions&lt;/li&gt;
&lt;li&gt;Helm&lt;/li&gt;
&lt;li&gt;Ingress&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Logging and Troubleshooting&lt;/li&gt;
&lt;li&gt;Open Source Software&lt;/li&gt;
&lt;li&gt;Orchestration&lt;/li&gt;
&lt;li&gt;Scheduling&lt;/li&gt;
&lt;li&gt;Security Policies&lt;/li&gt;
&lt;li&gt;Services&lt;/li&gt;
&lt;li&gt;Site Reliability Engineer&lt;/li&gt;
&lt;li&gt;System Administrator&lt;/li&gt;
&lt;li&gt;Volumes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.credly.com"&gt;https://www.credly.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="certificate"&gt;
&lt;h2&gt;Certificate&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Downloads&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/cka-dominik-wombacher-6d105df8-863b-450a-873d-fb91e6be878a-certificate.pdf"&gt;Certificate - The Linux Foundation (ID LF-0v1fpn4ify)&lt;/a&gt; (PDF, 704K)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/CKACertifiedKubernetesAdministrator_Badge20230801-28-zip1em.pdf"&gt;Certificate - Credly&lt;/a&gt; (PDF, 128K)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/cka-certified-kubernetes-administrator.png"&gt;Badge&lt;/a&gt; (PNG, 110K)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Links&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="https://www.credly.com/go/Z4pvZqFB"&gt;Credly Badge&lt;/a&gt;
(Archive: &lt;a class="reference external" href="https://web.archive.org/web/20230825072010/https://www.credly.com/badges/cc1a57a0-afb6-47bf-9e21-a8b7bf13c11f/print"&gt;[1]&lt;/a&gt;,
&lt;a class="reference external" href="https://archive.today/2023.08.25-072021/https://www.credly.com/badges/cc1a57a0-afb6-47bf-9e21-a8b7bf13c11f/print"&gt;[2]&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://training.linuxfoundation.org/certification/verify/"&gt;Certificate verification (The Linux Foundation)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="Certification"/><category term="Certification"/><category term="Kubernetes"/><category term="Administration"/><category term="Exam"/></entry><entry><title>Rancher on AWS, Logging to CloudWatch with IRSA for Authentication</title><link href="https://dominik.wombacher.cc/posts/rancher-on-aws-logging-to-cloudwatch-with-irsa-for-authentication.html" rel="alternate"/><published>2023-07-05T00:00:00+02:00</published><updated>2023-07-12T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-07-05:/posts/rancher-on-aws-logging-to-cloudwatch-with-irsa-for-authentication.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;This is the third Article of the Series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;,
I'm focusing on Logging to CloudWatch from Rancher by using IAM Roles for Service Accounts (IRSA)
to  ... &lt;a class="read-more" href="/posts/rancher-on-aws-logging-to-cloudwatch-with-irsa-for-authentication.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;This is the third Article of the Series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;,
I'm focusing on Logging to CloudWatch from Rancher by using IAM Roles for Service Accounts (IRSA)
to authenticate to avoid long-term credentials.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: The recording of my talk
&lt;a class="reference external" href="https://events.opensuse.org/conferences/oSC23/program/proposals/4169"&gt;Rancher integration with AWS services: possibilities, challenges, outlook&lt;/a&gt;
(abstract and slide-deck) at &lt;a class="reference external" href="https://events.opensuse.org/conferences/oSC23"&gt;openSUSE Conference 23&lt;/a&gt; is online and covers parts of this article as well.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://media.ccc.de/v/4169-rancher-integration-with-aws-services-possibilities-challenges-outlook"&gt;media.ccc.de&lt;/a&gt;
(includes options to download video and audio)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://youtu.be/khIg5MT4WGs"&gt;youtube.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="contents local topic" id="contents"&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#terminology" id="toc-entry-1"&gt;Terminology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#rancher-logging" id="toc-entry-2"&gt;Rancher Logging&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#overview" id="toc-entry-3"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#iam-policy" id="toc-entry-4"&gt;IAM Policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#irsa-configuration" id="toc-entry-5"&gt;IRSA Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#clusteroutput" id="toc-entry-6"&gt;ClusterOutput&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#conclusion" id="toc-entry-7"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="terminology"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-1"&gt;Terminology&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I assume you have a basic level of understanding about &lt;em&gt;Kubernetes objects&lt;/em&gt; and &lt;em&gt;annotations&lt;/em&gt; as well as
&lt;em&gt;Helm charts&lt;/em&gt;, &lt;em&gt;repositories&lt;/em&gt;, &lt;em&gt;releases&lt;/em&gt;. If you want to brush up your knowledge,
links to resources about those topics are part of the second article of this series:
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html"&gt;Rancher on AWS, Backup to S3 with IRSA for Authentication&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To learn more about AWS IAM Roles and IRSA, I recommend to checkout the first Article of this series:
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="rancher-logging"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-2"&gt;Rancher Logging&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="overview"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-3"&gt;Overview&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Rancher provides the &lt;a class="reference external" href="https://github.com/rancher/charts"&gt;rancher-logging&lt;/a&gt; Helm chart,
which is based on the &lt;a class="reference external" href="https://github.com/kube-logging/logging-operator"&gt;kube-logging operator&lt;/a&gt;,
it's using &lt;a class="reference external" href="https://fluentbit.io"&gt;Fluent Bit&lt;/a&gt;
to collect and &lt;a class="reference external" href="https://www.fluentd.org"&gt;Fluentd&lt;/a&gt;
to forward the logs. One of the supported targets is
&lt;a class="reference external" href="https://aws.amazon.com/cloudwatch/"&gt;Amazon CloudWatch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With &lt;a class="reference external" href="https://ranchermanager.docs.rancher.com/integrations-in-rancher/logging/logging-helm-chart-options#additional-logging-sources"&gt;enhanced cloud provider logging&lt;/a&gt;,
logs from Amazon EKS will be collected and pushed to CloudWatch as well.&lt;/p&gt;
&lt;p&gt;IRSA is technically supported but the necessary &lt;em&gt;serviceAccount annotation&lt;/em&gt;
need to be added after the installation in a separate step.&lt;/p&gt;
&lt;p&gt;The official documentation about
&lt;a class="reference external" href="https://ranchermanager.docs.rancher.com/pages-for-subheaders/logging"&gt;Rancher Integration with Logging Services&lt;/a&gt;
provides further information about the functionality and general installation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="iam-policy"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-4"&gt;IAM Policy&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You need a IAM Policy to create later the IAM Role linked to a Kubernetes service account.
An example how such a policy could look like to push logs to CloudWatch, based on the
&lt;a class="reference external" href="https://github.com/fluent-plugins-nursery/fluent-plugin-cloudwatch-logs#preparation"&gt;out_cloudwatch_logs&lt;/a&gt; example:&lt;/p&gt;
&lt;pre class="code json literal-block"&gt;
&lt;span class="pygments-p"&gt;{&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;&amp;quot;Version&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;2012-10-17&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;,&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;&amp;quot;Statement&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p"&gt;[&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-p"&gt;{&lt;/span&gt;&lt;span class="pygments-w"&gt;
            &lt;/span&gt;&lt;span class="pygments-nt"&gt;&amp;quot;Action&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p"&gt;[&lt;/span&gt;&lt;span class="pygments-w"&gt;
                &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;logs:PutLogEvents&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;,&lt;/span&gt;&lt;span class="pygments-w"&gt;
                &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;logs:CreateLogGroup&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;,&lt;/span&gt;&lt;span class="pygments-w"&gt;
                &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;logs:PutRetentionPolicy&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;,&lt;/span&gt;&lt;span class="pygments-w"&gt;
                &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;logs:CreateLogStream&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;,&lt;/span&gt;&lt;span class="pygments-w"&gt;
                &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;logs:DescribeLogGroups&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;,&lt;/span&gt;&lt;span class="pygments-w"&gt;
                &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;logs:DescribeLogStreams&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;
            &lt;/span&gt;&lt;span class="pygments-p"&gt;],&lt;/span&gt;&lt;span class="pygments-w"&gt;
            &lt;/span&gt;&lt;span class="pygments-nt"&gt;&amp;quot;Effect&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;Allow&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;,&lt;/span&gt;&lt;span class="pygments-w"&gt;
            &lt;/span&gt;&lt;span class="pygments-nt"&gt;&amp;quot;Resource&amp;quot;&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s2"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-p"&gt;}&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-p"&gt;]&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-p"&gt;}&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="irsa-configuration"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-5"&gt;IRSA Configuration&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;em&gt;kube-logging&lt;/em&gt; operator already supports IRSA but it can't be configured as part of the Helm installation
with the &lt;em&gt;rancher-logging&lt;/em&gt; Helm chart yet. The annotation need to be added afterwards to the Logging Resources,
this is different compared to
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html"&gt;Rancher Backup&lt;/a&gt;,
where this is possible directly as part of the installation.&lt;/p&gt;
&lt;p&gt;I created a &lt;a class="reference external" href="https://github.com/rancher/charts/pull/2646"&gt;GitHub Pull Request&lt;/a&gt; to include the
&lt;em&gt;serviceAccount&lt;/em&gt; annotation in the Helm chart.&lt;/p&gt;
&lt;p&gt;In the meantime, you have to edit the Logging Resources &lt;code&gt;rancher-logging-root&lt;/code&gt; and
(if Rancher is running on Amazon EKS with enabled enhanced cloud logging)
&lt;code&gt;rancher-logging-eks&lt;/code&gt; in namespace &lt;code&gt;cattle-logging-system&lt;/code&gt; manually.&lt;/p&gt;
&lt;p&gt;The configuration is not covered in the official Rancher Documentation yet.
Six lines need to be added per Logging Resource, each with it's own &lt;code&gt;role-arn&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="pygments-nt"&gt;spec&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;fluentd&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;serviceAccount&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;metadata&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nt"&gt;annotations&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
          &lt;/span&gt;&lt;span class="pygments-nt"&gt;eks.amazonaws.com/role-arn&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;arn:aws:iam::1234567890:role/my-rancher-logging-role&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Besides the &lt;em&gt;serviceAccount annotation&lt;/em&gt;, the initial IRSA setup for the cluster and the creation
of the IAM Role, with a link to the service account, used by the &lt;em&gt;kube-logging&lt;/em&gt; operator, is required.&lt;/p&gt;
&lt;p&gt;The names of the service accounts &lt;em&gt;rancher-logging&lt;/em&gt; will create are &lt;code&gt;rancher-logging-root-fluentd&lt;/code&gt;
and (in case of EKS and enhanced logging) &lt;code&gt;rancher-logging-root-fluentd&lt;/code&gt;, also in
namespace &lt;code&gt;cattle-logging-system&lt;/code&gt;. You have to create a IAM Role and link it to those
accounts by using &lt;code&gt;eksctl&lt;/code&gt; as shown in the first article
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="clusteroutput"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-6"&gt;ClusterOutput&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To push logs to the actual target, Fluentd is using so called &lt;em&gt;Outputs&lt;/em&gt;. There are two types,
&lt;strong&gt;Output&lt;/strong&gt; (namespace) and &lt;strong&gt;ClusterOutput&lt;/strong&gt; (cluster-wide), &lt;a class="reference external" href="https://kube-logging.dev/docs/configuration/output/"&gt;further reading&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Following an example how a basic &lt;em&gt;ClusterOutput&lt;/em&gt; could look like, I named it &lt;code&gt;testcloudwatchoutput&lt;/code&gt;
and it will push all available logs to the group &lt;code&gt;rancher-demo-cluster-log-group&lt;/code&gt; and stream
&lt;code&gt;rancher-demo-cluster-log-stream&lt;/code&gt; in Amazon CloudWatch of AWS Region &lt;code&gt;us-east-1&lt;/code&gt;.&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="pygments-nt"&gt;apiVersion&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;logging.banzaicloud.io/v1beta1&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-nt"&gt;kind&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;ClusterOutput&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-nt"&gt;metadata&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;creationTimestamp&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;'2023-05-17T14:03:16Z'&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;generation&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;4&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;managedFields&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;apiVersion&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;logging.banzaicloud.io/v1beta1&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;fieldsType&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;FieldsV1&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;fieldsV1&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nt"&gt;f:status&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
          &lt;/span&gt;&lt;span class="pygments-nt"&gt;.&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;{}&lt;/span&gt;&lt;span class="pygments-w"&gt;
          &lt;/span&gt;&lt;span class="pygments-nt"&gt;f:active&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;{}&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;manager&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;manager&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;operation&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;Update&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;subresource&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;status&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;time&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;'2023-05-17T14:03:16Z'&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;apiVersion&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;logging.banzaicloud.io/v1beta1&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;fieldsType&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;FieldsV1&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;fieldsV1&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nt"&gt;f:spec&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
          &lt;/span&gt;&lt;span class="pygments-nt"&gt;.&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;{}&lt;/span&gt;&lt;span class="pygments-w"&gt;
          &lt;/span&gt;&lt;span class="pygments-nt"&gt;f:cloudwatch&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
            &lt;/span&gt;&lt;span class="pygments-nt"&gt;.&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;{}&lt;/span&gt;&lt;span class="pygments-w"&gt;
            &lt;/span&gt;&lt;span class="pygments-nt"&gt;f:auto_create_stream&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;{}&lt;/span&gt;&lt;span class="pygments-w"&gt;
            &lt;/span&gt;&lt;span class="pygments-nt"&gt;f:log_group_name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;{}&lt;/span&gt;&lt;span class="pygments-w"&gt;
            &lt;/span&gt;&lt;span class="pygments-nt"&gt;f:log_stream_name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;{}&lt;/span&gt;&lt;span class="pygments-w"&gt;
            &lt;/span&gt;&lt;span class="pygments-nt"&gt;f:region&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;{}&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;manager&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;rancher&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;operation&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;Update&lt;/span&gt;&lt;span class="pygments-w"&gt;
      &lt;/span&gt;&lt;span class="pygments-nt"&gt;time&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;'2023-05-18T10:14:12Z'&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;testcloudwatchout&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;namespace&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;cattle-logging-system&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;resourceVersion&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;'16031275'&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;uid&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;a4bd1852-eca8-487b-bdc8-47d9966e6da2&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-nt"&gt;spec&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;cloudwatch&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;auto_create_stream&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;true&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;log_group_name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;rancher-demo-cluster-log-group&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;log_stream_name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;rancher-demo-cluster-log-stream&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;region&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;us-east-1&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-nt"&gt;status&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;active&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;true&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-7"&gt;Conclusion&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Logging is a complex field and very dependent on the individual requirements and use-case.
I recommend to invest some time to learn about &lt;em&gt;kube-logging&lt;/em&gt;, to write down the goals you
want to achieve with your log setup and work backwards from there to perform the actual configuration.&lt;/p&gt;
&lt;p&gt;This is way beyond the scope of this Article, my main intention was to show how to bring IRSA into the mix.&lt;/p&gt;
&lt;p&gt;Compared to Rancher Backup, it's a little more effort to get IRSA working, mainly because of the
missing support in the Helm chart, but it's worth it and not too complicated.&lt;/p&gt;
&lt;p&gt;I hope my contribution to the &lt;em&gt;rancher-logging&lt;/em&gt; Helm chart will help to improve the user experience.
As soon a pull request that allows the &lt;em&gt;serviceAccount&lt;/em&gt; annotation, was merged, I plan to also submit
a PR to get the Rancher Documentation updated accordingly. Configuring such a feature, based on security
best practices, should be as easy as possible to achieve broad adoption :)&lt;/p&gt;
&lt;p&gt;In the next article of this series, I take a break from IRSA and will talk about login to Rancher via SAML Authentication
by using &lt;a class="reference external" href="https://aws.amazon.com/iam/identity-center/"&gt;AWS IAM Identity Center&lt;/a&gt; as SAML identity provider.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;Article series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html"&gt;Rancher on AWS, Backup to S3 with IRSA for Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rancher on AWS, Logging to CloudWatch with IRSA for Authentication&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Rancher on AWS, SAML Authentication with AWS IAM Identity Center as SAML IdP (coming soon)&lt;/li&gt;
&lt;li&gt;Rancher on AWS, GitOps with Fleet and AWS CodeCommit (coming soon)&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><category term="Container"/><category term="AWS"/><category term="EKS"/><category term="IRSA"/><category term="IAM"/><category term="Kubernetes"/><category term="Amazon"/><category term="Rancher"/><category term="Logging"/><category term="CloudWatch"/></entry><entry><title>Rancher on AWS, Backup to S3 with IRSA for Authentication</title><link href="https://dominik.wombacher.cc/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html" rel="alternate"/><published>2023-07-04T00:00:00+02:00</published><updated>2023-07-12T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-07-04:/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;This is the second Article of the Series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;,
I'm going to demonstrate how to perform backups from Rancher to S3 by using IAM
Roles for  ... &lt;a class="read-more" href="/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;This is the second Article of the Series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;,
I'm going to demonstrate how to perform backups from Rancher to S3 by using IAM
Roles for Service Accounts (IRSA) instead of EC2 Instance IAM Roles or AWS access keys.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: The recording of my talk
&lt;a class="reference external" href="https://events.opensuse.org/conferences/oSC23/program/proposals/4169"&gt;Rancher integration with AWS services: possibilities, challenges, outlook&lt;/a&gt;
(abstract and slide-deck) at openSUSE Conference 23 is online and covers parts of this article as well.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://media.ccc.de/v/4169-rancher-integration-with-aws-services-possibilities-challenges-outlook"&gt;media.ccc.de&lt;/a&gt;
(includes options to download video and audio)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://youtu.be/khIg5MT4WGs"&gt;youtube.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="contents local topic" id="contents"&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#terminology" id="toc-entry-1"&gt;Terminology&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#kubernetes-objects-and-annotations" id="toc-entry-2"&gt;Kubernetes objects and annotations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#helm-chart-repository-release" id="toc-entry-3"&gt;Helm chart, repository, release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#iam-role-and-irsa" id="toc-entry-4"&gt;IAM Role and IRSA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#rancher-backup" id="toc-entry-5"&gt;Rancher Backup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#overview" id="toc-entry-6"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#irsa-configuration" id="toc-entry-7"&gt;IRSA Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#conclusion" id="toc-entry-8"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="terminology"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-1"&gt;Terminology&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="kubernetes-objects-and-annotations"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-2"&gt;Kubernetes objects and annotations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I assume you are aware what Kubernetes
&lt;a class="reference external" href="https://kubernetes.io/docs/concepts/overview/working-with-objects/"&gt;objects&lt;/a&gt;
and &lt;a class="reference external" href="https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/"&gt;annotations&lt;/a&gt;
are, if not, that's your chance to brush up your knowledge,
I will use these terms to explain the configuration of Rancher Backup.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="helm-chart-repository-release"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-3"&gt;Helm chart, repository, release&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Again, I assume you are aware of &lt;a class="reference external" href="https://helm.sh"&gt;Helm&lt;/a&gt; in general and also what a
&lt;a class="reference external" href="https://helm.sh/docs/topics/charts/"&gt;chart&lt;/a&gt;,
&lt;a class="reference external" href="https://helm.sh/docs/topics/chart_repository/"&gt;repository&lt;/a&gt; and
&lt;a class="reference external" href="https://helm.sh/docs/glossary/#release"&gt;release&lt;/a&gt; is. I'm going to to use these terms later.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="iam-role-and-irsa"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-4"&gt;IAM Role and IRSA&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To learn more about AWS IAM Roles and IRSA, I recommend to checkout the first Article of this series:
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="rancher-backup"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-5"&gt;Rancher Backup&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="overview"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-6"&gt;Overview&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Rancher provides the &lt;a class="reference external" href="https://github.com/rancher/backup-restore-operator"&gt;backup-restore-operator&lt;/a&gt;,
it can be used to perform &lt;em&gt;scheduled&lt;/em&gt; and &lt;em&gt;encrypted&lt;/em&gt; backups of all Rancher resources.
Amazon S3 is a supported target, which is a high available and resilient location for backups.
IRSA can be used for authentication by adding the &lt;em&gt;serviceAccount annotation&lt;/em&gt; during the installation.&lt;/p&gt;
&lt;p&gt;The official documentation about
&lt;a class="reference external" href="https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher"&gt;Backing up Rancher&lt;/a&gt;
provides further information about the functionality and general setup.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="irsa-configuration"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-7"&gt;IRSA Configuration&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The backup operator already supports IRSA but it's not covered in the official Rancher Documentation yet.
It's sufficient to add three additional lines as part of the installation to activate it:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="pygments-nt"&gt;serviceAccount&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;annotations&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;eks.amazonaws.com/role-arn&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;arn:aws:iam::1234567890:role/my-rancher-backup-role&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;The complete values file for Helm could look like this for example:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="pygments-nt"&gt;s3&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;bucketName&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;my-rancher-backup-bucket&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;credentialSecretName&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;''&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;credentialSecretNamespace&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;''&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;enabled&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;true&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;endpoint&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;s3.us-east-1.amazonaws.com&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;region&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;us-east-1&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-nt"&gt;serviceAccount&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;annotations&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;eks.amazonaws.com/role-arn&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;arn:aws:iam::1234567890:role/my-rancher-backup-role&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Besides the &lt;em&gt;serviceAccount annotation&lt;/em&gt;, the initial IRSA setup for the cluster and the creation
of the IAM Role, with a link to the service account, used by the Rancher backup operator, is required.&lt;/p&gt;
&lt;p&gt;The default service account name is &lt;code&gt;rancher-backup&lt;/code&gt; in the namespace &lt;code&gt;cattle-resources-system&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Further information can be found in
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-8"&gt;Conclusion&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;At first it was a little tricky to figure out if and how the Rancher backup operator supports IRSA,
as I realized that the necessary code change was already merged a while ago, I was surprised,
it's not mentioned in the documentation yet.&lt;/p&gt;
&lt;p&gt;The actual configuration was then quite straight forward and similar as in examples I found in the
&lt;a class="reference external" href="https://docs.aws.amazon.com/eks/latest/userguide/pod-configuration.html"&gt;Amazon EKS documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By default, long-term access key credentials are used by Rancher, which I would recommend to avoid, use
short-term tokes as provided via IRSA instead, I outlined the &lt;em&gt;why&lt;/em&gt; already in the first article of this series ;)&lt;/p&gt;
&lt;p&gt;In the next article of this series, I will show you how to push log files from Rancher to CloudWatch and
- again - to authenticate with IRSA instead of EC2 Instance IAM Roles or access keys.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;Article series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rancher on AWS, Backup to S3 with IRSA for Authentication&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/rancher-on-aws-logging-to-cloudwatch-with-irsa-for-authentication.html"&gt;Rancher on AWS, Logging to CloudWatch with IRSA for Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rancher on AWS, SAML Authentication with AWS IAM Identity Center as SAML IdP (coming soon)&lt;/li&gt;
&lt;li&gt;Rancher on AWS, GitOps with Fleet and AWS CodeCommit (coming soon)&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><category term="Container"/><category term="AWS"/><category term="EKS"/><category term="IRSA"/><category term="IAM"/><category term="Kubernetes"/><category term="Amazon"/><category term="Rancher"/><category term="Backup"/><category term="S3"/></entry><entry><title>What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?</title><link href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html" rel="alternate"/><published>2023-07-03T00:00:00+02:00</published><updated>2023-07-12T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-07-03:/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;This is the first Article of the Series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;,
I did quite a lot with Rancher on Amazon Web Services recently and want to share some  ... &lt;a class="read-more" href="/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;This is the first Article of the Series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;,
I did quite a lot with Rancher on Amazon Web Services recently and want to share some of my
experiences about the necessary configuration to interact with AWS services for Backup,
Logging and Authentication.&lt;/p&gt;
&lt;p&gt;I will cover
&lt;a class="reference external" href="https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html"&gt;IAM roles for service accounts&lt;/a&gt;
(Archive: &lt;a class="reference external" href="https://web.archive.org/web/20230705190236/https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html"&gt;[1]&lt;/a&gt;,
&lt;a class="reference external" href="https://archive.today/2023.07.14-064542/https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html"&gt;[2]&lt;/a&gt;),
what it is and how it works under the hood on Amazon Elastic Kubernetes Service (EKS), in this post.&lt;/p&gt;
&lt;p&gt;Let's start with a brief overview of the identity and access management challenges
that can be solved by using IRSA and some important terminologies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: The recording of my talk
&lt;a class="reference external" href="https://events.opensuse.org/conferences/oSC23/program/proposals/4169"&gt;Rancher integration with AWS services: possibilities, challenges, outlook&lt;/a&gt;
(abstract and slide-deck) at openSUSE Conference 23 is online and covers parts of this article as well.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://media.ccc.de/v/4169-rancher-integration-with-aws-services-possibilities-challenges-outlook"&gt;media.ccc.de&lt;/a&gt;
(includes options to download video and audio)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://youtu.be/khIg5MT4WGs"&gt;youtube.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="contents local topic" id="contents"&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#terminology" id="toc-entry-1"&gt;Terminology&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#aws-iam-role-and-policy" id="toc-entry-2"&gt;AWS IAM Role and Policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#amazon-elastic-compute-cloud-ec2-instance-iam-role" id="toc-entry-3"&gt;Amazon Elastic Compute Cloud (EC2) Instance IAM Role&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#aws-iam-access-key-credentials" id="toc-entry-4"&gt;AWS IAM access key credentials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#iam-roles-for-service-accounts-irsa" id="toc-entry-5"&gt;IAM Roles for Service Accounts (IRSA)&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#irsa-under-the-hood" id="toc-entry-6"&gt;IRSA under the hood&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#pod-identity-webhook" id="toc-entry-7"&gt;Pod Identity Webhook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#conclusion" id="toc-entry-8"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="terminology"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-1"&gt;Terminology&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="aws-iam-role-and-policy"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-2"&gt;AWS IAM Role and Policy&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To grant an application access to AWS services, you need an AWS IAM Role and Policy.
A IAM Role contains a IAM Permission policy and a IAM Trust relationship.
The policy defines &lt;em&gt;what&lt;/em&gt; can be done with the specified service, for example,
uploading files to a Amazon Simple Storage Service (S3) Bucket.
The relationship defines &lt;em&gt;who&lt;/em&gt; can assume the IAM Role to perform the actions
based on the attached permission policy.&lt;/p&gt;
&lt;pre class="code text literal-block"&gt;
IAM Permission policy &amp;gt;&amp;gt; IAM Role &amp;lt;&amp;lt; IAM Trust relationship

&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="amazon-elastic-compute-cloud-ec2-instance-iam-role"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-3"&gt;Amazon Elastic Compute Cloud (EC2) Instance IAM Role&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;When a IAM Role is attached to an EC2 Instance, every application running on this specific instance
has the same level of permissions. If you have one single application running, it's good practice
to grant permissions that way. But imagine you have multiple applications running, for example
in different containers like in a Kubernetes Environment, then all of them inherit the same set of
permissions.&lt;/p&gt;
&lt;p&gt;For Example: The IAM Role grants write access to a S3 Bucket, because container #1 is supposed
to upload files, by using an EC2 Instance IAM Role, container #2 and container #3 can also
write to the same S3 Bucket. Those container run a complete different application, maybe even
outside your own control. Worst case, this could cause data corruption, data loss or even a data leak.&lt;/p&gt;
&lt;pre class="code text literal-block"&gt;
container 1 --|     IAM Role
              |        |
container 2 --|-- EC2 Instance -- S3 Bucket
              |
container 3 --|

&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="aws-iam-access-key-credentials"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-4"&gt;AWS IAM access key credentials&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Long-term credentials should be avoided whenever possible from a security best practice point of view.
AWS access keys are linked to a IAM user and have no expire date. They could be leaked or shared
between multiple applications and therefore might have to broad permissions assigned.&lt;/p&gt;
&lt;p&gt;I think it's obvious why those type of credentials should not be used, in my opinion not even during
development. Start early in the process to replace long-term with short-term credentials!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="iam-roles-for-service-accounts-irsa"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-5"&gt;IAM Roles for Service Accounts (IRSA)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Now that I explained why EC2 Instance IAM Roles and IAM access keys are not a good idea in a
Kubernetes environment, what's the alternative? IRSA to the rescue ;) With this feature, IAM Roles
are assigned to Kubernetes Service Accounts, which are then linked to specific pods. That way
you grant granular permissions on a per service basis inside your Kubernetes cluster.&lt;/p&gt;
&lt;p&gt;It's an AWS feature and available out-of-the-box on Amazon EKS. the open source solution that makes
the dynamic configuration and assignment of temporary credentials possible is
&lt;a class="reference external" href="https://github.com/aws/amazon-eks-pod-identity-webhook"&gt;Amazon EKS Pod Identity Webhook&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;AWS CLI and AWS SDK both fully support IRSA, every application inside a Pod that leverages the CLI
or SDK to interact with AWS services, can use IRSA instead of, for example, access keys with none or
just minor code changes.&lt;/p&gt;
&lt;div class="section" id="irsa-under-the-hood"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-6"&gt;IRSA under the hood&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Personally I'm super excited about IRSA and how it works, I think it should be used for every
Kubernetes workload on AWS, there is really no reason at all to stick with EC2 Instance IAM Roles
or even access key credentials.&lt;/p&gt;
&lt;p&gt;That's why I want to dive deeper into how IRSA works and what magic is happening under the hood.&lt;/p&gt;
&lt;img alt="AWS IAM Roles for Service Accounts (IRSA) under the hood, architecture overview" src="https://dominik.wombacher.cc/images/AWS_IRSA_Architecture_Overview_800_72.jpg" /&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;A reference between the EKS Cluster and IAM is established via OIDC. This is a one-time setup
per cluster and can be done via &lt;code&gt;eksctl&lt;/code&gt;. Example:&lt;/p&gt;
&lt;pre class="code text literal-block"&gt;
eksctl utils associate-iam-oidc-provider --cluster &amp;lt;CUSTER_NAME&amp;gt; --approve

&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;A reference between a Kubernetes service account and a IAM Role has to be created. This can be
done via &lt;code&gt;eksctl&lt;/code&gt; in two ways, either with an account and the role managed by EKS, or by
assigning a role to an existing Kubernetes service account. In case of Rancher, it's option two
because Rancher creates and manages Kubernetes service accounts on it's own.
Example:&lt;/p&gt;
&lt;pre class="code text literal-block"&gt;
eksctl create iamserviceaccount --name &amp;lt;SA_NAME&amp;gt; --namespace &amp;lt;NS_NAME&amp;gt; --cluster &amp;lt;CLUSTER_NAME&amp;gt; \
  --role-name &amp;lt;ROLE_NAME&amp;gt; --attach-policy-arn &amp;lt;IAM_POLICY_ARN&amp;gt; --approve --role-only

&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;The Kubernetes resource is configured with a appropriate service account annotation, for example
as part of a installation via Helm or by adjusting a Manifest.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;As soon a Pod with a service account annotation comes up, the Pod Identity Webhook will be
triggered and reconfigure (mutate) the Pod to use IRSA&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;The Pod assumes the specified IAM Role and connects to the AWS Security Token Service&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;AWS STS verifies the request by contacting AWS IAM&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;If the request could be verified and is valid, AWS STS assigns temporary credentials&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;AWS CLI and applications leveraging the AWS SDK, can now interact with AWS services based on the permissions
of the IAM Role, without the need of EC2 Instance IAM Roles or long-term access key credentials.&lt;/p&gt;
&lt;p&gt;As soon the temporary credentials are expired, the process automatically starts over from step #5
to get a new set of temporary credentials, there is no manual interaction required as soon step
#1 till #3 are completed.&lt;/p&gt;
&lt;p&gt;Further information and examples can be found in the
&lt;a class="reference external" href="https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html"&gt;AWS Documentation&lt;/a&gt;
about IRSA on Amazon EKS.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="pod-identity-webhook"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-7"&gt;Pod Identity Webhook&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I explained that the Pod Identity Webhook performs a reconfiguration / mutation in step #4 of the
IRSA Architecture Diagram. What happens in this step, is that the following Environment variables
and Volumes are added to the Pod:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="pygments-nt"&gt;env&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;AWS_DEFAULT_REGION&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;value&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;us-west-2&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;AWS_REGION&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;value&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;us-west-2&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;AWS_ROLE_ARN&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;value&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;&amp;quot;arn:aws:iam::111122223333:role/s3-reader&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;AWS_WEB_IDENTITY_TOKEN_FILE&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;value&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;&amp;quot;/var/run/secrets/eks.amazonaws.com/serviceaccount/token&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;AWS_STS_REGIONAL_ENDPOINTS&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;value&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;&amp;quot;regional&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;

&lt;/span&gt;&lt;span class="pygments-nt"&gt;volumeMounts&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;mountPath&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;&amp;quot;/var/run/secrets/eks.amazonaws.com/serviceaccount/&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;aws-token&lt;/span&gt;&lt;span class="pygments-w"&gt;

&lt;/span&gt;&lt;span class="pygments-nt"&gt;volumes&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;name&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;aws-token&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;projected&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;sources&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-p-Indicator"&gt;-&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-nt"&gt;serviceAccountToken&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nt"&gt;audience&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;&amp;quot;sts.amazonaws.com&amp;quot;&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nt"&gt;expirationSeconds&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;86400&lt;/span&gt;&lt;span class="pygments-w"&gt;
        &lt;/span&gt;&lt;span class="pygments-nt"&gt;path&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;token&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;The &lt;em&gt;region&lt;/em&gt; and &lt;em&gt;role arn&lt;/em&gt; values are example data and set according to your IAM Role configuration
performed in step #2. The Environment variables are used by AWS CLI or SDK to understand that the
authentication need to be performed via a token, which is available in the mount &lt;code&gt;aws-token&lt;/code&gt;.
The content of this mount is updated based on the response from AWS STS in step #7.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-8"&gt;Conclusion&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html"&gt;IRSA&lt;/a&gt;
(Archive: &lt;a class="reference external" href="https://web.archive.org/web/20230705190236/https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html"&gt;[1]&lt;/a&gt;,
&lt;a class="reference external" href="https://archive.today/2023.07.14-064542/https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html"&gt;[2]&lt;/a&gt;)
is in my opinion a very elegant way to increase security and address some of the most critical IAM challenges.
The initial setup on Amazon EKS is normally done within a few minutes, afterwards it's a solution that just works.&lt;/p&gt;
&lt;p&gt;Given the fact that the Pod Identity Webhook component is
&lt;a class="reference external" href="https://github.com/aws/amazon-eks-pod-identity-webhook"&gt;open source&lt;/a&gt;, it's also possible to use IRSA
on other Kubernetes clusters, which are deployed directly on EC2 and using a CNCF compliant distribution.&lt;/p&gt;
&lt;p&gt;With this deep dive into IRSA I wanted to share the benefits and help you to better understand the upcoming
articles of this series about Backup and Logging with Rancher on AWS, where it's about how to get it working
with IRSA and to avoid long-term credentials.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;Article series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;strong&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html"&gt;Rancher on AWS, Backup to S3 with IRSA for Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/rancher-on-aws-logging-to-cloudwatch-with-irsa-for-authentication.html"&gt;Rancher on AWS, Logging to CloudWatch with IRSA for Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rancher on AWS, SAML Authentication with AWS IAM Identity Center as SAML IdP (coming soon)&lt;/li&gt;
&lt;li&gt;Rancher on AWS, GitOps with Fleet and AWS CodeCommit (coming soon)&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><category term="Container"/><category term="AWS"/><category term="EKS"/><category term="IRSA"/><category term="IAM"/><category term="Kubernetes"/><category term="Webhook"/><category term="Pod"/><category term="Amazon"/></entry><entry><title>SUSE Certified Deployment Specialist in Rancher Kubernetes Engine 2</title><link href="https://dominik.wombacher.cc/posts/suse-certified-deployment-specialist-in-rancher-kubernetes-engine-2.html" rel="alternate"/><published>2023-06-21T00:00:00+02:00</published><updated>2023-06-21T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-06-21:/posts/suse-certified-deployment-specialist-in-rancher-kubernetes-engine-2.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;Second day at SUSECON 23 in Munich, second Exam passed: &lt;strong&gt;SCDS in Rancher Kubernetes Engine 2&lt;/strong&gt;.
After passing &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/suse-certified-administrator-in-suse-neuvector-5.html"&gt;SCA in NeuVector 5&lt;/a&gt;
yesterday, I can remove another one from my  ... &lt;a class="read-more" href="/posts/suse-certified-deployment-specialist-in-rancher-kubernetes-engine-2.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;Second day at SUSECON 23 in Munich, second Exam passed: &lt;strong&gt;SCDS in Rancher Kubernetes Engine 2&lt;/strong&gt;.
After passing &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/suse-certified-administrator-in-suse-neuvector-5.html"&gt;SCA in NeuVector 5&lt;/a&gt;
yesterday, I can remove another one from my list. Let's see if I can also clear
&lt;em&gt;SCDS in Rancher Manager 2.7 for Rancher Prime&lt;/em&gt; tomorrow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: Thorough understanding in deploying, backing up, restoring, and upgrading Kubernetes clusters with RKE2
in a professional setting.&lt;/p&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.suse.com"&gt;https://www.suse.com&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="skills"&gt;
&lt;h2&gt;Skills&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Requirements for RKE2 Deployment&lt;/li&gt;
&lt;li&gt;RKE2 Architecture and Design Concepts&lt;/li&gt;
&lt;li&gt;Installation of RKE2 Clusters&lt;/li&gt;
&lt;li&gt;RKE2 Installation Methods&lt;/li&gt;
&lt;li&gt;RKE2 Manual Installation&lt;/li&gt;
&lt;li&gt;RKE2 Installation with the Installer Script&lt;/li&gt;
&lt;li&gt;RKE2 Configuration Options&lt;/li&gt;
&lt;li&gt;Multi-node and Highly Available RKE2 Clusters&lt;/li&gt;
&lt;li&gt;Installation of RKE2 Clusters with Auto Deployed Services&lt;/li&gt;
&lt;li&gt;Kubernetes Addons&lt;/li&gt;
&lt;li&gt;Helm Integration in RKE2&lt;/li&gt;
&lt;li&gt;Configuring Deployment of Addons During the RKE2 Cluster Install&lt;/li&gt;
&lt;li&gt;Installation of RKE2 Clusters with Advanced Networking&lt;/li&gt;
&lt;li&gt;Cluster Networking Options in RKE2&lt;/li&gt;
&lt;li&gt;Configuring Cluster Networking in RKE2&lt;/li&gt;
&lt;li&gt;Configuring RKE2 to Provide Multiple Network Interfaces to Pods&lt;/li&gt;
&lt;li&gt;Installation of CIS Hardened RKE2 Clusters&lt;/li&gt;
&lt;li&gt;Installation of Air-gapped RKE2&lt;/li&gt;
&lt;li&gt;Basic etcd Concepts&lt;/li&gt;
&lt;li&gt;RKE2 Backup and Recovery Concepts&lt;/li&gt;
&lt;li&gt;Back Up an RKE2 Cluster&lt;/li&gt;
&lt;li&gt;Restore an RKE2 Cluster&lt;/li&gt;
&lt;li&gt;Upgrading RKE2 Clusters&lt;/li&gt;
&lt;li&gt;Upgrading RKE2 Clusters in an Air-gapped Environment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.suse.com"&gt;https://www.suse.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="certificate"&gt;
&lt;h2&gt;Certificate&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Downloads&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/SCDS_RKE2105.pdf"&gt;Certificate (ID 105)&lt;/a&gt; (PDF, 40K)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Links&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="https://suse.useclarus.com/view/verify/"&gt;Verify Certificate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://badges.suse.com/fc0f31bb-a992-48fd-a6e3-a6f2b8e0d5c5#gs.33c9at"&gt;SUSE Badges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="Certification"/><category term="SUSE"/><category term="Certification"/><category term="Deployment"/><category term="Specialist"/><category term="RKE2"/><category term="Rancher"/><category term="Kubernetes"/><category term="Exam"/></entry><entry><title>SUSE Certified Deployment Specialist in SUSE Rancher and Kubernetes Distributions</title><link href="https://dominik.wombacher.cc/posts/suse-certified-deployment-specialist-in-suse-rancher-and-kubernetes-distributions.html" rel="alternate"/><published>2022-11-07T00:00:00+01:00</published><updated>2022-11-07T00:00:00+01:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2022-11-07:/posts/suse-certified-deployment-specialist-in-suse-rancher-and-kubernetes-distributions.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;Never stop learning! Today I passed the Exam &lt;strong&gt;SUSE Certified Deployment Specialist in SUSE Rancher and Kubernetes Distributions&lt;/strong&gt;,
it's my second SUSE Rancher and Kubernetes related Certification, preparing for the  ... &lt;a class="read-more" href="/posts/suse-certified-deployment-specialist-in-suse-rancher-and-kubernetes-distributions.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;Never stop learning! Today I passed the Exam &lt;strong&gt;SUSE Certified Deployment Specialist in SUSE Rancher and Kubernetes Distributions&lt;/strong&gt;,
it's my second SUSE Rancher and Kubernetes related Certification, preparing for the Exam helped me to get an in-depth understanding
of deploying and configuring various Rancher Kubernetes Distributions (RKE, RKE2, K3s), great extension to the
&lt;strong&gt;SCA SUSE Rancher 2.6&lt;/strong&gt; I received a few days ago.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: Knowledge how to deploy Kubernetes clusters with RKE, RKE2 and K3S, both from the command line and
from SUSE Rancher as well as how to deploy Rancher on Kubernetes, also how to backup and restore
RKE and RKE2 clusters from the command line and back up RKE with SUSE Rancher.&lt;/p&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.suse.com"&gt;https://www.suse.com&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="skills"&gt;
&lt;h2&gt;Skills&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Deploy RKE&lt;ul&gt;
&lt;li&gt;Plan a New Cluster&lt;/li&gt;
&lt;li&gt;Get Started with Deployment&lt;/li&gt;
&lt;li&gt;Configure RKE&lt;/li&gt;
&lt;li&gt;Deploy Kubernetes with RKE&lt;/li&gt;
&lt;li&gt;Work with config.yaml&lt;/li&gt;
&lt;li&gt;Add Nodes&lt;/li&gt;
&lt;li&gt;Troubleshoot&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Deploy RKE2 and K3s&lt;ul&gt;
&lt;li&gt;Requirements&lt;/li&gt;
&lt;li&gt;Nodes&lt;/li&gt;
&lt;li&gt;Understand RKE2 Architecture&lt;/li&gt;
&lt;li&gt;Configure RKE2&lt;/li&gt;
&lt;li&gt;Deploy theInitial RKE2 Cluster&lt;/li&gt;
&lt;li&gt;Add Nodes&lt;/li&gt;
&lt;li&gt;Troubleshoot&lt;/li&gt;
&lt;li&gt;RKE2 and K3s&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Deploy SUSE Rancher&lt;ul&gt;
&lt;li&gt;Deploy SUSE Rancher with HELM&lt;/li&gt;
&lt;li&gt;Deploy with Terraform&lt;/li&gt;
&lt;li&gt;Other Deployment Options&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Deploy RKE with SUSE Rancher&lt;ul&gt;
&lt;li&gt;Deploy RKE on Existing Servers&lt;/li&gt;
&lt;li&gt;Deploy RKE on New Nodes on an Infrastructure Provider&lt;/li&gt;
&lt;li&gt;Deploy RKE with a Hosted Kubernetes Provider&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Backup and Restore RKE and RKE2 Clusters&lt;ul&gt;
&lt;li&gt;etcd and Failure Recovery&lt;/li&gt;
&lt;li&gt;Back up and Restore RKE Cluster&lt;/li&gt;
&lt;li&gt;Backup and Restore RKE2 Cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.suse.com"&gt;https://www.suse.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="certificate"&gt;
&lt;h2&gt;Certificate&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Downloads&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/Dominik_Wombacher_SCDS_RAN_K8S134.pdf"&gt;Certificate (ID 134)&lt;/a&gt; (PDF, 121K)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Links&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="https://suse.useclarus.com/view/verify/"&gt;Verify Certificate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="Certification"/><category term="SUSE"/><category term="Certification"/><category term="Deployment"/><category term="Specialist"/><category term="Rancher"/><category term="Kubernetes"/><category term="Exam"/></entry><entry><title>SUSE Support Accreditation - SUSE Rancher</title><link href="https://dominik.wombacher.cc/posts/suse-support-accreditation-suse-rancher.html" rel="alternate"/><published>2022-11-07T00:00:00+01:00</published><updated>2022-11-07T00:00:00+01:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2022-11-07:/posts/suse-support-accreditation-suse-rancher.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;There was only on Certification left on my SUSE Learning Path, &lt;strong&gt;SPSA SUSE Rancher&lt;/strong&gt;,
which I received today, after meeting the Pre-Requirements by holding the
SUSE Rancher SCA and SCDS  ... &lt;a class="read-more" href="/posts/suse-support-accreditation-suse-rancher.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;There was only on Certification left on my SUSE Learning Path, &lt;strong&gt;SPSA SUSE Rancher&lt;/strong&gt;,
which I received today, after meeting the Pre-Requirements by holding the
SUSE Rancher SCA and SCDS Certification.&lt;/p&gt;
&lt;p&gt;It was, similar as &lt;strong&gt;SPSA SLES&lt;/strong&gt; great strengthen my knowledge about troubleshooting,
tools and best practices to interact with the SUSE Support Team with a focus on SUSE Rancher.&lt;/p&gt;
&lt;div class="section" id="skills"&gt;
&lt;h2&gt;Skills&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Maintenance&lt;/li&gt;
&lt;li&gt;Basic Health Checks&lt;/li&gt;
&lt;li&gt;Troubleshooting&lt;/li&gt;
&lt;li&gt;Gathering System Information for support&lt;/li&gt;
&lt;li&gt;Interacting with SUSE&lt;/li&gt;
&lt;li&gt;Support FAQs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source &amp;amp; Copyright: &lt;a class="reference external" href="https://www.suse.com"&gt;https://www.suse.com&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="certificate"&gt;
&lt;h2&gt;Certificate&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Downloads&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="/certificates/Dominik_Wombacher_SPSA_RANCHER100.pdf"&gt;Certificate (ID 100)&lt;/a&gt; (PDF, 121K)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Links&lt;ul&gt;
&lt;li&gt;&lt;a class="reference external" href="https://suse.useclarus.com/view/verify/"&gt;Verify Certificate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="Certification"/><category term="SUSE"/><category term="Administration"/><category term="Rancher"/><category term="Kubernetes"/><category term="Support"/></entry></feed>