Unverified Commit 63bfb193 authored by Derek Nola's avatar Derek Nola Committed by GitHub

[Release-1.28] Revert "Make svclb as simple as possible" (#11115)

* Revert "Make svclb as simple as possible" This reverts commit 1befd65a0a0ef387546fd1b9ca53b3dec4823f46. Signed-off-by: 's avatarmanuelbuil <mbuil@suse.com> Signed-off-by: 's avatarDerek Nola <derek.nola@suse.com> * Pin E2E tests to 22.04 Signed-off-by: 's avatarDerek Nola <derek.nola@suse.com> --------- Signed-off-by: 's avatarmanuelbuil <mbuil@suse.com> Signed-off-by: 's avatarDerek Nola <derek.nola@suse.com> Co-authored-by: 's avatarmanuelbuil <mbuil@suse.com>
parent 571f20aa
...@@ -33,12 +33,12 @@ jobs: ...@@ -33,12 +33,12 @@ jobs:
e2e: e2e:
name: "E2E Tests" name: "E2E Tests"
needs: build needs: build
runs-on: ubuntu-latest runs-on: ubuntu-22.04
timeout-minutes: 40 timeout-minutes: 40
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
etest: [startup, s3, btrfs, externalip, privateregistry, embeddedmirror, wasm, svcpoliciesandfirewall] etest: [startup, s3, btrfs, externalip, privateregistry, embeddedmirror, wasm]
max-parallel: 3 max-parallel: 3
steps: steps:
- name: "Checkout" - name: "Checkout"
......
...@@ -28,7 +28,7 @@ permissions: ...@@ -28,7 +28,7 @@ permissions:
jobs: jobs:
test: test:
name: Unit Tests name: Unit Tests
runs-on: ubuntu-latest runs-on: ubuntu-22.04
timeout-minutes: 20 timeout-minutes: 20
steps: steps:
- name: Checkout - name: Checkout
......
...@@ -2,12 +2,12 @@ package cloudprovider ...@@ -2,12 +2,12 @@ package cloudprovider
import ( import (
"context" "context"
"encoding/json"
"fmt" "fmt"
"sort" "sort"
"strconv"
"strings" "strings"
"time" "time"
"encoding/json"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
"github.com/k3s-io/k3s/pkg/util" "github.com/k3s-io/k3s/pkg/util"
...@@ -43,7 +43,6 @@ var ( ...@@ -43,7 +43,6 @@ var (
daemonsetNodeLabel = "svccontroller." + version.Program + ".cattle.io/enablelb" daemonsetNodeLabel = "svccontroller." + version.Program + ".cattle.io/enablelb"
daemonsetNodePoolLabel = "svccontroller." + version.Program + ".cattle.io/lbpool" daemonsetNodePoolLabel = "svccontroller." + version.Program + ".cattle.io/lbpool"
nodeSelectorLabel = "svccontroller." + version.Program + ".cattle.io/nodeselector" nodeSelectorLabel = "svccontroller." + version.Program + ".cattle.io/nodeselector"
extTrafficPolicyLabel = "svccontroller." + version.Program + ".cattle.io/exttrafficpolicy"
priorityAnnotation = "svccontroller." + version.Program + ".cattle.io/priorityclassname" priorityAnnotation = "svccontroller." + version.Program + ".cattle.io/priorityclassname"
tolerationsAnnotation = "svccontroller." + version.Program + ".cattle.io/tolerations" tolerationsAnnotation = "svccontroller." + version.Program + ".cattle.io/tolerations"
controllerName = names.ServiceLBController controllerName = names.ServiceLBController
...@@ -56,7 +55,7 @@ const ( ...@@ -56,7 +55,7 @@ const (
) )
var ( var (
DefaultLBImage = "rancher/mirrored-library-busybox:1.36.1" DefaultLBImage = "rancher/klipper-lb:v0.4.9"
) )
func (k *k3s) Register(ctx context.Context, func (k *k3s) Register(ctx context.Context,
...@@ -436,17 +435,35 @@ func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) { ...@@ -436,17 +435,35 @@ func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) {
oneInt := intstr.FromInt(1) oneInt := intstr.FromInt(1)
priorityClassName := k.getPriorityClassName(svc) priorityClassName := k.getPriorityClassName(svc)
localTraffic := servicehelper.RequestsOnlyLocalTraffic(svc) localTraffic := servicehelper.RequestsOnlyLocalTraffic(svc)
sourceRangesSet, err := servicehelper.GetLoadBalancerSourceRanges(svc)
if err != nil {
return nil, err
}
sourceRanges := strings.Join(sourceRangesSet.StringSlice(), ",")
securityContext := &core.PodSecurityContext{} securityContext := &core.PodSecurityContext{}
for _, ipFamily := range svc.Spec.IPFamilies {
switch ipFamily {
case core.IPv4Protocol:
securityContext.Sysctls = append(securityContext.Sysctls, core.Sysctl{Name: "net.ipv4.ip_forward", Value: "1"})
case core.IPv6Protocol:
securityContext.Sysctls = append(securityContext.Sysctls, core.Sysctl{Name: "net.ipv6.conf.all.forwarding", Value: "1"})
if sourceRanges == "0.0.0.0/0" {
// The upstream default load-balancer source range only includes IPv4, even if the service is IPv6-only or dual-stack.
// If using the default range, and IPv6 is enabled, also allow IPv6.
sourceRanges += ",::/0"
}
}
}
ds := &apps.DaemonSet{ ds := &apps.DaemonSet{
ObjectMeta: meta.ObjectMeta{ ObjectMeta: meta.ObjectMeta{
Name: name, Name: name,
Namespace: k.LBNamespace, Namespace: k.LBNamespace,
Labels: labels.Set{ Labels: labels.Set{
nodeSelectorLabel: "false", nodeSelectorLabel: "false",
svcNameLabel: svc.Name, svcNameLabel: svc.Name,
svcNamespaceLabel: svc.Namespace, svcNamespaceLabel: svc.Namespace,
extTrafficPolicyLabel: "Cluster",
}, },
}, },
TypeMeta: meta.TypeMeta{ TypeMeta: meta.TypeMeta{
...@@ -505,7 +522,6 @@ func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) { ...@@ -505,7 +522,6 @@ func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) {
Name: portName, Name: portName,
Image: k.LBImage, Image: k.LBImage,
ImagePullPolicy: core.PullIfNotPresent, ImagePullPolicy: core.PullIfNotPresent,
Command: []string{"sleep", "inf"},
Ports: []core.ContainerPort{ Ports: []core.ContainerPort{
{ {
Name: portName, Name: portName,
...@@ -514,7 +530,57 @@ func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) { ...@@ -514,7 +530,57 @@ func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) {
Protocol: port.Protocol, Protocol: port.Protocol,
}, },
}, },
Env: []core.EnvVar{
{
Name: "SRC_PORT",
Value: strconv.Itoa(int(port.Port)),
},
{
Name: "SRC_RANGES",
Value: sourceRanges,
},
{
Name: "DEST_PROTO",
Value: string(port.Protocol),
},
},
SecurityContext: &core.SecurityContext{
Capabilities: &core.Capabilities{
Add: []core.Capability{
"NET_ADMIN",
},
},
},
}
if localTraffic {
container.Env = append(container.Env,
core.EnvVar{
Name: "DEST_PORT",
Value: strconv.Itoa(int(port.NodePort)),
},
core.EnvVar{
Name: "DEST_IPS",
ValueFrom: &core.EnvVarSource{
FieldRef: &core.ObjectFieldSelector{
FieldPath: getHostIPsFieldPath(),
},
},
},
)
} else {
container.Env = append(container.Env,
core.EnvVar{
Name: "DEST_PORT",
Value: strconv.Itoa(int(port.Port)),
},
core.EnvVar{
Name: "DEST_IPS",
Value: strings.Join(svc.Spec.ClusterIPs, ","),
},
)
} }
ds.Spec.Template.Spec.Containers = append(ds.Spec.Template.Spec.Containers, container) ds.Spec.Template.Spec.Containers = append(ds.Spec.Template.Spec.Containers, container)
} }
...@@ -542,11 +608,6 @@ func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) { ...@@ -542,11 +608,6 @@ func (k *k3s) newDaemonSet(svc *core.Service) (*apps.DaemonSet, error) {
} }
ds.Spec.Template.Spec.Tolerations = append(ds.Spec.Template.Spec.Tolerations, tolerations...) ds.Spec.Template.Spec.Tolerations = append(ds.Spec.Template.Spec.Tolerations, tolerations...)
// Change the label to force the DaemonSet to update and call onPodChange if the ExternalTrafficPolicy changes
if localTraffic {
ds.Spec.Template.Labels[extTrafficPolicyLabel] = "Local"
}
return ds, nil return ds, nil
} }
...@@ -649,8 +710,8 @@ func (k *k3s) getPriorityClassName(svc *core.Service) string { ...@@ -649,8 +710,8 @@ func (k *k3s) getPriorityClassName(svc *core.Service) string {
return k.LBDefaultPriorityClassName return k.LBDefaultPriorityClassName
} }
// getTolerations retrieves the tolerations from a service's annotations. // getTolerations retrieves the tolerations from a service's annotations.
// It parses the tolerations from a JSON or YAML string stored in the annotations. // It parses the tolerations from a JSON or YAML string stored in the annotations.
func (k *k3s) getTolerations(svc *core.Service) ([]core.Toleration, error) { func (k *k3s) getTolerations(svc *core.Service) ([]core.Toleration, error) {
tolerationsStr, ok := svc.Annotations[tolerationsAnnotation] tolerationsStr, ok := svc.Annotations[tolerationsAnnotation]
if !ok { if !ok {
......
docker.io/rancher/klipper-helm:v0.9.3-build20241008 docker.io/rancher/klipper-helm:v0.9.3-build20241008
docker.io/rancher/klipper-lb:v0.4.9
docker.io/rancher/local-path-provisioner:v0.0.30 docker.io/rancher/local-path-provisioner:v0.0.30
docker.io/rancher/mirrored-coredns-coredns:1.11.3 docker.io/rancher/mirrored-coredns-coredns:1.11.3
docker.io/rancher/mirrored-library-busybox:1.36.1 docker.io/rancher/mirrored-library-busybox:1.36.1
......
---
name: "Bump Klipper LB version"
scms:
k3s:
kind: "github"
spec:
user: "{{ .github.user }}"
email: "{{ .github.email }}"
username: "{{ .github.username }}"
token: "{{ requiredEnv .github.token }}"
owner: "{{ .k3s.org }}"
repository: "{{ .k3s.repo }}"
branch: "{{ .k3s.branch }}"
commitmessage:
title: "Bump Klipper LB version"
klipper-lb:
kind: "github"
spec:
user: "{{ .github.user }}"
email: "{{ .github.email }}"
username: "{{ .github.username }}"
token: "{{ requiredEnv .github.token }}"
owner: "{{ .k3s.org }}"
repository: "{{ .klipper_lb.repo }}"
branch: "{{ .klipper_lb.branch }}"
actions:
github:
title: "Bump Klipper LB version"
kind: "github/pullrequest"
scmid: "k3s"
spec:
automerge: false
mergemethod: "squash"
usetitleforautomerge: true
parent: false
labels:
- "dependencies"
sources:
klipper-lb:
name: "Get Klipper LB latest release version"
kind: "githubrelease"
spec:
owner: "{{ .klipper_lb.org }}"
repository: "{{ .klipper_lb.repo }}"
branch: "{{ .klipper_lb.branch }}"
token: "{{ requiredEnv .github.token }}"
versionfilter:
kind: "latest"
conditions:
klipper-lb:
name: "Check rancher/klipper-lb image version in DockerHub"
kind: "dockerimage"
sourceid: "klipper-lb"
spec:
image: "rancher/klipper-lb"
targets:
klipper-lb:
name: "Update rancher/klipper-lb image versions"
kind: "file"
scmid: "k3s"
sourceid: "klipper-lb"
spec:
files:
- "pkg/cloudprovider/servicelb.go"
- "scripts/airgap/image-list.txt"
matchpattern: 'rancher/klipper-lb:v\d+\.\d+\.\d+(-\w+)?'
replacepattern: 'rancher/klipper-lb:{{ source "klipper-lb" }}'
...@@ -11,6 +11,10 @@ klipper_helm: ...@@ -11,6 +11,10 @@ klipper_helm:
org: "k3s-io" org: "k3s-io"
repo: "klipper-helm" repo: "klipper-helm"
branch: "master" branch: "master"
klipper_lb:
org: "k3s-io"
repo: "klipper-lb"
branch: "master"
local_path_provisioner: local_path_provisioner:
org: "rancher" org: "rancher"
repo: "local-path-provisioner" repo: "local-path-provisioner"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment