feat: support connect one namespace but proxy workload in another namespace (#496)

This commit is contained in:
naison
2025-03-30 11:50:11 +08:00
committed by GitHub
parent 08bcbe1611
commit a030dc582b
31 changed files with 545 additions and 615 deletions

View File

@@ -38,9 +38,10 @@ import (
)
type Virtual struct {
Uid string // group.resource.name
Ports []ContainerPort
Rules []*Rule
Namespace string
Uid string // group.resource.name
Ports []ContainerPort
Rules []*Rule
}
type ContainerPort struct {
@@ -100,7 +101,7 @@ func (a *Virtual) To(enableIPv6 bool, logger *log.Logger) (
for _, port := range a.Ports {
isFargateMode := port.EnvoyListenerPort != 0
listenerName := fmt.Sprintf("%s_%v_%s", a.Uid, util.If(isFargateMode, port.EnvoyListenerPort, port.ContainerPort), port.Protocol)
listenerName := fmt.Sprintf("%s_%s_%v_%s", a.Namespace, a.Uid, util.If(isFargateMode, port.EnvoyListenerPort, port.ContainerPort), port.Protocol)
routeName := listenerName
listeners = append(listeners, ToListener(listenerName, routeName, util.If(isFargateMode, port.EnvoyListenerPort, port.ContainerPort), port.Protocol, isFargateMode))

View File

@@ -57,7 +57,8 @@ func (p *Processor) ProcessFile(file NotifyMessage) error {
if len(config.Uid) == 0 {
continue
}
lastConfig, ok := p.expireCache.Get(config.Uid)
uid := fmt.Sprintf("%s_%s", config.Namespace, config.Uid)
lastConfig, ok := p.expireCache.Get(uid)
if ok && reflect.DeepEqual(lastConfig.(*Virtual), config) {
marshal, _ := json.Marshal(config)
p.logger.Debugf("config are same, not needs to update, config: %s", string(marshal))
@@ -86,13 +87,13 @@ func (p *Processor) ProcessFile(file NotifyMessage) error {
p.logger.Errorf("snapshot inconsistency: %v, err: %v", snapshot, err)
return err
}
p.logger.Debugf("will serve snapshot %+v, nodeID: %s", snapshot, config.Uid)
if err = p.cache.SetSnapshot(context.Background(), config.Uid, snapshot); err != nil {
p.logger.Debugf("will serve snapshot %+v, nodeID: %s", snapshot, uid)
if err = p.cache.SetSnapshot(context.Background(), uid, snapshot); err != nil {
p.logger.Errorf("snapshot error %q for %v", err, snapshot)
return err
}
p.expireCache.Set(config.Uid, config, time.Minute*5)
p.expireCache.Set(uid, config, time.Minute*5)
}
return nil
}