summaryrefslogtreecommitdiffhomepage
path: root/cmd/k8s-operator/proxygroup.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/k8s-operator/proxygroup.go')
-rw-r--r--cmd/k8s-operator/proxygroup.go49
1 files changed, 38 insertions, 11 deletions
diff --git a/cmd/k8s-operator/proxygroup.go b/cmd/k8s-operator/proxygroup.go
index 4b17d3470..112e5e2b0 100644
--- a/cmd/k8s-operator/proxygroup.go
+++ b/cmd/k8s-operator/proxygroup.go
@@ -452,7 +452,7 @@ func (r *ProxyGroupReconciler) ensureConfigSecretsCreated(ctx context.Context, p
for i := range pgReplicas(pg) {
cfgSecret := &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
- Name: fmt.Sprintf("%s-%d-config", pg.Name, i),
+ Name: pgConfigSecretName(pg.Name, i),
Namespace: r.tsNamespace,
Labels: pgSecretLabels(pg.Name, "config"),
OwnerReferences: pgOwnerReference(pg),
@@ -461,7 +461,7 @@ func (r *ProxyGroupReconciler) ensureConfigSecretsCreated(ctx context.Context, p
var existingCfgSecret *corev1.Secret // unmodified copy of secret
if err := r.Get(ctx, client.ObjectKeyFromObject(cfgSecret), cfgSecret); err == nil {
- logger.Debugf("secret %s/%s already exists", cfgSecret.GetNamespace(), cfgSecret.GetName())
+ logger.Debugf("Secret %s/%s already exists", cfgSecret.GetNamespace(), cfgSecret.GetName())
existingCfgSecret = cfgSecret.DeepCopy()
} else if !apierrors.IsNotFound(err) {
return "", err
@@ -469,7 +469,7 @@ func (r *ProxyGroupReconciler) ensureConfigSecretsCreated(ctx context.Context, p
var authKey string
if existingCfgSecret == nil {
- logger.Debugf("creating authkey for new ProxyGroup proxy")
+ logger.Debugf("Creating authkey for new ProxyGroup proxy")
tags := pg.Spec.Tags.Stringify()
if len(tags) == 0 {
tags = r.defaultTags
@@ -490,7 +490,7 @@ func (r *ProxyGroupReconciler) ensureConfigSecretsCreated(ctx context.Context, p
if err != nil {
return "", fmt.Errorf("error marshalling tailscaled config: %w", err)
}
- mak.Set(&cfgSecret.StringData, tsoperator.TailscaledConfigFileName(cap), string(cfgJSON))
+ mak.Set(&cfgSecret.Data, tsoperator.TailscaledConfigFileName(cap), cfgJSON)
}
// The config sha256 sum is a value for a hash annotation used to trigger
@@ -520,12 +520,14 @@ func (r *ProxyGroupReconciler) ensureConfigSecretsCreated(ctx context.Context, p
}
if existingCfgSecret != nil {
- logger.Debugf("patching the existing ProxyGroup config Secret %s", cfgSecret.Name)
- if err := r.Patch(ctx, cfgSecret, client.MergeFrom(existingCfgSecret)); err != nil {
- return "", err
+ if !apiequality.Semantic.DeepEqual(existingCfgSecret, cfgSecret) {
+ logger.Debugf("Updating the existing ProxyGroup config Secret %s", cfgSecret.Name)
+ if err := r.Update(ctx, cfgSecret); err != nil {
+ return "", err
+ }
}
} else {
- logger.Debugf("creating a new config Secret %s for the ProxyGroup", cfgSecret.Name)
+ logger.Debugf("Creating a new config Secret %s for the ProxyGroup", cfgSecret.Name)
if err := r.Create(ctx, cfgSecret); err != nil {
return "", err
}
@@ -596,10 +598,35 @@ func pgTailscaledConfig(pg *tsapi.ProxyGroup, class *tsapi.ProxyClass, idx int32
conf.AuthKey = key
}
capVerConfigs := make(map[tailcfg.CapabilityVersion]ipn.ConfigVAlpha)
+
+ // AdvertiseServices config is set by ingress-pg-reconciler, so make sure we
+ // don't overwrite it here.
+ if err := copyAdvertiseServicesConfig(conf, oldSecret, 106); err != nil {
+ return nil, err
+ }
capVerConfigs[106] = *conf
return capVerConfigs, nil
}
+func copyAdvertiseServicesConfig(conf *ipn.ConfigVAlpha, oldSecret *corev1.Secret, capVer tailcfg.CapabilityVersion) error {
+ if oldSecret == nil {
+ return nil
+ }
+
+ oldConfB := oldSecret.Data[tsoperator.TailscaledConfigFileName(capVer)]
+ if len(oldConfB) == 0 {
+ return nil
+ }
+
+ var oldConf ipn.ConfigVAlpha
+ if err := json.Unmarshal(oldConfB, &oldConf); err != nil {
+ return fmt.Errorf("error unmarshalling existing config: %w", err)
+ }
+ conf.AdvertiseServices = oldConf.AdvertiseServices
+
+ return nil
+}
+
func (r *ProxyGroupReconciler) validate(_ *tsapi.ProxyGroup) error {
return nil
}
@@ -620,7 +647,7 @@ func (r *ProxyGroupReconciler) getNodeMetadata(ctx context.Context, pg *tsapi.Pr
return nil, fmt.Errorf("unexpected secret %s was labelled as owned by the ProxyGroup %s: %w", secret.Name, pg.Name, err)
}
- id, dnsName, ok, err := getNodeMetadata(ctx, &secret)
+ prefs, ok, err := getDevicePrefs(&secret)
if err != nil {
return nil, err
}
@@ -631,8 +658,8 @@ func (r *ProxyGroupReconciler) getNodeMetadata(ctx context.Context, pg *tsapi.Pr
nm := nodeMetadata{
ordinal: ordinal,
stateSecret: &secret,
- tsID: id,
- dnsName: dnsName,
+ tsID: prefs.Config.NodeID,
+ dnsName: prefs.Config.UserProfile.LoginName,
}
pod := &corev1.Pod{}
if err := r.Get(ctx, client.ObjectKey{Namespace: r.tsNamespace, Name: secret.Name}, pod); err != nil && !apierrors.IsNotFound(err) {