Managing TLS Certificates in Kubernetes

Proficient in variety of DevOps technologies, including AWS, Linux, Shell Scripting, Python, Docker, Terraform, Jenkins and Computer Networking. They have strong ability to troubleshoot and resolve issues and are consistently motivated to expand their knowledge and skills through expantion of new technologies.
🗼Introduction
Securing a Kubernetes cluster involves ensuring that all communication between its components is encrypted. This is achieved through the use of TLS certificates. In this blog, we will delve into the types of certificates used in Kubernetes, the process of generating them, viewing certificate details, and leveraging Kubernetes' built-in Certificate API for automated management and rotation.
🗼Types of TLS Certificates in Kubernetes
Server Certificates
Server certificates are essential for the secure communication between various Kubernetes components. Below are the key server certificates used:
Kube-apiserver: Uses
apiserver.crtandapiserver.key.ETCD server: Uses
etcdserver.crtandetcdserver.key.Kubelet server: Uses
kubelet.crtandkubelet.key.
Client Certificates
Client certificates are used for authenticating clients interacting with the Kubernetes API. Each client, such as kubectl or any other component, can have its own set of certificates.
🗼Generating TLS Certificates
Follow these steps to generate TLS certificates using OpenSSL:
Step 1: Create a Private Key
Generate a private key using the OpenSSL command:
openssl genrsa –out ca.key 2048
Step 2: Create a Certificate Signing Request (CSR)
Generate a CSR with the following command:
openssl req –new –key ca.key -subj "/CN=KUBERNETES-CA" -out ca.csr
Step 3: Sign the Certificate
Sign the certificate using the private key:
openssl x509 –req –in ca.csr -signkey ca.key -out ca.crt
🗼Viewing Certificate Details
To view the details of a certificate, follow these steps:
Step 1: Identify the Certificate File
Locate the certificate file by inspecting the relevant Kubernetes manifest. For example, to find the kube-apiserver certificate path:
cat /etc/kubernetes/manifests/kube-apiserver.yaml
Note down the absolute path of the certificate.
Step 2: Decode and View Certificate Details
Use the OpenSSL command to decode and view the certificate:
openssl x509 –in /etc/kubernetes/pki/apiserver.crt -text –noout
🗼Certificate API
Kubernetes offers an automated way to manage and rotate certificates through the Certificate API. This allows for streamlined certificate signing requests (CSRs) and approvals without manual intervention.
🗼Steps to Sign a Certificate
User Creates a Key:
openssl genrsa -out jane.key 2048Generate a CSR:
openssl req –new –key jane.key -subj "/CN=jane" -out jane.csrAdmin Submits the CSR: The admin encodes the CSR in base64 and creates a CertificateSigningRequest (CSR) object in Kubernetes.
cat jane.csr | base64Admin Approves the CSR: The admin approves the CSR using
kubectl:kubectl get csr kubectl certificate approve janeExtract the Certificate:
kubectl get csr jane -o yamlDecode the Certificate: Decode the base64 encoded certificate:
echo "certificate text" | base64 –decode
🗼Automated Certificate Management
The Kubernetes Controller Manager handles all certificate operations, ensuring that certificates are rotated and managed efficiently without manual intervention.
By following the above steps and leveraging Kubernetes' built-in tools, you can ensure that your cluster's communication remains secure and up-to-date with the necessary TLS certificates.



