feat: proxy mode use traffic-manager pod image (#635)

This commit is contained in:
naison
2025-06-10 19:02:04 +08:00
committed by GitHub
parent bfed866c04
commit 507da8a44c
21 changed files with 130 additions and 93 deletions

View File

@@ -3,7 +3,6 @@ package controlplane
import (
"context"
"encoding/json"
"fmt"
"math"
"math/rand"
"os"
@@ -49,7 +48,7 @@ func (p *Processor) newVersion() string {
func (p *Processor) ProcessFile(file NotifyMessage) error {
configList, err := ParseYaml(file.FilePath)
if err != nil {
p.logger.Errorf("error parsing yaml file: %v", err)
p.logger.Errorf("failed to parse config file: %v", err)
return err
}
enableIPv6, _ := util.DetectSupportIPv6()
@@ -57,14 +56,21 @@ func (p *Processor) ProcessFile(file NotifyMessage) error {
if len(config.Uid) == 0 {
continue
}
var marshal []byte
marshal, err = json.Marshal(config)
if err != nil {
p.logger.Errorf("failed to marshal config: %v", err)
return err
}
uid := util.GenEnvoyUID(config.Namespace, config.Uid)
lastConfig, ok := p.expireCache.Get(uid)
if ok && reflect.DeepEqual(lastConfig.(*Virtual), config) {
marshal, _ := json.Marshal(config)
p.logger.Infof("config are same, not needs to update, config: %s", string(marshal))
p.logger.Infof("not needs to update, config: %s", string(marshal))
continue
}
p.logger.Infof("update config, version %d, config %v", p.version, config)
p.logger.Infof("update config, version: %d, config: %s", p.version, marshal)
listeners, clusters, routes, endpoints := config.To(enableIPv6, p.logger)
resources := map[resource.Type][]types.Resource{
@@ -75,20 +81,20 @@ func (p *Processor) ProcessFile(file NotifyMessage) error {
resource.RuntimeType: {}, // runtimes
resource.SecretType: {}, // secrets
}
var snapshot *cache.Snapshot
snapshot, err = cache.NewSnapshot(p.newVersion(), resources)
if err != nil {
p.logger.Errorf("snapshot inconsistency: %v, err: %v", snapshot, err)
p.logger.Errorf("failed to snapshot inconsistency: %v", err)
return err
}
if err = snapshot.Consistent(); err != nil {
p.logger.Errorf("snapshot inconsistency: %v, err: %v", snapshot, err)
p.logger.Errorf("failed to snapshot inconsistency: %v", err)
return err
}
p.logger.Infof("will serve snapshot %+v, nodeID: %s", snapshot, uid)
if err = p.cache.SetSnapshot(context.Background(), uid, snapshot); err != nil {
err = p.cache.SetSnapshot(context.Background(), uid, snapshot)
if err != nil {
p.logger.Errorf("snapshot error %q for %v", err, snapshot)
return err
}
@@ -103,7 +109,7 @@ func ParseYaml(file string) ([]*Virtual, error) {
yamlFile, err := os.ReadFile(file)
if err != nil {
return nil, fmt.Errorf("Error reading YAML file: %s\n", err)
return nil, err
}
err = yaml.Unmarshal(yamlFile, &virtualList)

View File

@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"net"
"time"
clusterservice "github.com/envoyproxy/go-control-plane/envoy/service/cluster/v3"
discoverygrpc "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
@@ -14,6 +15,7 @@ import (
secretservice "github.com/envoyproxy/go-control-plane/envoy/service/secret/v3"
serverv3 "github.com/envoyproxy/go-control-plane/pkg/server/v3"
"google.golang.org/grpc"
"google.golang.org/grpc/keepalive"
plog "github.com/wencaiwulue/kubevpn/v2/pkg/log"
)
@@ -23,8 +25,17 @@ const (
)
func RunServer(ctx context.Context, server serverv3.Server, port uint) error {
grpcServer := grpc.NewServer(grpc.MaxConcurrentStreams(grpcMaxConcurrentStreams))
grpcOpts := []grpc.ServerOption{
grpc.MaxConcurrentStreams(grpcMaxConcurrentStreams),
grpc.KeepaliveParams(keepalive.ServerParameters{
Time: 15 * time.Second,
Timeout: 5 * time.Second,
}),
grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{
MinTime: 15 * time.Second,
PermitWithoutStream: true,
})}
grpcServer := grpc.NewServer(grpcOpts...)
var lc net.ListenConfig
listener, err := lc.Listen(ctx, "tcp", fmt.Sprintf(":%d", port))
if err != nil {