Profile applicability: Level 1 - Worker Node
Ensure that a Client CA file is configured for Kubelet authentication using certificates
               to enhance security. This configuration is critical because the connections from the
               apiserver to the kubelet, which are used for activities such as fetching logs for
               pods, attaching to running pods via kubectl, and enabling the kubelet’s port-forwarding
               functionality, terminate at the kubelet’s HTTPS endpoint. By default, the apiserver
               does not verify the kubelet’s serving certificate, making these connections vulnerable
               to man-in-the-middle attacks and unsafe over untrusted or public networks. Configuring
               Kubelet certificate authentication allows the apiserver to authenticate the Kubelet
               before it processes any requests, thereby safeguarding these interactions. This setup
               requires TLS to be configured both on the apiserver and the kubelets to ensure secure
               communication.
Impact
You require TLS to be configured on apiserver as well as kubelets.
Audit
Audit method 1:
|  | NoteKubelets can be configured via a configuration file or command line arguments. Command
                                 line arguments take precedence. Check both command line arguments and configuration
                                 file entries when auditing Kubelet configurations. | 
- 
SSH into each node and run the following command to view details of the active Kubelet process:ps -ef | grep kubelet 
- 
Identify the location of the configuration file from the --config argument in the output. View the file using:sudo less /path/to/kubelet-config.json 
- 
Verify that a client certificate authority file is configured:- 
Command line argument to the Kubelet service:--client-ca-file=/path/to/client-ca-file 
- 
In the Kubelet configuration file:{ "authentication": { "x509": { "clientCAFile": "/path/to/client-ca-file" } } }
 
- 
Audit method 2:
Review the running configuration of a Kubelet via the "/configz" endpoint of the Kubernetes
                  API using kubectl:
- 
Discover all nodes in your cluster:kubectl get nodes 
- 
Initiate a proxy with kubectl on a local port (e.g., 8080):kubectl proxy --port=8080 
- 
In a separate terminal, run the following command for each node:export NODE_NAME=my-node-name curl http://localhost:8080/api/v1/nodes/${NODE_NAME}/proxy/configz
- 
Verify that a client certificate authority file is configured by checking the API response:{ "authentication": { "x509": { "clientCAFile": "/path/to/client-ca-file" } } }
Remediation
Method 1:
- 
SSH into each node.
- 
Locate the Kubelet configuration file:ps -ef | grep kubelet 
- 
View the configuration file using:sudo less /path/to/kubelet-config.json 
- 
Configure the client certificate authority file by setting the following parameter:{ "authentication": { "x509": { "clientCAFile": "/path/to/client-ca-file" } } }
- 
Restart the kubelet service and check its status (example for systems using systemd):systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
Method 2:
- 
If using command line arguments, edit the kubelet service file to include the following parameter:--client-ca-file=/path/to/client-ca-file 
- 
For systems using systemd, edit the file located at /etc/systemd/system/kubelet.service.d/10-kubelet-args.conf.
- 
Restart the kubelet service and check its status (example for systems using systemd):systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
 
		