Controller Manager without RotateKubeletServerCertificate set
ID |
kube_controller_manager_rotate_server_certificate |
Severity |
low |
Vendor |
Kubernetes |
Resource |
kube-controller-manager |
Tags |
reachable |
Description
The Kubernetes controller manager is a daemon that embeds the core control loops shipped with Kubernetes.
It is recommended to set RotateKubeletServerCertificate to true for automated certificate rotation before credentials expiration, to avoid downtimes compromising availability.
| This recommendation only applies if you let kubelets get their certificates from the API server. In case your kubelet certificates come from an outside authority/tool (e.g. Vault), then you need to take care of rotation yourself. In that case this check could be disabled in your policy. |
The check reports a flaw when the Control Manager is not setting RotateKubeletServerCertificate=true in the --feature-gates argument.
Learn more about this topic at Configure Certificate Rotation for the Kubelet.
Examples
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
component: kube-controller-manager
tier: control-plane
name: weak
namespace: kube-system
spec:
containers:
- command:
- kube-controller-manager (1)
- --controllers=*,bootstrapsigner,tokencleaner
image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
| 1 | When --profiling is not set, service account token couldn’t be ensure it is rotate. |
Mitigation / Fix
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
component: kube-controller-manager
tier: control-plane
name: good
namespace: kube-system
spec:
containers:
- command:
- kube-controller-manager
- --controllers=*,bootstrapsigner,tokencleaner
- --feature-gates=RotateKubeletServerCertificate=true,VolumePVCDataSource=True (1)
image: gcr.io/<image>
| 1 | Verify RotateKubeletServerCertificate=true is set explicitly into feature-gates. |