mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-13 22:47:30 +00:00
cmd/{containerboot,k8s-operator}: use state Secret for checking device auth (#16328)
Previously, the operator checked the ProxyGroup status fields for information on how many of the proxies had successfully authed. Use their state Secrets instead as a more reliable source of truth. containerboot has written device_fqdn and device_ips keys to the state Secret since inception, and pod_uid since 1.78.0, so there's no need to use the API for that data. Read it from the state Secret for consistency. However, to ensure we don't read data from a previous run of containerboot, make sure we reset containerboot's state keys on startup. One other knock-on effect of that is ProxyGroups can briefly be marked not Ready while a Pod is restarting. Introduce a new ProxyGroupAvailable condition to more accurately reflect when downstream controllers can implement flows that rely on a ProxyGroup having at least 1 proxy Pod running. Fixes #16327 Change-Id: I026c18e9d23e87109a471a87b8e4fb6271716a66 Signed-off-by: Tom Proctor <tomhjp@users.noreply.github.com>
This commit is contained in:
@@ -205,11 +205,12 @@ type ConnectorStatus struct {
|
||||
type ConditionType string
|
||||
|
||||
const (
|
||||
ConnectorReady ConditionType = `ConnectorReady`
|
||||
ProxyClassReady ConditionType = `ProxyClassReady`
|
||||
ProxyGroupReady ConditionType = `ProxyGroupReady`
|
||||
ProxyReady ConditionType = `TailscaleProxyReady` // a Tailscale-specific condition type for corev1.Service
|
||||
RecorderReady ConditionType = `RecorderReady`
|
||||
ConnectorReady ConditionType = `ConnectorReady`
|
||||
ProxyClassReady ConditionType = `ProxyClassReady`
|
||||
ProxyGroupReady ConditionType = `ProxyGroupReady` // All proxy Pods running.
|
||||
ProxyGroupAvailable ConditionType = `ProxyGroupAvailable` // At least one proxy Pod running.
|
||||
ProxyReady ConditionType = `TailscaleProxyReady` // a Tailscale-specific condition type for corev1.Service
|
||||
RecorderReady ConditionType = `RecorderReady`
|
||||
// EgressSvcValid gets set on a user configured ExternalName Service that defines a tailnet target to be exposed
|
||||
// on a ProxyGroup.
|
||||
// Set to true if the user provided configuration is valid.
|
||||
|
@@ -137,8 +137,16 @@ func ProxyClassIsReady(pc *tsapi.ProxyClass) bool {
|
||||
}
|
||||
|
||||
func ProxyGroupIsReady(pg *tsapi.ProxyGroup) bool {
|
||||
return proxyGroupCondition(pg, tsapi.ProxyGroupReady)
|
||||
}
|
||||
|
||||
func ProxyGroupAvailable(pg *tsapi.ProxyGroup) bool {
|
||||
return proxyGroupCondition(pg, tsapi.ProxyGroupAvailable)
|
||||
}
|
||||
|
||||
func proxyGroupCondition(pg *tsapi.ProxyGroup, condType tsapi.ConditionType) bool {
|
||||
idx := xslices.IndexFunc(pg.Status.Conditions, func(cond metav1.Condition) bool {
|
||||
return cond.Type == string(tsapi.ProxyGroupReady)
|
||||
return cond.Type == string(condType)
|
||||
})
|
||||
if idx == -1 {
|
||||
return false
|
||||
|
Reference in New Issue
Block a user