Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Endpoint plural IP fields instead of singular fields #3282

Merged
merged 4 commits into from
Jan 23, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pkg/apis/submariner.io/v1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,21 @@ type EndpointSpec struct {
// +kubebuilder:validation:MinLength=1
ClusterID string `json:"cluster_id"`
CableName string `json:"cable_name"`
// Deprecated: Get/SetHealthCheckIP() or, if necessary, HealthCheckIPs
// +optional
HealthCheckIP string `json:"healthCheckIP,omitempty"`
// +kubebuilder:validation:MaxItems:=2
// +optional
HealthCheckIPs []string `json:"healthCheckIPs,omitempty"`
Hostname string `json:"hostname"`
Subnets []string `json:"subnets"`
// Deprecated: Use Get/SetPrivateIP() or, if necessary, PrivateIPs
// +optional
PrivateIP string `json:"private_ip,omitempty"`
// +kubebuilder:validation:MaxItems:=2
// +optional
PrivateIPs []string `json:"privateIPs,omitempty"`
// Deprecated: Set/SetPublicIP() or, if necessary, PublicIPs
// +optional
PublicIP string `json:"public_ip,omitempty"`
// +kubebuilder:validation:MaxItems:=2
Expand Down
21 changes: 11 additions & 10 deletions pkg/cable/libreswan/libreswan.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import (
"github.com/submariner-io/submariner/pkg/natdiscovery"
"github.com/submariner-io/submariner/pkg/netlink"
"github.com/submariner-io/submariner/pkg/types"
k8snet "k8s.io/utils/net"
logf "sigs.k8s.io/controller-runtime/pkg/log"
)

Expand Down Expand Up @@ -309,7 +310,7 @@ func extractSubnets(endpoint *subv1.EndpointSpec) []string {
subnets := make([]string, 0, len(endpoint.Subnets))

for _, subnet := range endpoint.Subnets {
if !strings.HasPrefix(subnet, endpoint.PrivateIP+"/") {
if !strings.HasPrefix(subnet, endpoint.GetPrivateIP(k8snet.IPv4)+"/") {
subnets = append(subnets, subnet)
}
}
Expand Down Expand Up @@ -415,8 +416,8 @@ func (i *libreswan) bidirectionalConnectToEndpoint(connectionName string, endpoi
leftSubnet, rightSubnet string, rightNATTPort int32,
) error {
// Identifiers are used for authentication, they’re always the private IPs
localEndpointIdentifier := i.localEndpoint.PrivateIP
remoteEndpointIdentifier := endpointInfo.Endpoint.Spec.PrivateIP
localEndpointIdentifier := i.localEndpoint.GetPrivateIP(k8snet.IPv4)
remoteEndpointIdentifier := endpointInfo.Endpoint.Spec.GetPrivateIP(k8snet.IPv4)

args := []string{}

Expand All @@ -429,7 +430,7 @@ func (i *libreswan) bidirectionalConnectToEndpoint(connectionName string, endpoi

// Left-hand side
"--id", localEndpointIdentifier,
hostArg, i.localEndpoint.PrivateIP,
hostArg, i.localEndpoint.GetPrivateIP(k8snet.IPv4),
clientArg, leftSubnet,

ikeportArg, i.ipSecNATTPort,
Expand Down Expand Up @@ -465,8 +466,8 @@ func toEndpointIdentifier(ip string, lsi, rsi int) string {
func (i *libreswan) serverConnectToEndpoint(connectionName string, endpointInfo *natdiscovery.NATEndpointInfo,
leftSubnet, rightSubnet string, lsi, rsi int,
) error {
localEndpointIdentifier := toEndpointIdentifier(i.localEndpoint.PrivateIP, lsi, rsi)
remoteEndpointIdentifier := toEndpointIdentifier(endpointInfo.Endpoint.Spec.PrivateIP, rsi, lsi)
localEndpointIdentifier := toEndpointIdentifier(i.localEndpoint.GetPrivateIP(k8snet.IPv4), lsi, rsi)
remoteEndpointIdentifier := toEndpointIdentifier(endpointInfo.Endpoint.Spec.GetPrivateIP(k8snet.IPv4), rsi, lsi)

args := []string{}

Expand All @@ -479,7 +480,7 @@ func (i *libreswan) serverConnectToEndpoint(connectionName string, endpointInfo

// Left-hand side.
"--id", localEndpointIdentifier,
hostArg, i.localEndpoint.PrivateIP,
hostArg, i.localEndpoint.GetPrivateIP(k8snet.IPv4),
clientArg, leftSubnet,

ikeportArg, i.ipSecNATTPort,
Expand Down Expand Up @@ -508,8 +509,8 @@ func (i *libreswan) clientConnectToEndpoint(connectionName string, endpointInfo
leftSubnet, rightSubnet string, rightNATTPort int32, lsi, rsi int,
) error {
// Identifiers are used for authentication, they’re always the private IPs.
localEndpointIdentifier := toEndpointIdentifier(i.localEndpoint.PrivateIP, lsi, rsi)
remoteEndpointIdentifier := toEndpointIdentifier(endpointInfo.Endpoint.Spec.PrivateIP, rsi, lsi)
localEndpointIdentifier := toEndpointIdentifier(i.localEndpoint.GetPrivateIP(k8snet.IPv4), lsi, rsi)
remoteEndpointIdentifier := toEndpointIdentifier(endpointInfo.Endpoint.Spec.GetPrivateIP(k8snet.IPv4), rsi, lsi)

args := []string{}

Expand All @@ -522,7 +523,7 @@ func (i *libreswan) clientConnectToEndpoint(connectionName string, endpointInfo

// Left-hand side
"--id", localEndpointIdentifier,
hostArg, i.localEndpoint.PrivateIP,
hostArg, i.localEndpoint.GetPrivateIP(k8snet.IPv4),
clientArg, leftSubnet,

"--to",
Expand Down
55 changes: 28 additions & 27 deletions pkg/cable/libreswan/libreswan_internal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
"github.com/submariner-io/submariner/pkg/types"
dynamicfake "k8s.io/client-go/dynamic/fake"
"k8s.io/client-go/kubernetes/scheme"
k8snet "k8s.io/utils/net"
)

var _ = Describe("Libreswan", func() {
Expand Down Expand Up @@ -99,10 +100,10 @@ func testConnectToEndpoint() {
natInfo = &natdiscovery.NATEndpointInfo{
Endpoint: subv1.Endpoint{
Spec: subv1.EndpointSpec{
ClusterID: "east",
CableName: "submariner-cable-east-192-68-2-1",
PrivateIP: "192.68.2.1",
Subnets: []string{"20.0.0.0/16"},
ClusterID: "east",
CableName: "submariner-cable-east-192-68-2-1",
PrivateIPs: []string{"192.68.2.1"},
Subnets: []string{"20.0.0.0/16"},
},
},
UseIP: "172.93.2.1",
Expand All @@ -117,7 +118,7 @@ func testConnectToEndpoint() {
Expect(ip).To(Equal(natInfo.UseIP))

t.assertActiveConnection(natInfo)
t.cmdExecutor.AwaitCommand(nil, "whack", t.endpointSpec.PrivateIP, natInfo.UseIP,
t.cmdExecutor.AwaitCommand(nil, "whack", t.endpointSpec.GetPrivateIP(k8snet.IPv4), natInfo.UseIP,
t.endpointSpec.Subnets[0], natInfo.Endpoint.Spec.Subnets[0])
t.cmdExecutor.AwaitCommand(nil, "whack", "--initiate")
}
Expand All @@ -129,7 +130,7 @@ func testConnectToEndpoint() {
Expect(ip).To(Equal(natInfo.UseIP))

t.assertActiveConnection(natInfo)
t.cmdExecutor.AwaitCommand(nil, "whack", t.endpointSpec.PrivateIP, t.endpointSpec.Subnets[0],
t.cmdExecutor.AwaitCommand(nil, "whack", t.endpointSpec.GetPrivateIP(k8snet.IPv4), t.endpointSpec.Subnets[0],
natInfo.Endpoint.Spec.Subnets[0])
t.cmdExecutor.EnsureNoCommand("whack", "--initiate")
}
Expand Down Expand Up @@ -158,7 +159,7 @@ func testConnectToEndpoint() {
Expect(ip).To(Equal(natInfo.UseIP))

t.assertActiveConnection(natInfo)
t.cmdExecutor.AwaitCommand(nil, "whack", t.endpointSpec.PrivateIP, natInfo.UseIP,
t.cmdExecutor.AwaitCommand(nil, "whack", t.endpointSpec.GetPrivateIP(k8snet.IPv4), natInfo.UseIP,
t.endpointSpec.Subnets[0], natInfo.Endpoint.Spec.Subnets[0])
t.cmdExecutor.AwaitCommand(nil, "whack", "--initiate")
})
Expand Down Expand Up @@ -200,10 +201,10 @@ func testDisconnectFromEndpoint() {
natInfo1 := &natdiscovery.NATEndpointInfo{
Endpoint: subv1.Endpoint{
Spec: subv1.EndpointSpec{
ClusterID: "remote1",
CableName: "submariner-cable-remote1-192-68-2-1",
PrivateIP: "192.68.2.1",
Subnets: []string{"20.0.0.0/16"},
ClusterID: "remote1",
CableName: "submariner-cable-remote1-192-68-2-1",
PrivateIPs: []string{"192.68.2.1"},
Subnets: []string{"20.0.0.0/16"},
},
},
UseIP: "172.93.2.1",
Expand All @@ -215,10 +216,10 @@ func testDisconnectFromEndpoint() {
natInfo2 := &natdiscovery.NATEndpointInfo{
Endpoint: subv1.Endpoint{
Spec: subv1.EndpointSpec{
ClusterID: "remote2",
CableName: "submariner-cable-remote2-192-68-3-1",
PrivateIP: "192.68.3.1",
Subnets: []string{"30.0.0.0/16"},
ClusterID: "remote2",
CableName: "submariner-cable-remote2-192-68-3-1",
PrivateIPs: []string{"192.68.3.1"},
Subnets: []string{"30.0.0.0/16"},
},
},
UseIP: "173.93.2.1",
Expand Down Expand Up @@ -246,10 +247,10 @@ func testGetConnections() {
natInfo1 := &natdiscovery.NATEndpointInfo{
Endpoint: subv1.Endpoint{
Spec: subv1.EndpointSpec{
ClusterID: "remote1",
CableName: "submariner-cable-remote1-192-68-2-1",
PrivateIP: "192.68.2.1",
Subnets: []string{"20.0.0.0/16", "30.0.0.0/16"},
ClusterID: "remote1",
CableName: "submariner-cable-remote1-192-68-2-1",
PrivateIPs: []string{"192.68.2.1"},
Subnets: []string{"20.0.0.0/16", "30.0.0.0/16"},
},
},
UseIP: "172.93.2.1",
Expand All @@ -261,10 +262,10 @@ func testGetConnections() {
natInfo2 := &natdiscovery.NATEndpointInfo{
Endpoint: subv1.Endpoint{
Spec: subv1.EndpointSpec{
ClusterID: "remote2",
CableName: "submariner-cable-remote2-192-68-3-1",
PrivateIP: "192.68.3.1",
Subnets: []string{"11.0.0.0/16"},
ClusterID: "remote2",
CableName: "submariner-cable-remote2-192-68-3-1",
PrivateIPs: []string{"192.68.3.1"},
Subnets: []string{"11.0.0.0/16"},
},
},
UseIP: "173.93.3.1",
Expand Down Expand Up @@ -350,10 +351,10 @@ func newTestDriver() *testDriver {
BeforeEach(func() {
t.cmdExecutor = fakecommand.New()
t.endpointSpec = subv1.EndpointSpec{
ClusterID: "local",
CableName: "submariner-cable-local-192-68-1-1",
PrivateIP: "192.68.1.1",
Subnets: []string{"10.0.0.0/16"},
ClusterID: "local",
CableName: "submariner-cable-local-192-68-1-1",
PrivateIPs: []string{"192.68.1.1"},
Subnets: []string{"10.0.0.0/16"},
}
})

Expand Down
5 changes: 3 additions & 2 deletions pkg/cable/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ limitations under the License.
package cable

import (
"strings"
"time"

"github.com/prometheus/client_golang/prometheus"
Expand Down Expand Up @@ -136,10 +137,10 @@ func getLabels(cableDriverName string, localEndpoint, remoteEndpoint *submv1.End
cableDriverLabel: cableDriverName,
localClusterLabel: localEndpoint.ClusterID,
localHostnameLabel: localEndpoint.Hostname,
localEndpointIPLabel: localEndpoint.PublicIP,
localEndpointIPLabel: strings.Join(localEndpoint.PublicIPs, ","),
remoteClusterLabel: remoteEndpoint.ClusterID,
remoteHostnameLabel: remoteEndpoint.Hostname,
remoteEndpointIPLabel: remoteEndpoint.PublicIP,
remoteEndpointIPLabel: strings.Join(remoteEndpoint.PublicIPs, ","),
}
}

Expand Down
5 changes: 3 additions & 2 deletions pkg/cable/vxlan/vxlan.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
netlinkAPI "github.com/submariner-io/submariner/pkg/netlink"
"github.com/submariner-io/submariner/pkg/types"
"github.com/submariner-io/submariner/pkg/vxlan"
k8snet "k8s.io/utils/net"
logf "sigs.k8s.io/controller-runtime/pkg/log"
)

Expand Down Expand Up @@ -89,7 +90,7 @@ func NewDriver(localEndpoint *submendpoint.Local, localCluster *types.Submariner
}

func (v *vxLan) createVxlanInterface(port int) error {
ipAddr := v.localEndpoint.PrivateIP
ipAddr := v.localEndpoint.GetPrivateIP(k8snet.IPv4)

var err error

Expand Down Expand Up @@ -165,7 +166,7 @@ func (v *vxLan) ConnectToEndpoint(endpointInfo *natdiscovery.NATEndpointInfo) (s

cable.RecordConnection(CableDriverName, &v.localEndpoint, &remoteEndpoint.Spec, string(v1.Connected), true)

privateIP := endpointInfo.Endpoint.Spec.PrivateIP
privateIP := endpointInfo.Endpoint.Spec.GetPrivateIP(k8snet.IPv4)

remoteVtepIP, err := vxlan.GetVtepIPAddressFrom(privateIP, VxlanVTepNetworkPrefix)
if err != nil {
Expand Down
16 changes: 8 additions & 8 deletions pkg/cable/vxlan/vxlan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ var _ = Describe("Vxlan", func() {
natInfo = &natdiscovery.NATEndpointInfo{
Endpoint: subv1.Endpoint{
Spec: subv1.EndpointSpec{
ClusterID: "east",
CableName: "submariner-cable-east-192-68-2-1",
PrivateIP: "192.68.2.1",
Subnets: []string{"20.0.0.0/16", "21.0.0.0/16"},
ClusterID: "east",
CableName: "submariner-cable-east-192-68-2-1",
PrivateIPs: []string{"192.68.2.1"},
Subnets: []string{"20.0.0.0/16", "21.0.0.0/16"},
},
},
UseIP: "172.93.2.1",
Expand Down Expand Up @@ -164,10 +164,10 @@ func newTestDriver() *testDriver {
}

t.localEndpoint = subv1.EndpointSpec{
ClusterID: t.localCluster.Spec.ClusterID,
CableName: "submariner-cable-local-192-68-1-1",
PrivateIP: "192.68.1.1",
Subnets: append(t.localCluster.Spec.ServiceCIDR, t.localCluster.Spec.ClusterCIDR...),
ClusterID: t.localCluster.Spec.ClusterID,
CableName: "submariner-cable-local-192-68-1-1",
PrivateIPs: []string{"192.68.1.1"},
Subnets: append(t.localCluster.Spec.ServiceCIDR, t.localCluster.Spec.ClusterCIDR...),
}

t.netLink = fakeNetlink.New()
Expand Down
19 changes: 10 additions & 9 deletions pkg/cableengine/cableengine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
dynamicfake "k8s.io/client-go/dynamic/fake"
"k8s.io/client-go/kubernetes/scheme"
k8snet "k8s.io/utils/net"
)

func init() {
Expand Down Expand Up @@ -73,11 +74,11 @@ var _ = Describe("Cable Engine", func() {
CreationTimestamp: metav1.Now(),
},
Spec: subv1.EndpointSpec{
ClusterID: localClusterID,
CableName: fmt.Sprintf("submariner-cable-%s-1.1.1.1", localClusterID),
PrivateIP: "1.1.1.1",
PublicIP: "2.2.2.2",
Backend: fake.DriverName,
ClusterID: localClusterID,
CableName: fmt.Sprintf("submariner-cable-%s-1.1.1.1", localClusterID),
PrivateIPs: []string{"1.1.1.1"},
PublicIPs: []string{"2.2.2.2"},
Backend: fake.DriverName,
},
}

Expand All @@ -88,8 +89,8 @@ var _ = Describe("Cable Engine", func() {
Spec: subv1.EndpointSpec{
ClusterID: remoteClusterID,
CableName: fmt.Sprintf("submariner-cable-%s-1.1.1.1", remoteClusterID),
PrivateIP: "1.1.1.1",
PublicIP: "2.2.2.2",
PrivateIPs: []string{"1.1.1.1"},
PublicIPs: []string{"2.2.2.2"},
BackendConfig: map[string]string{"port": "1234"},
},
}
Expand Down Expand Up @@ -189,7 +190,7 @@ var _ = Describe("Cable Engine", func() {

Context("but different endpoint IP", func() {
BeforeEach(func() {
newEndpoint.Spec.PublicIP = "3.3.3.3"
newEndpoint.Spec.PublicIPs = []string{"3.3.3.3"}
})

It("should disconnect from the previous endpoint and connect to the new one", func() {
Expand Down Expand Up @@ -411,7 +412,7 @@ func (n *fakeNATDiscovery) notifyReady(endpoint *subv1.Endpoint) {

func natEndpointInfoFor(endpoint *subv1.Endpoint) *natdiscovery.NATEndpointInfo {
return &natdiscovery.NATEndpointInfo{
UseIP: endpoint.Spec.PublicIP,
UseIP: endpoint.Spec.GetPublicIP(k8snet.IPv4),
UseNAT: true,
Endpoint: *endpoint,
}
Expand Down
Loading
Loading