Default service settings for Kubernetes components
Review the default settings for Kubernetes components, such as the kube-apiserver
, kubelet
, kube-scheduler
, or kube-proxy
that IBM Cloud® Kubernetes Service sets when you create your cluster.
kube-apiserver
Review the default settings for the kube-apiserver
master component in IBM Cloud Kubernetes Service.
- Default pod tolerations
-
default-not-ready-toleration-seconds=600s
-
default-unreachable-toleration-seconds=600s
- Privileged pods
-
allow-privileged=true
- Request and response headers
-
strict-transport-security-directives="max-age=31536000"
(Kubernetes version 1.28 and later) -
requestheader-client-ca-file=/mnt/etc/kubernetes-cert/ca.pem
-
requestheader-username-headers=X-Remote-User
-
requestheader-group-headers=X-Remote-Group
-
requestheader-extra-headers-prefix=X-Remote-Extra-
- Number of client requests
-
max-requests-inflight=1600
-
max-mutating-requests-inflight=800
- Admission controllers
-
ClusterTrustBundleAttest
(Kubernetes version 1.27 and later) -
ValidatingAdmissionPolicy
(Kubernetes version 1.27 and later) -
DefaultStorageClass
-
NamespaceLifecycle
-
LimitRanger
-
ServiceAccount
-
MutatingAdmissionWebhook
-
ValidatingAdmissionWebhook
-
ResourceQuota
-
DefaultTolerationSeconds
-
StorageObjectInUseProtection
-
PersistentVolumeClaimResize
-
Priority
-
PodSecurity
(Optional in Kubernetes version 1.24, enabled in version 1.25 and later) -
PodSecurityPolicy
(Kubernetes version 1.24 and earlier) -
NodeRestriction
-
TaintNodesByCondition
-
CertificateApproval
-
CertificateSigning
CertificateSubjectRestriction
DefaultIngressClass
RuntimeClass
DenyServiceExternalIPs
- Feature gates
-
See Feature gates
- TLS cipher support
-
TLS version 1.2:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
-
TLS version 1.3:
TLS_AES_128_GCM_SHA256
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_256_GCM_SHA384
kube-controller-manager
Review the default settings for the kube-controller-manager
master component in IBM Cloud Kubernetes Service.
- Node monitor grace period
-
node-monitor-grace-period=55s
(Kubernetes version 1.28 and later) - Feature gates
-
See Feature gates
- Pod garbage collection threshold
-
terminated-pod-gc-threshold=12500
- TLS cipher support
-
TLS version 1.2:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
-
TLS version 1.3:
TLS_AES_128_GCM_SHA256
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_256_GCM_SHA384
kubelet
Review the default settings for the kubelet
worker node component in IBM Cloud Kubernetes Service.
imageMaximumGCAge: 336h
(Kubernetes version 1.31 and later)
imageGCHighThresholdPercent: 75
(Kubernetes version 1.26 and later)
imageGCLowThresholdPercent: 65
(Kubernetes version 1.26 and later)
kubeAPIQPS: 50
(Kubernetes version 1.27 and later)
kubeAPIBurst: 100
(Kubernetes version 1.27 and later)
eventBurst: 100
(Kubernetes version 1.27 and later)
eventRecordQPS: 50
(Kubernetes version 1.27 and later)
serializeImagePulls: false
registryPullQPS: 5
registryBurst: 5
- cgroups
kubeletCgroups: /podruntime/kubelet
runtime-cgroups=/podruntime/runtime
- Container logs
containerLogMaxSize: 100Mi
containerLogMaxFiles: 3
- Container runtime endpoint
containerRuntimeEndpoint: "unix:///run/containerd/containerd.sock"
- CPU CFS quota
cpuCFSQuotaPeriod: 20ms
- Feature gates
- See Feature gates.
- File check frequency
fileCheckFrequency: 5s
- Graceful Node Shutdown
shutdownGracePeriodCriticalPods: 15s
- Kubernetes and system reserves
kubeReserved calculated based on worker node flavor
systemReserved calculated based on worker node flavor
Pod eviction
evictionSoft:
memory.available: "100Mi"
nodefs.available: "10%"
imagefs.available: "10%"
nodefs.inodesFree: "10%"
imagefs.inodesFree: "10%"
evictionSoftGracePeriod:
memory.available: "10m"
nodefs.available: "10m"
imagefs.available: "10m"
nodefs.inodesFree: "10m"
imagefs.inodesFree: "10m"
evictionHard:
memory.available: "100Mi"
nodefs.available: "5%"
imagefs.available: "5%"
nodefs.inodesFree: "5%"
imagefs.inodesFree: "5%"
- Pod manifest path
-
staticPodPath: /etc/kubernetes/manifests
- TLS cipher support
-
TLS version 1.2:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
-
TLS version 1.3:
TLS_AES_128_GCM_SHA256
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_256_GCM_SHA384
kube-scheduler
Review the default settings for the kube-scheduler
worker node component in IBM Cloud Kubernetes Service.
- TLS cipher support
-
TLS version 1.2:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
-
TLS version 1.3:
TLS_AES_128_GCM_SHA256
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_256_GCM_SHA384
kube-proxy
Review the default settings for the kube-proxy
worker node component in IBM Cloud Kubernetes Service.
- Iptable settings
iptables-sync-period 120
(Kubernetes version 1.29 and later)iptables-min-sync-period 2s
(Kubernetes version 1.29 and later)iptables-sync-period 180s
(Kubernetes version 1.28)iptables-min-sync-period 3s
(Kubernetes version 1.28)iptables-sync-period 300s
(Kubernetes version 1.27 and earlier)iptables-min-sync-period 5s
(Kubernetes version 1.27 and earlier)iptables-localhost-nodeports false
(Kubernetes versions 1.26 and later)- Proxy mode
proxy-mode=iptables
- Feature gates
- See Feature gates
Feature gates
Review the feature gates that are applied to all master and worker node components by default in IBM Cloud Kubernetes Service clusters. These feature gates differ from the ones that are set up in community distributions. In Kubernetes, most new beta features are disabled by default. Alpha features, which are subject to change, are disabled in all versions.
In cluster version 1.26 and later, you can use the kubectl get --raw /metrics | grep kubernetes_feature_enabled
command to determine if a feature gate is enabled or disabled.
- 1.31
CustomCPUCFSQuotaPeriod=true
StrictCostEnforcementForVAP=true
StrictCostEnforcementForWebhooks=true
- 1.30
CustomCPUCFSQuotaPeriod=true
StrictCostEnforcementForVAP=true
StrictCostEnforcementForWebhooks=true
- 1.29
CustomCPUCFSQuotaPeriod=true
KMSv1=true
StructuredAuthenticationConfiguration=true
- 1.28
CustomCPUCFSQuotaPeriod=true
UnauthenticatedHTTP2DOSMitigation=true
- 1.27
CustomCPUCFSQuotaPeriod=true
UnauthenticatedHTTP2DOSMitigation=true
- 1.26
CustomCPUCFSQuotaPeriod=true
UnauthenticatedHTTP2DOSMitigation=true
- 1.25
CustomCPUCFSQuotaPeriod=true
UnauthenticatedHTTP2DOSMitigation=true
- 1.24
CustomCPUCFSQuotaPeriod=true
LegacyServiceAccountTokenNoAutoGeneration=false
PodSecurity=false
- 1.23
CustomCPUCFSQuotaPeriod=true
ServiceLBNodePortControl=false
PodSecurity=false
- 1.22
ServiceLBNodePortControl=false
CustomCPUCFSQuotaPeriod=true
IPv6DualStack=false
- 1.21
ServiceLoadBalancerClass=true
CustomCPUCFSQuotaPeriod=true
IPv6DualStack=false
- 1.20
AllowInsecureBackendProxy=false
CustomCPUCFSQuotaPeriod=true
- 1.19
RuntimeClass=false
CustomCPUCFSQuotaPeriod=true
AllowInsecureBackendProxy=false
SCTPSupport=false
ServiceAppProtocol=false
- 1.18
RuntimeClass=false
CustomCPUCFSQuotaPeriod=true
AllowInsecureBackendProxy=false