mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/kube-vip/kube-vip.git
synced 2026-09-20 08:03:47 +08:00
Revert "feat: add support for BGP unnumbered peers (#1506)"
This reverts commit 7d33c747ff.
Signed-off-by: Marcel Fest <marcel.fest@telekom.de>
This commit is contained in:
@@ -13,7 +13,6 @@ import (
|
||||
api "github.com/osrg/gobgp/v3/api"
|
||||
|
||||
"github.com/kube-vip/kube-vip/pkg/utils"
|
||||
"github.com/osrg/gobgp/v3/pkg/config/oc"
|
||||
"github.com/osrg/gobgp/v3/pkg/server"
|
||||
"google.golang.org/protobuf/types/known/anypb"
|
||||
)
|
||||
@@ -22,10 +21,9 @@ import (
|
||||
func (b *Server) AddPeer(ctx context.Context, peer kubevip.BGPPeer) (err error) {
|
||||
p := &api.Peer{
|
||||
Conf: &api.PeerConf{
|
||||
NeighborAddress: peer.Address,
|
||||
PeerAsn: peer.AS,
|
||||
NeighborInterface: peer.Interface,
|
||||
AuthPassword: peer.Password,
|
||||
NeighborAddress: peer.Address,
|
||||
PeerAsn: peer.AS,
|
||||
AuthPassword: peer.Password,
|
||||
},
|
||||
|
||||
Timers: &api.Timers{
|
||||
@@ -49,17 +47,6 @@ func (b *Server) AddPeer(ctx context.Context, peer kubevip.BGPPeer) (err error)
|
||||
},
|
||||
}
|
||||
|
||||
if peer.Interface != "" {
|
||||
neighborAddress, err := oc.GetIPv6LinkLocalNeighborAddress(peer.Interface)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get link-local address of interface %s: %w", peer.Interface, err)
|
||||
}
|
||||
|
||||
p.State = &api.PeerState{
|
||||
NeighborAddress: neighborAddress,
|
||||
}
|
||||
}
|
||||
|
||||
if b.c.MpbgpNexthop != "" {
|
||||
p.AfiSafis = []*api.AfiSafi{
|
||||
{
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package kubevip
|
||||
package bgp
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/kube-vip/kube-vip/pkg/kubevip"
|
||||
)
|
||||
|
||||
func TestParseBGPPeerConfig(t *testing.T) {
|
||||
@@ -12,13 +14,13 @@ func TestParseBGPPeerConfig(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
wantBgpPeers []BGPPeer
|
||||
wantBgpPeers []kubevip.BGPPeer
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "IPv4, default port",
|
||||
args: args{config: "192.168.0.10:65000::false,192.168.0.11:65000::false"},
|
||||
wantBgpPeers: []BGPPeer{
|
||||
wantBgpPeers: []kubevip.BGPPeer{
|
||||
{Address: "192.168.0.10", Port: 179, AS: 65000, MultiHop: false},
|
||||
{Address: "192.168.0.11", Port: 179, AS: 65000, MultiHop: false},
|
||||
},
|
||||
@@ -26,7 +28,7 @@ func TestParseBGPPeerConfig(t *testing.T) {
|
||||
{
|
||||
name: "IPv4, different port",
|
||||
args: args{config: "192.168.0.10:65000::false:180,192.168.0.11:65000::false:190"},
|
||||
wantBgpPeers: []BGPPeer{
|
||||
wantBgpPeers: []kubevip.BGPPeer{
|
||||
{Address: "192.168.0.10", Port: 180, AS: 65000, MultiHop: false},
|
||||
{Address: "192.168.0.11", Port: 190, AS: 65000, MultiHop: false},
|
||||
},
|
||||
@@ -34,22 +36,14 @@ func TestParseBGPPeerConfig(t *testing.T) {
|
||||
{
|
||||
name: "IPv6, multi-protocol",
|
||||
args: args{config: "[fd00:1111:2222:3333:c7d9:7235:6bf7:5d52]:65501::false/mpbgp_nexthop=auto_sourceif"},
|
||||
wantBgpPeers: []BGPPeer{
|
||||
wantBgpPeers: []kubevip.BGPPeer{
|
||||
{Address: "fd00:1111:2222:3333:c7d9:7235:6bf7:5d52", Port: 179, AS: 65501, MultiHop: false, MpbgpNexthop: "auto_sourceif"},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Unnumbered",
|
||||
args: args{config: "unnumbered:eth0,unnumbered:eth1:65000::true/mpbgp_nexthop=auto_sourceif"},
|
||||
wantBgpPeers: []BGPPeer{
|
||||
{Interface: "eth0", MultiHop: false},
|
||||
{Interface: "eth1", AS: 65000, MultiHop: true, MpbgpNexthop: "auto_sourceif"},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
gotBgpPeers, err := ParseBGPPeerConfig(tt.args.config)
|
||||
gotBgpPeers, err := kubevip.ParseBGPPeerConfig(tt.args.config)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("ParseBGPPeerConfig() error = %v, wantErr %v", err, tt.wantErr)
|
||||
return
|
||||
@@ -16,7 +16,6 @@ import (
|
||||
type BGPPeer struct {
|
||||
Address string
|
||||
Port uint16
|
||||
Interface string
|
||||
AS uint32
|
||||
Password string
|
||||
MultiHop bool
|
||||
@@ -66,7 +65,6 @@ func ParseBGPPeerConfig(config string) (bgpPeers []BGPPeer, err error) {
|
||||
continue
|
||||
}
|
||||
isV6Peer := peerStr[0] == '['
|
||||
isUnnumberedPeer := strings.HasPrefix(peerStr, "unnumbered:")
|
||||
|
||||
address := ""
|
||||
if isV6Peer {
|
||||
@@ -76,29 +74,20 @@ func ParseBGPPeerConfig(config string) (bgpPeers []BGPPeer, err error) {
|
||||
}
|
||||
address = peerStr[1:addressEndPos]
|
||||
peerStr = peerStr[addressEndPos+1:]
|
||||
} else if isUnnumberedPeer {
|
||||
unnumberedEndPos := strings.IndexByte(peerStr, ':')
|
||||
peerStr = peerStr[unnumberedEndPos+1:]
|
||||
}
|
||||
|
||||
peer := strings.Split(peerStr, ":")
|
||||
if len(peer) < 2 && !isUnnumberedPeer {
|
||||
if len(peer) < 2 {
|
||||
return nil, fmt.Errorf("mandatory peering params <host>:<AS> incomplete")
|
||||
}
|
||||
|
||||
iface := ""
|
||||
if isUnnumberedPeer {
|
||||
iface = peer[0]
|
||||
} else if !isV6Peer {
|
||||
if !isV6Peer {
|
||||
address = peer[0]
|
||||
}
|
||||
|
||||
var ASNumber uint64
|
||||
if len(peer) >= 2 {
|
||||
ASNumber, err = strconv.ParseUint(peer[1], 10, 32)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("BGP Peer AS format error [%s]", peer[1])
|
||||
}
|
||||
ASNumber, err := strconv.ParseUint(peer[1], 10, 32)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("BGP Peer AS format error [%s]", peer[1])
|
||||
}
|
||||
|
||||
password := ""
|
||||
@@ -118,9 +107,9 @@ func ParseBGPPeerConfig(config string) (bgpPeers []BGPPeer, err error) {
|
||||
if len(peer) >= 5 {
|
||||
port, err = strconv.ParseUint(peer[4], 10, 16)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("BGP Peer Port format error [%s]", peer[4])
|
||||
return nil, fmt.Errorf("BGP Peer AS format error [%s]", peer[1])
|
||||
}
|
||||
} else if !isUnnumberedPeer {
|
||||
} else {
|
||||
port = 179
|
||||
}
|
||||
|
||||
@@ -144,11 +133,9 @@ func ParseBGPPeerConfig(config string) (bgpPeers []BGPPeer, err error) {
|
||||
}
|
||||
|
||||
peerConfig := BGPPeer{
|
||||
Address: address,
|
||||
//nolint:gosec // previously parsed into uint32
|
||||
Address: address,
|
||||
AS: uint32(ASNumber),
|
||||
Port: uint16(port),
|
||||
Interface: iface,
|
||||
Password: password,
|
||||
MultiHop: multiHop,
|
||||
MpbgpNexthop: mpbgpNexthop,
|
||||
|
||||
@@ -229,51 +229,5 @@ var _ = Describe("kube-vip BGP when deployed as a regular pod", Ordered, func()
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
Describe("kube-vip IPv6 BGP unnumbered functionality", Ordered, func() {
|
||||
var (
|
||||
client kubernetes.Interface
|
||||
clusterName string
|
||||
tempDirPath string
|
||||
)
|
||||
|
||||
BeforeAll(func() {
|
||||
networking := &kindconfigv1alpha4.Networking{
|
||||
IPFamily: kindconfigv1alpha4.IPv6Family,
|
||||
}
|
||||
|
||||
var err error
|
||||
tempDirPath, err = os.MkdirTemp(tempDirPathRoot, "kube-vip-test-bgp-v6")
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
clusterName, client, _ = prepareClusterForDS(tempDirPath, "bgp-ds-v6", imagePath, k8sImagePath,
|
||||
logger, networking, 1, nil)
|
||||
})
|
||||
|
||||
AfterAll(func() {
|
||||
Eventually(func() error {
|
||||
return e2e.GetLogs(ctx, client, tempDirPath)
|
||||
}, "60s", "5s").Should(Succeed())
|
||||
cleanupCluster(clusterName, ConfigMtx, logger)
|
||||
})
|
||||
|
||||
It(clusterName+" exits gracefully when unnumbered BGP peers are configured", func() {
|
||||
manifestValues := &e2e.KubevipManifestValues{
|
||||
Mode: Mode,
|
||||
ControlPlaneEnable: "true",
|
||||
VipElectionEnable: "false",
|
||||
ImagePath: imagePath,
|
||||
ConfigPath: configPath,
|
||||
SvcEnable: "true",
|
||||
SvcElectionEnable: "false",
|
||||
EnableEndpointslices: "true",
|
||||
EnableNodeLabeling: "false",
|
||||
BGPPeers: "unnumbered:eth0",
|
||||
BGPAS: 2,
|
||||
}
|
||||
|
||||
testDS(ctx, manifestValues, client, utils.IPv6Family, clusterName)
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user