diff --git a/README.md b/README.md index eae1a2a..d3db5c2 100644 --- a/README.md +++ b/README.md @@ -69,10 +69,8 @@ Environment variables for operator: - `CATTLE_ELECTION_RENEW_DEADLINE`: leader election renew deadline, default `30s`. - `CATTLE_ELECTION_RETRY_PERIOD`: leader election retry period, default `2s`. - `FLAT_NETWORK_CNI_ARP_POLICY`: CNI ARP Policy, default `arp_notify`, available `arp_notify`, `arping`. - -### CNI - -> WIP +- `FLAT_NETWORK_CLUSTER_CIDR`: Kubernetes config Cluster CIDR, default `10.42.0.0/16`. +- `FLAT_NETWORK_SERVICE_CIDR`: Kubernetes config Service CIDR, default `10.43.0.0/16`. ## License diff --git a/charts/rancher-flat-network/questions.yaml b/charts/rancher-flat-network/questions.yaml index eb4f870..9dc6663 100644 --- a/charts/rancher-flat-network/questions.yaml +++ b/charts/rancher-flat-network/questions.yaml @@ -1,4 +1,3 @@ -rancher_min_version: 2.9.0-0 categories: - Networking namespace: cattle-flat-network @@ -8,12 +7,12 @@ questions: default: "Default" type: enum label: "Cluster Type" - group: "Basic Setup" + group: "CNI Plugin" options: - "Default" - "K3s" - variable: multus.cni.version - description: "CNI Version (K3s '1.0.0', RKE2 '0.3.1')" + description: "CNI Version (K3s is '1.0.0', RKE2 is '0.3.1')" default: "1.0.0" type: enum label: "CNI Version" @@ -37,6 +36,18 @@ questions: type: boolean label: "Proxy ARP" group: "CNI Plugin" +- variable: clusterCIDR + default: "10.42.0.0/16" + description: "Kubernetes config Cluster CIDR" + type: string + label: "Cluster CIDR" + group: "CNI Plugin" +- variable: serviceCIDR + default: "10.43.0.0/16" + description: "Kubernetes config Service CIDR" + type: string + label: "Service CIDR" + group: "CNI Plugin" - variable: flatNetworkOperator.limits.memory default: "512Mi" description: "Memory limit for Operator pod" @@ -44,7 +55,7 @@ questions: label: FlatNetwork Operator group: "Resource Limits" - variable: flatNetworkOperator.limits.cpu - default: "100m" + default: "200m" description: "CPU limit for Operator pod" type: string label: FlatNetwork Operator diff --git a/charts/rancher-flat-network/templates/crds.yaml b/charts/rancher-flat-network/templates/crds.yaml index cb432ab..c304da8 100644 --- a/charts/rancher-flat-network/templates/crds.yaml +++ b/charts/rancher-flat-network/templates/crds.yaml @@ -98,6 +98,9 @@ spec: gateway: nullable: true type: string + ipvlanMode: + nullable: true + type: string master: nullable: true type: string @@ -118,10 +121,14 @@ spec: type: array routeSettings: properties: + addClusterCIDR: + type: boolean addNodeCIDR: type: boolean addPodIPToHost: type: boolean + addServiceCIDR: + type: boolean flatNetworkDefaultGateway: type: boolean type: object diff --git a/charts/rancher-flat-network/templates/operator.yaml b/charts/rancher-flat-network/templates/operator.yaml index f852e4e..4e3410e 100644 --- a/charts/rancher-flat-network/templates/operator.yaml +++ b/charts/rancher-flat-network/templates/operator.yaml @@ -35,6 +35,12 @@ spec: value: {{ .Values.flatNetworkOperator.cattleResyncDefault | quote }} - name: CATTLE_DEV_MODE value: {{ .Values.flatNetworkOperator.cattleDevMode | quote }} + - name: FLAT_NETWORK_CNI_ARP_POLICY + value: {{ .Values.arpPolicy | quote }} + - name: FLAT_NETWORK_CLUSTER_CIDR + value: {{ .Values.clusterCIDR | quote }} + - name: FLAT_NETWORK_SERVICE_CIDR + value: {{ .Values.serviceCIDR | quote }} resources: limits: memory: {{ .Values.flatNetworkOperator.limits.memory | quote }} diff --git a/charts/rancher-flat-network/values.yaml b/charts/rancher-flat-network/values.yaml index 7c3d23f..4c3a3c7 100644 --- a/charts/rancher-flat-network/values.yaml +++ b/charts/rancher-flat-network/values.yaml @@ -5,6 +5,11 @@ proxyARP: false # Set to 'K3s' if using K3s cluster. clusterType: default +# Kubernetes config Cluster CIDR +clusterCIDR: "10.42.0.0/16" +# Kubernetes config Service CIDR +serviceCIDR: "10.43.0.0/16" + # Configuration for rancher-flat-network-operator flatNetworkOperator: replicas: 2 diff --git a/go.mod b/go.mod index 293974f..614288d 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,6 @@ require ( github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect diff --git a/pkg/apis/flatnetwork.pandaria.io/v1/types.go b/pkg/apis/flatnetwork.pandaria.io/v1/types.go index 68e5011..2f138db 100644 --- a/pkg/apis/flatnetwork.pandaria.io/v1/types.go +++ b/pkg/apis/flatnetwork.pandaria.io/v1/types.go @@ -106,6 +106,11 @@ type SubnetSpec struct { // ipvlan: 'l2, l3, l3s' (default 'l2'); Mode string `json:"mode"` + // IPvlanMode is the mode of IPvlan. + // Only required when Mode is 'ipvlan'. + // can be 'bridge, private, vepa' (default 'bridge') + IPvlanMode string `json:"ipvlanMode"` + // Gateway is the gateway of the subnet (optional). Gateway net.IP `json:"gateway"` @@ -116,7 +121,7 @@ type SubnetSpec struct { Routes []Route `json:"routes,omitempty"` // RouteSettings provides some advanced options for custom routes. - RouteSettings RouteSettings `json:"routeSettings,oitempty"` + RouteSettings RouteSettings `json:"routeSettings"` } type SubnetStatus struct { @@ -144,17 +149,26 @@ type Route struct { } type RouteSettings struct { - // AddNodeCIDR adds node CIDR route for flat-network pod if enabled. + // AddClusterCIDR adds ClusterCIDR route to eth0 for flat-network pod if enabled. + // This option can be used when eth1 (flatNetwork iface) is default gateway. + AddClusterCIDR bool `json:"addClusterCIDR"` + + // AddServiceCIDR adds ServiceCIDR route to eth0 for flat-network pod if enabled. + // This option can be used when eth1 (flatNetwork iface) is default gateway. + AddServiceCIDR bool `json:"addServiceCIDR"` + + // AddNodeCIDR adds node CIDR route to eth0 for flat-network pod if enabled. + // This option can be used when eth1 (flatNetwork iface) is default gateway. AddNodeCIDR bool `json:"addNodeCIDR"` - // AddPodIPToHost adds pod flat-network IP routes on host if enabled. + // AddPodIPToHost adds pod flat-network IP routes on node host NS if enabled. // If true, it will allow node to directly access Pods running on the current node by flat-network IP. // If false, node cannot access Pods running on the current node by flat-network IP. AddPodIPToHost bool `json:"addPodIPToHost"` // FlatNetworkDefaultGateway lets Pod using the flat-network iface as default gateway. - // NOTE: need to add custom routes (serviceCIDR, clusterCIDR, nodeCIDR) - // if pod using the flat-network iface as the default gateway. + // NOTE: set 'addClusterCIDR', 'addServiceCIDR', 'addNodeCIDR' to true if needed + // when pod is using the flat-network iface as the default gateway. // // And the pods’ access to other networks will be restricted. // For example, Pods cannot directly access the public networks. diff --git a/pkg/cni/commands/add.go b/pkg/cni/commands/add.go index 14c734f..39d380d 100644 --- a/pkg/cni/commands/add.go +++ b/pkg/cni/commands/add.go @@ -251,12 +251,12 @@ func Add(args *skel.CmdArgs) error { ipc.Interface = types100.Int(0) } err = netns.Do(func(_ ns.NetNS) error { - if n.FlatNetworkConfig.RuntimeConfig.ARPPolicy == arpNotifyPolicy { + if n.FlatNetworkConfig.ARPPolicy == arpNotifyPolicy { logrus.Debugf("setting up sysctl arp_notify: %s", args.IfName) _, _ = sysctl.Sysctl(fmt.Sprintf("net/ipv4/conf/%s/arp_notify", args.IfName), "1") } - if n.FlatNetworkConfig.RuntimeConfig.ProxyARP { + if n.FlatNetworkConfig.ProxyARP { logrus.Debugf("setting up sysctl proxy_arp: %s", args.IfName) _, _ = sysctl.Sysctl(fmt.Sprintf("net/ipv4/conf/%s/proxy_arp", args.IfName), "1") } @@ -266,7 +266,7 @@ func Add(args *skel.CmdArgs) error { err, args.IfName, result) } - if n.FlatNetworkConfig.RuntimeConfig.ARPPolicy == arpingPolicy { + if n.FlatNetworkConfig.ARPPolicy == arpingPolicy { logrus.Debugf("sending arping request: %s", args.IfName) contVeth, err := net.InterfaceByName(args.IfName) if err != nil { @@ -289,6 +289,26 @@ func Add(args *skel.CmdArgs) error { result.DNS = n.DNS + // Add ClusterCIDR route in Pod NS + if subnet.Spec.RouteSettings.AddClusterCIDR { + logrus.Debugf("adding kube config clusterCIDR %q route to pod NS", + n.FlatNetworkConfig.ClusterCIDR) + err = route.AddPodKubeCIDRRoutes(netns, n.FlatNetworkConfig.ClusterCIDR) + if err != nil { + return fmt.Errorf("failed to add ClusterCIDR route: %w", err) + } + } + + // Add ServiceCIDR route in Pod NS + if subnet.Spec.RouteSettings.AddServiceCIDR { + logrus.Debugf("adding kube config serviceCIDR %q route to pod NS", + n.FlatNetworkConfig.ServiceCIDR) + err = route.AddPodKubeCIDRRoutes(netns, n.FlatNetworkConfig.ServiceCIDR) + if err != nil { + return fmt.Errorf("failed to add ServiceCIDR route: %w", err) + } + } + // Add NodeCIDR route in Pod NS if subnet.Spec.RouteSettings.AddNodeCIDR { err = route.AddPodNodeCIDRRoutes(netns) diff --git a/pkg/cni/logger/logger.go b/pkg/cni/logger/logger.go index 3dbd558..cfa824a 100644 --- a/pkg/cni/logger/logger.go +++ b/pkg/cni/logger/logger.go @@ -23,6 +23,7 @@ const ( // Setup logrus loglevel and output file. // Output logfile to 'logFileFormat' only when 'loggingFlagFile' exists. func Setup() error { + logrus.SetOutput(io.Discard) // Discard log output by default logrus.SetFormatter(&nested.Formatter{ HideKeys: false, TimestampFormat: time.DateTime, diff --git a/pkg/cni/route/kube_cidr.go b/pkg/cni/route/kube_cidr.go new file mode 100644 index 0000000..20bcaf6 --- /dev/null +++ b/pkg/cni/route/kube_cidr.go @@ -0,0 +1,59 @@ +package route + +import ( + "fmt" + "net" + + "github.com/containernetworking/plugins/pkg/ns" + "github.com/vishvananda/netlink" +) + +func AddPodKubeCIDRRoutes(podNS ns.NetNS, cidr string) error { + ip, network, err := net.ParseCIDR(cidr) + if err != nil { + return fmt.Errorf("failed to parse CIDR %q: %w", cidr, err) + } + err = podNS.Do(func(_ ns.NetNS) error { + defaultLinkSet, err := GetDefaultLinkIDSet() + if err != nil { + return fmt.Errorf("failed to get pod default link id: %w", err) + } + + podDefaultRoutes, err := GetDefaultRoutes() + if err != nil { + return fmt.Errorf("failed to get pod default routes: %w", err) + } + if len(podDefaultRoutes) == 0 { + return nil + } + var podDefaultGatewayV4 net.IP + var podDefaultGatewayV6 net.IP + for _, r := range podDefaultRoutes { + switch r.Family { + case netlink.FAMILY_V4: + podDefaultGatewayV4 = r.Gw + default: + podDefaultGatewayV6 = r.Gw + } + } + + for id := range defaultLinkSet { + r := netlink.Route{ + LinkIndex: id, + Dst: network, + Family: netlink.FAMILY_V4, + Gw: podDefaultGatewayV4, + } + if ip.To16() != nil && len(ip.To4()) == 0 { + r.Family = netlink.FAMILY_V6 + r.Gw = podDefaultGatewayV6 + } + return EnsureRouteExists(&r) + } + return nil + }) + if err != nil { + return fmt.Errorf("addPodKubeCIDRRoutes: %w", err) + } + return nil +} diff --git a/pkg/cni/route/node.go b/pkg/cni/route/node.go new file mode 100644 index 0000000..3735187 --- /dev/null +++ b/pkg/cni/route/node.go @@ -0,0 +1,93 @@ +package route + +import ( + "fmt" + "net" + + flv1 "github.com/cnrancher/rancher-flat-network/pkg/apis/flatnetwork.pandaria.io/v1" + "github.com/cnrancher/rancher-flat-network/pkg/cni/common" + "github.com/cnrancher/rancher-flat-network/pkg/utils" + "github.com/containernetworking/plugins/pkg/ns" + "github.com/sirupsen/logrus" + "github.com/vishvananda/netlink" + "github.com/vishvananda/netlink/nl" +) + +// getHostCIDRCustomRoutes for adding host iface IP addr routes to pod +func getHostCIDRCustomRoutes(linkID int, gwV4, gwV6 net.IP) ([]flv1.Route, error) { + link, err := netlink.LinkByIndex(linkID) + if err != nil { + return nil, fmt.Errorf("getHostCIDRCustomRoutes: %w", err) + } + addrs, err := netlink.AddrList(link, netlink.FAMILY_ALL) + if err != nil { + return nil, fmt.Errorf("getHostCIDRCustomRoutes: %w", err) + } + if len(addrs) == 0 { + return nil, nil + } + routes := []flv1.Route{} + for _, a := range addrs { + if a.IP.IsLinkLocalUnicast() { + continue + } + r := flv1.Route{ + Dev: common.PodIfaceEth0, + Dst: a.IPNet.String(), + Via: nil, + } + switch nl.GetIPFamily(a.IP) { + case netlink.FAMILY_V4: + r.Via = gwV4 + default: + r.Via = gwV6 + } + routes = append(routes, r) + } + logrus.Debugf("getHostCIDRCustomRoutes: %v", utils.Print(routes)) + return routes, nil +} + +func AddPodNodeCIDRRoutes(podNS ns.NetNS) error { + // Add host iface IP addr routes and user custom routes to Pod + customRoutes := []flv1.Route{} + defaultLinkSet, err := GetDefaultLinkIDSet() + if err != nil { + return fmt.Errorf("failed to get pod default link id: %w", err) + } + + var podDefaultGatewayV4 net.IP + var podDefaultGatewayV6 net.IP + if err := podNS.Do(func(_ ns.NetNS) error { + podDefaultRoutes, err := GetDefaultRoutes() + if err != nil { + return fmt.Errorf("failed to get pod default routes: %w", err) + } + if len(podDefaultRoutes) == 0 { + return nil + } + for _, r := range podDefaultRoutes { + switch r.Family { + case netlink.FAMILY_V4: + podDefaultGatewayV4 = r.Gw + default: + podDefaultGatewayV6 = r.Gw + } + } + return nil + }); err != nil { + return fmt.Errorf("addPodNodeCIDRRoutes: %w", err) + } + for id := range defaultLinkSet { + results, err := getHostCIDRCustomRoutes(id, podDefaultGatewayV4, podDefaultGatewayV6) + if err != nil { + return fmt.Errorf("addPodNodeCIDRRoutes: %w", err) + } + if len(results) == 0 { + continue + } + customRoutes = append(customRoutes, results...) + } + + return AddPodFlatNetworkCustomRoutes(podNS, customRoutes) +} diff --git a/pkg/cni/route/route.go b/pkg/cni/route/route.go index d566c5d..2af27b1 100644 --- a/pkg/cni/route/route.go +++ b/pkg/cni/route/route.go @@ -10,7 +10,6 @@ import ( "github.com/vishvananda/netlink/nl" flv1 "github.com/cnrancher/rancher-flat-network/pkg/apis/flatnetwork.pandaria.io/v1" - "github.com/cnrancher/rancher-flat-network/pkg/cni/common" "github.com/cnrancher/rancher-flat-network/pkg/utils" ) @@ -33,6 +32,21 @@ func GetDefaultRoutes() ([]netlink.Route, error) { return results, nil } +func GetDefaultLinkIDSet() (map[int]bool, error) { + defaultRoutes, err := GetDefaultRoutes() + if err != nil { + return nil, fmt.Errorf("getDefaultLinkIDSet: %w", err) + } + + defaultLinkID := map[int]bool{} // map[linkID]true + if len(defaultRoutes) != 0 { + for _, r := range defaultRoutes { + defaultLinkID[r.LinkIndex] = true + } + } + return defaultLinkID, nil +} + // GetRouteByIP executes 'ip route get ' on host network NS. // NOTE: will return nil if no route found func GetRouteByIP(ip net.IP) (*netlink.Route, error) { @@ -79,7 +93,13 @@ func CheckRouteExists( continue } } - logrus.Debugf("route already exists on pod: [%v]", utils.Print(r)) + if r.Gw != nil && route.Gw != nil { + if !r.Gw.Equal(route.Gw) { + continue + } + } + logrus.Debugf("route already exists on pod: [%v]", + utils.Print(r)) return true, nil } return false, nil @@ -107,92 +127,6 @@ func EnsureRouteExists( return nil } -// getHostCIDRCustomRoutes for adding host iface IP addr routes to pod -func getHostCIDRCustomRoutes(linkID int, gwV4, gwV6 net.IP) ([]flv1.Route, error) { - link, err := netlink.LinkByIndex(linkID) - if err != nil { - return nil, fmt.Errorf("getHostCIDRCustomRoutes: %w", err) - } - addrs, err := netlink.AddrList(link, netlink.FAMILY_ALL) - if err != nil { - return nil, fmt.Errorf("getHostCIDRCustomRoutes: %w", err) - } - if len(addrs) == 0 { - return nil, nil - } - routes := []flv1.Route{} - for _, a := range addrs { - if a.IP.IsLinkLocalUnicast() { - continue - } - r := flv1.Route{ - Dev: common.PodIfaceEth0, - Dst: a.IPNet.String(), - Via: nil, - } - switch nl.GetIPFamily(a.IP) { - case netlink.FAMILY_V4: - r.Via = gwV4 - default: - r.Via = gwV6 - } - routes = append(routes, r) - } - logrus.Debugf("getHostCIDRCustomRoutes: %v", utils.Print(routes)) - return routes, nil -} - -func AddPodNodeCIDRRoutes(podNS ns.NetNS) error { - // Add host iface IP addr routes and user custom routes to Pod - customRoutes := []flv1.Route{} - defaultRoutes, err := GetDefaultRoutes() - if err != nil { - return fmt.Errorf("addPodNodeCIDRRoutes: %w", err) - } - - defaultLinkID := map[int]bool{} // map[linkID]true - if len(defaultRoutes) != 0 { - for _, r := range defaultRoutes { - defaultLinkID[r.LinkIndex] = true - } - } - - var podDefaultGatewayV4 net.IP - var podDefaultGatewayV6 net.IP - if err := podNS.Do(func(_ ns.NetNS) error { - podDefaultRoutes, err := GetDefaultRoutes() - if err != nil { - return fmt.Errorf("failed to get pod default routes: %w", err) - } - if len(podDefaultRoutes) == 0 { - return nil - } - for _, r := range podDefaultRoutes { - switch r.Family { - case netlink.FAMILY_V4: - podDefaultGatewayV4 = r.Gw - default: - podDefaultGatewayV6 = r.Gw - } - } - return nil - }); err != nil { - return fmt.Errorf("addPodNodeCIDRRoutes: %w", err) - } - for id := range defaultLinkID { - results, err := getHostCIDRCustomRoutes(id, podDefaultGatewayV4, podDefaultGatewayV6) - if err != nil { - return fmt.Errorf("addPodNodeCIDRRoutes: %w", err) - } - if len(results) == 0 { - continue - } - customRoutes = append(customRoutes, results...) - } - - return AddPodFlatNetworkCustomRoutes(podNS, customRoutes) -} - // AddPodFlatNetworkCustomRoutes adds user defined custom routes and // host IP routes to pod NS func AddPodFlatNetworkCustomRoutes(podNS ns.NetNS, customRoutes []flv1.Route) error { diff --git a/pkg/cni/types/types.go b/pkg/cni/types/types.go index 66f1ff7..d347800 100644 --- a/pkg/cni/types/types.go +++ b/pkg/cni/types/types.go @@ -46,14 +46,11 @@ type NetConf struct { } type FlatNetworkConfig struct { - MTU int `json:"mtu,omitempty"` - MAC net.HardwareAddr `json:"mac,omitempty"` - RuntimeConfig RuntimeConfig `json:"runtimeConfig,omitempty"` -} - -type RuntimeConfig struct { - ARPPolicy string `json:"arpPolicy,omitempty"` - ProxyARP bool `json:"proxyARP"` + MTU int `json:"mtu"` + ClusterCIDR string `json:"clusterCIDR"` + ServiceCIDR string `json:"serviceCIDR"` + ARPPolicy string `json:"arpPolicy"` + ProxyARP bool `json:"proxyARP"` } type Address struct { diff --git a/pkg/controller/flatnetworkip/flatnetworkip.go b/pkg/controller/flatnetworkip/flatnetworkip.go index 34a13fc..1a01938 100644 --- a/pkg/controller/flatnetworkip/flatnetworkip.go +++ b/pkg/controller/flatnetworkip/flatnetworkip.go @@ -4,18 +4,15 @@ import ( "context" "fmt" "slices" - "sync" "time" "github.com/cnrancher/rancher-flat-network/pkg/controller/wrangler" "github.com/cnrancher/rancher-flat-network/pkg/ipcalc" "github.com/cnrancher/rancher-flat-network/pkg/utils" "github.com/sirupsen/logrus" - corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" "k8s.io/client-go/util/retry" flv1 "github.com/cnrancher/rancher-flat-network/pkg/apis/flatnetwork.pandaria.io/v1" @@ -51,11 +48,6 @@ type handler struct { podEnqueueAfter func(string, string, time.Duration) podEnqueue func(string, string) - - recorder record.EventRecorder - - // Mutex for allocating IP address. - allocateIPMutex sync.Mutex } func Register( @@ -69,7 +61,6 @@ func Register( subnetCache: wctx.FlatNetwork.FlatNetworkSubnet().Cache(), podClient: wctx.Core.Pod(), podCache: wctx.Core.Pod().Cache(), - recorder: wctx.Recorder, ipEnqueueAfter: wctx.FlatNetwork.FlatNetworkIP().EnqueueAfter, ipEnqueue: wctx.FlatNetwork.FlatNetworkSubnet().Enqueue, @@ -107,7 +98,6 @@ func (h *handler) handleError( if ip.Status.FailureMessage == message { return ip, err } - h.eventError(ip, err) err = retry.RetryOnConflict(retry.DefaultRetry, func() error { ip, err := h.ipCache.Get(ip.Namespace, ip.Name) @@ -336,13 +326,6 @@ func (h *handler) onIPUpdate(ip *flv1.FlatNetworkIP) (*flv1.FlatNetworkIP, error return ip, nil } -func (h *handler) eventError(ip *flv1.FlatNetworkIP, err error) { - if err == nil { - return - } - h.recorder.Event(ip, corev1.EventTypeWarning, "FlatNetworkIPError", err.Error()) -} - func fieldsIP(ip *flv1.FlatNetworkIP) logrus.Fields { if ip == nil { return logrus.Fields{} diff --git a/pkg/controller/flatnetworksubnet/flatnetworksubnet.go b/pkg/controller/flatnetworksubnet/flatnetworksubnet.go index 42aeee1..54a0290 100644 --- a/pkg/controller/flatnetworksubnet/flatnetworksubnet.go +++ b/pkg/controller/flatnetworksubnet/flatnetworksubnet.go @@ -14,11 +14,9 @@ import ( "github.com/cnrancher/rancher-flat-network/pkg/ipcalc" "github.com/cnrancher/rancher-flat-network/pkg/utils" "github.com/sirupsen/logrus" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/tools/record" "k8s.io/client-go/util/retry" flv1 "github.com/cnrancher/rancher-flat-network/pkg/apis/flatnetwork.pandaria.io/v1" @@ -51,8 +49,6 @@ type handler struct { ipCache flcontroller.FlatNetworkIPCache podClient corecontroller.PodClient - recorder record.EventRecorder - subnetEnqueueAfter func(string, string, time.Duration) subnetEnqueue func(string, string) } @@ -68,8 +64,6 @@ func Register( ipCache: wctx.FlatNetwork.FlatNetworkIP().Cache(), podClient: wctx.Core.Pod(), - recorder: wctx.Recorder, - subnetEnqueueAfter: wctx.FlatNetwork.FlatNetworkSubnet().EnqueueAfter, subnetEnqueue: wctx.FlatNetwork.FlatNetworkSubnet().Enqueue, } @@ -102,7 +96,6 @@ func (h *handler) handleError( return subnet, err } - h.eventError(subnet, err) err = retry.RetryOnConflict(retry.DefaultRetry, func() error { subnet, err := h.subnetCache.Get(subnet.Namespace, subnet.Name) if err != nil { @@ -440,13 +433,6 @@ func ip2UsedRanges(ips []*flv1.FlatNetworkIP) []flv1.IPRange { return usedIPs } -func (h *handler) eventError(subnet *flv1.FlatNetworkSubnet, err error) { - if err == nil { - return - } - h.recorder.Event(subnet, corev1.EventTypeWarning, "FlatNetworkSubnetError", err.Error()) -} - func fieldsSubnet(subnet *flv1.FlatNetworkSubnet) logrus.Fields { if subnet == nil { return logrus.Fields{} diff --git a/pkg/controller/namespace/namespace.go b/pkg/controller/namespace/namespace.go index 1c36261..480277d 100644 --- a/pkg/controller/namespace/namespace.go +++ b/pkg/controller/namespace/namespace.go @@ -26,6 +26,8 @@ const ( arpPolicyEnv = "FLAT_NETWORK_CNI_ARP_POLICY" proxyARPEnv = "FLAT_CNI_PROXY_ARP" + clusterCIDREnv = "FLAT_NETWORK_CLUSTER_CIDR" + serviceCIDREnv = "FLAT_NETWORK_SERVICE_CIDR" defaultARPPolicy = "arp_notify" defaultRequeueTime = time.Minute * 10 @@ -144,13 +146,11 @@ func getNetAttachDefConfig() string { "type": "static-ipam" }, "flatNetwork": { - "master": "", - "mode": "", "mtu": 1500, - "runtimeConfig": { - "arpPolicy": "` + getARPPolicy() + `", - "proxyARP": ` + getProxyARP() + ` - } + "clusterCIDR": "` + getClusterCIDR() + `", + "serviceCIDR": "` + getServiceCIDR() + `", + "arpPolicy": "` + getARPPolicy() + `", + "proxyARP": ` + getProxyARP() + ` } }` return netAttachDefConfig @@ -169,6 +169,16 @@ func getProxyARP() string { return strconv.FormatBool(flag) } +func getClusterCIDR() string { + cidr := os.Getenv(clusterCIDREnv) + return cidr +} + +func getServiceCIDR() string { + cidr := os.Getenv(serviceCIDREnv) + return cidr +} + func fieldsNS(ns *corev1.Namespace) logrus.Fields { if ns == nil { return logrus.Fields{} diff --git a/pkg/controller/wrangler/context.go b/pkg/controller/wrangler/context.go index c57b23a..1e24d9f 100644 --- a/pkg/controller/wrangler/context.go +++ b/pkg/controller/wrangler/context.go @@ -16,14 +16,11 @@ import ( "github.com/rancher/wrangler/v3/pkg/leader" "github.com/rancher/wrangler/v3/pkg/start" "github.com/sirupsen/logrus" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" - typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/rest" - "k8s.io/client-go/tools/record" appsv1 "github.com/cnrancher/rancher-flat-network/pkg/generated/controllers/apps/v1" batchv1 "github.com/cnrancher/rancher-flat-network/pkg/generated/controllers/batch/v1" @@ -44,7 +41,6 @@ type Context struct { Networking networkingv1.Interface Batch batchv1.Interface Discovery discoveryv1.Interface - Recorder record.EventRecorder // ClientSet for NetworkAttachmentDefinitions NDClientSet *ndClientSet.Clientset @@ -70,21 +66,12 @@ func NewContextOrDie( discovery := discovery.NewFactoryFromConfigOrDie(restCfg) ndClientSet := ndClientSet.NewForConfigOrDie(restCfg) - clientSet, err := kubernetes.NewForConfig(restCfg) - if err != nil { - logrus.Fatalf("failed to build clientset: %v", err) - } - controllerFactory, err := controller.NewSharedControllerFactoryFromConfig(restCfg, runtime.NewScheme()) if err != nil { logrus.Fatalf("failed to build shared controller factory: %v", err) } utilruntime.Must(flscheme.AddToScheme(scheme.Scheme)) - eventBroadcaster := record.NewBroadcaster() - eventBroadcaster.StartLogging(logrus.Warnf) - eventBroadcaster.StartRecordingToSink(&typedcorev1.EventSinkImpl{Interface: clientSet.CoreV1().Events("")}) - recorder := eventBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{Component: "rancher-flat-network-operator"}) k8s, err := kubernetes.NewForConfig(restCfg) if err != nil { @@ -109,7 +96,6 @@ func NewContextOrDie( Networking: networking.Networking().V1(), Batch: batch.Batch().V1(), Discovery: discovery.Discovery().V1(), - Recorder: recorder, NDClientSet: ndClientSet, supportDiscoveryV1: supportDiscoveryV1,