From b371bd9d7188f12afae09a660b3e55104b23362f Mon Sep 17 00:00:00 2001 From: Alejandro Tjaarda <alexdecb@yahoo.es> Date: Wed, 7 Aug 2024 15:36:41 +0000 Subject: [PATCH] switches: updated image so it can work with the overlay crd and automates the setup of vxlans --- build/build_images.sh | 2 +- .../config/dev/webhookcainjection_patch.yaml | 2 +- .../config/samples/l2sm_v1_overlay.yaml | 14 +++- .../internal/controller/overlay_controller.go | 23 +++++++ src/switch/cmd/l2sm-vxlans/main.go | 68 +++++++++++-------- src/switch/setup_switch.sh | 5 +- 6 files changed, 83 insertions(+), 31 deletions(-) diff --git a/build/build_images.sh b/build/build_images.sh index 1a3fd6f..00136bf 100755 --- a/build/build_images.sh +++ b/build/build_images.sh @@ -2,7 +2,7 @@ set -e # Set environment variables -export VERSION="2.5" +export VERSION="2.6" export DOCKERHUB_REPO="alexdecb" # Function to build image diff --git a/src/kubernetes-api/config/dev/webhookcainjection_patch.yaml b/src/kubernetes-api/config/dev/webhookcainjection_patch.yaml index 8a9f00f..c21a924 100644 --- a/src/kubernetes-api/config/dev/webhookcainjection_patch.yaml +++ b/src/kubernetes-api/config/dev/webhookcainjection_patch.yaml @@ -13,7 +13,7 @@ webhooks: - name: mpod.kb.io clientConfig: url: https://10.0.2.4:9443/mutate-v1-pod - caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURIVENDQWdXZ0F3SUJBZ0lVU1hpQm41YVR3TGgyWXZKQWZtWGNiZ25tNVlZd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0dERVdNQlFHQTFVRUF3d05iRzlqWVd3dGQyVmlhRzl2YXpBZUZ3MHlOREE0TURZd09EVTRNVE5hRncweQpOVEE0TURZd09EVTRNVE5hTUJneEZqQVVCZ05WQkFNTURXeHZZMkZzTFhkbFltaHZiMnN3Z2dFaU1BMEdDU3FHClNJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUN0QmFjb05ISDBwanQ4dkJjS3NxUHVBaHVtV21VMnkzNloKdFhjMGtOVHpOL2Nqekhpc1JIZ2crQVdVaHJ6bllUOGZ2clNlQU9nODhuS2RrMG8wZGJ6aXR5d09vdmJOeG5jbApnU3crRlZKQlprN0tYWTRtN1RzTkxDbXh4RE0vZjN6Rm93NGRKU2dBbzBCOWdZUy9XQnc3WHF2VHdROEdBRUhxCm9WUkluaXoxdW5LVWg1YkluNzNsRk5aMTIzVDI1cERtRGxIWU1lcjZORTdhL3BGZE5LZi9IQUlHYVBCT3FWeTgKaWNTM2pKRjV6V2w2NllNWHNFM2xwa2VORm9ZN3JsYmRFbm5rYUhmL2d3Uk9aNmtRSzFSTG14RUN5akVuaXRiRgpyYkhOU1R6ZWIyYXg1bVkvM3hDWnJKSkd2SmdLdm9UU0JpbmVqWVNHQjJVVElHaE1ROUV4QWdNQkFBR2pYekJkCk1EWUdBMVVkRVFRdk1DMkhCSDhBQUFHSEJBb0FBZ1NDQ1d4dlkyRnNhRzl6ZElJVWQyVmlhRzl2YXkxelpYSjIKWlhJdWJHOWpZV3d3RGdZRFZSMFBBUUgvQkFRREFnV2dNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01CTUEwRwpDU3FHU0liM0RRRUJDd1VBQTRJQkFRQ2lxNFpMQVVkQ1Z6ajBOUU1ncUkyZEs5YzNEc1IyejUxNjF5ZTMxakR1CkpBV0RNQjFnc2NnTmt0M2JnbGdGZVpQbjZxZHF4VHBVdk1ZUDRSQzR4S25paEQxcm1CMStMOU9oQTdmbGVuTUYKdllaMHVVdnhKdjdMYkdwOVhYMUxFZFFPUWZwd1l6cmVrU25Bci9iYXF4ME1UZDNGZkNpZ205WTJDYjFORVRPMwpUYTBaRS91amNVb2s5cHpJWVdybWxhVDN2SkE1OWZkbXZzcE9Ed3VnbUdQVkRGMzVCZ09MTDg0dnFPb2gvOUM1CjFyN1ZOcFFKcnBoMG8zVTNHcGxQbE9wa1JjRkZFR3Q4MHcrL2pzcUNNamJ3NkpiTWtEL3NmUlFrQ3lwTjhaa2wKTWdhbVRTeDVBcWgrOWZoU1Zudy9HN0RNdTZ4UFQ2M3J4U3R5RDVNenVqMVgKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURIVENDQWdXZ0F3SUJBZ0lVZHFYNk14MmU5dmVvZlFjV0hRWEZhaDA4ajJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0dERVdNQlFHQTFVRUF3d05iRzlqWVd3dGQyVmlhRzl2YXpBZUZ3MHlOREE0TURjeE1UVTVNekZhRncweQpOVEE0TURjeE1UVTVNekZhTUJneEZqQVVCZ05WQkFNTURXeHZZMkZzTFhkbFltaHZiMnN3Z2dFaU1BMEdDU3FHClNJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURjc3ppcVZPNmF3UUo2SVREbk90a1pFS1NEVFdrWEFVZDEKaU9kQUo5Q24rZVZjdlAxNGhjVTU0ejZ5NXJwWXRVbXJDMlpZVUlhelViZzFDUXBQb253Q2RaSnlpT0FCNVppQwp4RmxWdk0yUmtvK0xoYzRIU080Yis0VUlDc0M4eUlrSDlKTTM1b2E0WVh2dmJGaFZicUFvejUxK2VianJwaDBkCmk0TGhJVHFuSnp1cXVCSnJUOTRTeTJvalVSSUlIQzdHdG9aNUlpRWVlZGkrRFNlZkt4WFhlL0dzT2xYV3VyVFUKVTg2b1BleTFIUlpSZXJaWG9hNHdSeDVqVkxidFNoL0JhYXVueFV1OHFJcVBFdFQ4aXZkdHhJRmc1NFN5UFl0ZApYZnRsNTFTa3pHRDh4UXRrMkEwZGZPeTFCdVBoK1NZcTc2SDhhUnZRVGlrZ3R0VS92TEVCQWdNQkFBR2pYekJkCk1EWUdBMVVkRVFRdk1DMkhCSDhBQUFHSEJBb0FBZ1NDQ1d4dlkyRnNhRzl6ZElJVWQyVmlhRzl2YXkxelpYSjIKWlhJdWJHOWpZV3d3RGdZRFZSMFBBUUgvQkFRREFnV2dNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01CTUEwRwpDU3FHU0liM0RRRUJDd1VBQTRJQkFRQ3VPa2IvSStaQkUxNHBYSjhTUi9oNlk2VVRhTlpEVmpRMCtkSHV5aGFVCmZCRVRNMWZDYUpiQ2tmaGNtZEFvTGY0MzJUczBERmY4QTVybGlMTmQybGJodHFEclQxRGZUY1MwWkoxRTBIeHgKU1E3aDVZcjZvSk1mL2pDbWtheUZZSzh5RUlEdUo4Qmxmek1iVGlZL2Z2WHU1SHlvVi9uWkYzT2REM1pFWWtyTApVb3NsNEgzY1Z3WHVta3BDUjN0dDVvd3FvQnI5UUMyOEJvTjRxTDhqdWhvTCtZNTcyMUFKUExBYnRRZXRxWmFYClJEOXdLYW9BTFdLVFZIUzNiVWk2Y3JOK2RuV01YemtzNnBwNVNHYXk4K3czbFJOQnV0U3dpRWFHU202V092SGkKdXBOc2FxVEMrVGZHMXNzZ3c0cHR4WElrR2RoZ3ZUYnRZMTF5Ylh3eVdpcjMKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= rules: - operations: [ "CREATE", "UPDATE" ] apiGroups: [""] diff --git a/src/kubernetes-api/config/samples/l2sm_v1_overlay.yaml b/src/kubernetes-api/config/samples/l2sm_v1_overlay.yaml index 7482d8a..9186d38 100644 --- a/src/kubernetes-api/config/samples/l2sm_v1_overlay.yaml +++ b/src/kubernetes-api/config/samples/l2sm_v1_overlay.yaml @@ -23,7 +23,19 @@ spec: spec: containers: - name: l2sm-switch - image: alexdecb/l2sm-switch:2.5 + image: alexdecb/l2sm-switch:2.6 resources: {} + env: + - name: NODENAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: NVETHS + value: "10" + - name: CONTROLLERIP + value: "l2sm-controller-service" + securityContext: + capabilities: + add: ["NET_ADMIN"] ports: - containerPort: 80 diff --git a/src/kubernetes-api/internal/controller/overlay_controller.go b/src/kubernetes-api/internal/controller/overlay_controller.go index c033dce..da2ac7c 100644 --- a/src/kubernetes-api/internal/controller/overlay_controller.go +++ b/src/kubernetes-api/internal/controller/overlay_controller.go @@ -286,6 +286,29 @@ func (r *OverlayReconciler) createExternalResources(ctx context.Context, overlay Labels: map[string]string{ "app": name, }, + Annotations: map[string]string{ + "k8s.v1.cni.cncf.io/networks": `[{ + "name": "veth1", "ips": ["fe80::58d0:b8ff:fe42:debf/64"] + }, { + "name": "veth2", "ips": ["fe80::58d0:b8ff:fe42:debe/64"] + }, { + "name": "veth3", "ips": ["fe80::58d0:b8ff:fe42:debd/64"] + }, { + "name": "veth4", "ips": ["fe80::58d0:b8ff:fe42:debc/64"] + }, { + "name": "veth5", "ips": ["fe80::58d0:b8ff:fe42:debb/64"] + }, { + "name": "veth6", "ips": ["fe80::58d0:b8ff:fe42:deba/64"] + }, { + "name": "veth7", "ips": ["fe80::58d0:b8ff:fe42:deb9/64"] + }, { + "name": "veth8", "ips": ["fe80::58d0:b8ff:fe42:deb8/64"] + }, { + "name": "veth9", "ips": ["fe80::58d0:b8ff:fe42:deb7/64"] + }, { + "name": "veth10", "ips": ["fe80::58d0:b8ff:fe42:deb6/64"] + }]`, + }, }, Spec: corev1.PodSpec{ InitContainers: overlay.Spec.SwitchTemplate.Spec.InitContainers, diff --git a/src/switch/cmd/l2sm-vxlans/main.go b/src/switch/cmd/l2sm-vxlans/main.go index d7a4baf..016d243 100644 --- a/src/switch/cmd/l2sm-vxlans/main.go +++ b/src/switch/cmd/l2sm-vxlans/main.go @@ -5,6 +5,7 @@ import ( "errors" "flag" "fmt" + "net" "os" "ovs-switch/pkg/ovs" ) @@ -12,7 +13,7 @@ import ( type Node struct { Name string `json:"name"` NodeIP string `json:"nodeIP"` - NeighborNodes []string `json:"neighborNodes"` + NeighborNodes []string `json:"neighborNodes,omitempty"` } type Link struct { @@ -94,33 +95,45 @@ func takeArguments() (string, string, string, error) { return configDir, *nodeName, *fileType, nil } -/** +/* +* Example: -{ - "Nodes": [ - { - "name": "l2sm1", - "nodeIP": "10.1.14.53" - }, - { - "name": "l2sm2", - "nodeIP": "10.1.14.90" - } - ], - "Links": [ - { - "endpointA": "l2sm1", - "endpointB": "l2sm2" - } - ] -} + { + "Nodes": [ + { + "name": "l2sm1", + "nodeIP": "10.1.14.53" + }, + { + "name": "l2sm2", + "nodeIP": "10.1.14.90" + } + ], + "Links": [ + { + "endpointA": "l2sm1", + "endpointB": "l2sm2" + } + ] + } */ func createTopology(bridge ovs.Bridge, topology Topology, nodeName string) error { nodeMap := make(map[string]string) for _, node := range topology.Nodes { - nodeMap[node.Name] = node.NodeIP + var nodeIP string + if net.ParseIP(nodeIP) != nil { + nodeIP = node.NodeIP + } else { + ips, err := net.LookupHost(node.NodeIP) + if err != nil || len(ips) == 0 { + fmt.Printf("Failed to resolve %s\n", node.NodeIP) + continue + } + nodeIP = ips[0] + } + nodeMap[node.Name] = nodeIP } localIp := nodeMap[nodeName] @@ -167,14 +180,15 @@ func readFile(configDir string, dataStruct interface{}) error { } -/** +/* +* Example: - { - "Name": "l2sm1", - "nodeIP": "10.1.14.53", - "neighborNodes":["10.4.2.3","10.4.2.5"] - } + { + "Name": "l2sm1", + "nodeIP": "10.1.14.53", + "neighborNodes":["10.4.2.3","10.4.2.5"] + } */ func connectToNeighbors(bridge ovs.Bridge, node Node) error { for vxlanNumber, neighborIp := range node.NeighborNodes { diff --git a/src/switch/setup_switch.sh b/src/switch/setup_switch.sh index c126f5d..5bc2dfe 100644 --- a/src/switch/setup_switch.sh +++ b/src/switch/setup_switch.sh @@ -8,5 +8,8 @@ ovs-vswitchd --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach l2sm-init --n_veths=$NVETHS --controller_ip=$CONTROLLERIP -#l2sm-vxlans --node_name=$NODENAME /etc/l2sm/switchConfig.json +sleep 20 + +l2sm-vxlans --node_name=$NODENAME /etc/l2sm/topology.json + sleep infinity -- GitLab