You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**Expiration/certificate lifetime** - The recommended maximum lifetime is 30 days.
628
+
**CA bit allowed/disallowed** - not recommended.
629
+
630
+
#### Kubelet and KCM API discovery
631
+
632
+
Functionalities in both the kubelet and KCM depend on the presence of the ClusterTrustBundle
633
+
API. If the `ClusterTrustBundleProjection` (kubelet) and `ClusterTrustBundle` (KCM) feature
634
+
gates are enabled, the kubelet and the KCM perform API discovery at startup to check for the
635
+
API presence at the version they need. If the API is not present, neither kubelet nor KCM
636
+
will enable the new behavior, and the check won't be performed until they restart again.
637
+
638
+
If the API gets disabled on the kube-apiserver side, both the kubelet and KCM must be
639
+
restarted in order for the feature to be disabled there, too.
640
+
566
641
### Test Plan
567
642
568
643
[x] I/we understand the owners of the involved components may require updates to
@@ -739,15 +814,44 @@ in back-to-back releases.
739
814
740
815
### Upgrade / Downgrade Strategy
741
816
742
-
At present, there are no upgrade / downgrade concerns. The ClusterTrustBundle
743
-
feature gate controls overall availability of the feature.
817
+
The feature is gated by these feature flags:
818
+
- kube-apiserver
819
+
- `ClusterTrustBundle`controls availability of the ClusterTrustBundle API and
820
+
presence of the relevant rules in cluster roles for the kubelet and KCM.
821
+
- `ClusterTrustBundleProjection`controls availability of the `ClusterTrustBundle`
822
+
projected volume source in the Pod API.
823
+
- kubelet
824
+
- `ClusterTrustBundleProjection`controls the availability of the kubelet being
825
+
able to mount the volumes. If disabled, kubelet will error out on any attempt to
826
+
mount a ClusterTrustBundle projected volume.
827
+
- KCM - `ClusterTrustBundle` controls the availability of the kube-apiserver-serving's
828
+
signer ClusterTrustBundle.
829
+
830
+
The proper order at which the feature should be enabled is to start with the
831
+
kube-apiserver's feature flags. Aside from enabling the API, the `ClusterTrustBundle`
832
+
feature gate also creates the necessary rules in the `system:node` cluster role.
833
+
834
+
Once the kube-apiserver feature gates are enabled, the order of enabling the feature
835
+
at kubelet or KCM does not matter.
744
836
745
837
### Version Skew Strategy
746
838
747
-
Both kubelet and kube-apiserver will need to be at 1.29 for the full featureset
748
-
to be present. If only kube-apiserver is at 1.29 and kubelet is lower, then the
749
-
the pod mounting feature will be cleanly unavailable, but all other aspects of
750
-
the feature will work.
839
+
The ClusterTrustBundle volume projection was implemented in 1.29 and kubelet would fail to mount CTB
840
+
volumes if it was requested via the Pod API while the feature gate is disabled on
841
+
kubelet side. This means that pods will fail to become ready in version-skewed environments where the
842
+
`ClusterTrustBundleProjection`kubelet feature gate is disabled, independently of the
843
+
API version.
844
+
845
+
If the `ClusterTrustBundleProjection` kubelet feature gate is enabled but the API is at a different
846
+
version than the kubelet expects, the kubelet will behave as if the feature gate was disabled.
847
+
This will cause pods trying to mount a ClusterTrustBundle to fail to become ready as kubelet
848
+
won't be able to create the mount. If the API eventually appears at the desired version, the kubelet
849
+
must be restarted in order to enable the new behavior.
850
+
851
+
Enabling the `ClusterTrustBundle` feature gate at KCM while a different-than-KCM-expected
852
+
API version is being served will make the KCM to act as if the feature gate was disabled.
853
+
If the API eventually appears at the desired version, the KCM must be restarted in order
854
+
to enable the new behavior.
751
855
752
856
## Production Readiness Review Questionnaire
753
857
@@ -887,6 +991,7 @@ Recall that end users cannot usually observe component logs or access metrics.
887
991
- [x] Other (treat as last resort)
888
992
- Users can see that pods that use ClusterTrustBundle projected volume sources are able to begin running.
889
993
- This doesn't cover showing that running pods are having their mounted trust bundles updated properly, so we need to think about how to cover them with events or conditions.
994
+
- Users can see that a ClusterTrustBundle for the signer `kubernetes.io/kube-apiserver-serving` exists in the cluster
890
995
891
996
###### What are the reasonable SLOs (Service Level Objectives) for the enhancement?
892
997
@@ -935,7 +1040,7 @@ None beyond kube-apiserver.
935
1040
Yes.
936
1041
937
1042
Kubelet will open a watch on ClusterTrustBundle objects. This watch will be
938
-
low-throughput.
1043
+
low-throughput. A similar watch is also opened from the KCM side.
939
1044
940
1045
###### Will enabling / using this feature result in introducing new API types?
941
1046
@@ -947,8 +1052,8 @@ No.
947
1052
948
1053
###### Will enabling / using this feature result in increasing size or count of the existing API objects?
949
1054
950
-
No, except for the additional pod fields that the user sets to make use of the
951
-
feature.
1055
+
A new API ClusterTrustBundle API object is created for the new `kubernetes.io/kube-apiserver-serving` signer, and there are
1056
+
additional pod fields that the user sets to make use of the feature.
952
1057
953
1058
###### Will enabling / using this feature result in increasing time taken by any operations covered by existing SLIs/SLOs?
0 commit comments