Skip to content

Commit e87868f

Browse files
rainestczeslavoprogrammer04
authored
Backport Kuma updates to 0.39 (#1017)
* feat: install default allow-all traffic permission when kuma >= 2.6.0 (#957) * feat: use kuma version when installing it (#949) Co-authored-by: Jakub Warczarek <jakub.warczarek@konghq.com> * chore: test on PRs to release branches * run lint workflow for all branches * fix linter issues --------- Co-authored-by: Grzegorz Burzyński <czeslavo@gmail.com> Co-authored-by: Jakub Warczarek <jakub.warczarek@konghq.com>
1 parent 0389356 commit e87868f

File tree

10 files changed

+71
-20
lines changed

10 files changed

+71
-20
lines changed

.github/workflows/lint.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ name: lint
33
on:
44
pull_request:
55
branches:
6-
- '*'
6+
- '**'
77
push:
88
branches:
99
- 'main'
1010
tags:
11-
- '*'
11+
- '**'
1212
workflow_dispatch: {}
1313

1414
jobs:

.github/workflows/tests.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ on:
1010
pull_request:
1111
branches:
1212
- 'main'
13+
- 'release/[0-9]+.[0-9]+.x'
1314
push:
1415
branches:
1516
- 'main'
@@ -114,7 +115,7 @@ jobs:
114115
if: steps.detect_if_should_run_enterprise.outputs.result == 'true'
115116
id: license
116117
with:
117-
password: ${{ secrets.PULP_PASSWORD }}
118+
op-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
118119

119120
- name: setup golang
120121
uses: actions/setup-go@v4
@@ -196,7 +197,7 @@ jobs:
196197
if: steps.detect_if_should_run.outputs.result == 'true'
197198
id: license
198199
with:
199-
password: ${{ secrets.PULP_PASSWORD }}
200+
op-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
200201

201202
- name: checkout repository
202203
if: steps.detect_if_should_run.outputs.result == 'true'

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## v0.39.2
4+
5+
- Backport Kuma changes to honor version and handle Kuma 2.6.0 traffic
6+
permissions properly.
7+
[#1017](https://github.com/Kong/kubernetes-testing-framework/pull/1017)
8+
39
## v0.39.1
410

511
- Removed a module exclude that made `go install` unhappy.

internal/cmd/ktf/environments.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func init() { //nolint:gochecknoinits
6262
var environmentsCreateCmd = &cobra.Command{
6363
Use: "create",
6464
Short: "create a new testing environment",
65-
Run: func(cmd *cobra.Command, args []string) {
65+
Run: func(cmd *cobra.Command, _ []string) {
6666
ctx, cancel := context.WithTimeout(context.Background(), EnvironmentCreateTimeout)
6767
defer cancel()
6868

@@ -286,7 +286,7 @@ func init() { //nolint:gochecknoinits
286286
var environmentsDeleteCmd = &cobra.Command{
287287
Use: "delete",
288288
Short: "delete a testing environment",
289-
Run: func(cmd *cobra.Command, args []string) {
289+
Run: func(cmd *cobra.Command, _ []string) {
290290
ctx, cancel := context.WithTimeout(context.Background(), EnvironmentCreateTimeout)
291291
defer cancel()
292292

pkg/clusters/addons/kong/addon.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ func (a *Addon) Deploy(ctx context.Context, cluster clusters.Cluster) error {
240240
if opts.Server == "" {
241241
opts.Server = "https://index.docker.io/v1/"
242242
}
243-
opts.PrintObj = func(obj runtime.Object) error {
243+
opts.PrintObj = func(_ runtime.Object) error {
244244
return nil
245245
}
246246

@@ -606,7 +606,8 @@ func urlForService(ctx context.Context, cluster clusters.Cluster, nsn types.Name
606606
return nil, err
607607
}
608608

609-
switch service.Spec.Type { //nolint:exhaustive
609+
//nolint:exhaustive
610+
switch service.Spec.Type {
610611
case corev1.ServiceTypeLoadBalancer:
611612
if len(service.Status.LoadBalancer.Ingress) == 1 {
612613
return url.Parse(fmt.Sprintf("http://%s:%d", service.Status.LoadBalancer.Ingress[0].IP, port))

pkg/clusters/addons/kuma/addon.go

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type Addon struct {
4545
name string
4646
logger *logrus.Logger
4747

48-
version semver.Version
48+
version *semver.Version
4949

5050
mtlsEnabled bool
5151
}
@@ -61,9 +61,14 @@ func (a *Addon) Namespace() string {
6161
return Namespace
6262
}
6363

64-
// Version indicates the Kuma version for this addon.
65-
func (a *Addon) Version() semver.Version {
66-
return a.version
64+
// Version returns the version of the Kuma Helm chart deployed by the addon.
65+
// If the version is not set, the second return value will be false and the latest local
66+
// chart version will be used.
67+
func (a *Addon) Version() (v semver.Version, ok bool) {
68+
if a.version == nil {
69+
return semver.Version{}, false
70+
}
71+
return *a.version, true
6772
}
6873

6974
// -----------------------------------------------------------------------------
@@ -144,6 +149,10 @@ func (a *Addon) Deploy(ctx context.Context, cluster clusters.Cluster) error {
144149
// if the dbmode is postgres, set several related values
145150
args := []string{"--kubeconfig", kubeconfig.Name(), "install", DefaultReleaseName, "kuma/kuma"}
146151

152+
if a.version != nil {
153+
args = append(args, "--version", a.version.String())
154+
}
155+
147156
// compile the helm installation values
148157
args = append(args, "--create-namespace", "--namespace", Namespace)
149158
a.logger.Debugf("helm install arguments: %+v", args)
@@ -225,20 +234,49 @@ spec:
225234
name: ca-1
226235
type: builtin
227236
enabledBackend: ca-1`
237+
238+
allowAllTrafficPermission = `apiVersion: kuma.io/v1alpha1
239+
kind: MeshTrafficPermission
240+
metadata:
241+
name: allow-all
242+
namespace: kuma-system
243+
labels:
244+
kuma.io/mesh: default
245+
spec:
246+
targetRef:
247+
kind: Mesh
248+
from:
249+
- targetRef:
250+
kind: Mesh
251+
default:
252+
action: Allow`
253+
)
254+
255+
var (
256+
// From Kuma 2.6.0, the default mesh traffic permission is no longer created by default
257+
// and must be created manually if mTLS is enabled.
258+
// https://github.com/kumahq/kuma/blob/2.6.0/UPGRADE.md#default-trafficroute-and-trafficpermission-resources-are-not-created-when-creating-a-new-mesh
259+
installDefaultMeshTrafficPermissionCutoffVersion = semver.MustParse("2.6.0")
228260
)
229261

230262
// enableMTLS attempts to apply a Mesh resource with a basic retry mechanism to deal with delays in the Kuma webhook
231263
// startup
232264
func (a *Addon) enableMTLS(ctx context.Context, cluster clusters.Cluster) (err error) {
233265
ticker := time.NewTicker(5 * time.Second) //nolint:gomnd
266+
defer ticker.Stop()
234267
timeoutTimer := time.NewTimer(time.Minute)
235268

236269
for {
237270
select {
238271
case <-ctx.Done():
239272
return fmt.Errorf("context completed while retrying to apply Mesh")
240273
case <-ticker.C:
241-
err = clusters.ApplyManifestByYAML(ctx, cluster, mtlsEnabledDefaultMesh)
274+
yamlToApply := mtlsEnabledDefaultMesh
275+
if v, ok := a.Version(); ok && v.GTE(installDefaultMeshTrafficPermissionCutoffVersion) {
276+
a.logger.Infof("Kuma version is %s or later, creating default mesh traffic permission", installDefaultMeshTrafficPermissionCutoffVersion)
277+
yamlToApply = strings.Join([]string{mtlsEnabledDefaultMesh, allowAllTrafficPermission}, "\n---\n")
278+
}
279+
err = clusters.ApplyManifestByYAML(ctx, cluster, yamlToApply)
242280
if err == nil {
243281
return nil
244282
}

pkg/clusters/addons/kuma/builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
// Builder is a configuration tool to generate Kuma cluster addons.
1515
type Builder struct {
1616
name string
17-
version semver.Version
17+
version *semver.Version
1818
logger *logrus.Logger
1919

2020
mtlsEnabled bool
@@ -29,7 +29,7 @@ func NewBuilder() *Builder {
2929

3030
// WithVersion configures the specific version of Kuma which should be deployed.
3131
func (b *Builder) WithVersion(version semver.Version) *Builder {
32-
b.version = version
32+
b.version = &version
3333
return b
3434
}
3535

pkg/environments/builder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ func (b *Builder) Build(ctx context.Context) (env Environment, err error) {
185185
cluster: cluster,
186186
}, nil
187187
case 1:
188-
return nil, addonDeploymentErrors[0] //nolint:gosec
188+
return nil, addonDeploymentErrors[0]
189189
default:
190190
errMsgs := make([]string, 0, totalFailures)
191191
for _, err := range addonDeploymentErrors {

pkg/utils/kong/fake_admin_api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ type FakeAdminAPIServer struct {
4141
func NewFakeAdminAPIServer() (*FakeAdminAPIServer, error) {
4242
// start up the fake admin api server
4343
mocks := make(chan AdminAPIResponse, maxMocks)
44-
endpoint := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
44+
endpoint := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
4545
select {
4646
case override := <-mocks:
4747
// run any callbacks that were configured in the mock (these are optional)

test/e2e/gke_cluster_test.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ import (
2828
"github.com/kong/kubernetes-testing-framework/pkg/utils/kubernetes/generators"
2929
)
3030

31+
const (
32+
gkeVersionMajor = 1
33+
gkeVersionMinor = 29
34+
)
35+
3136
var (
3237
gkeCreds = os.Getenv(gke.GKECredsVar)
3338
gkeProject = os.Getenv(gke.GKEProjectVar)
@@ -60,7 +65,7 @@ func testGKECluster(t *testing.T, createSubnet bool) {
6065

6166
t.Logf("configuring the GKE cluster PROJECT=(%s) LOCATION=(%s)", gkeProject, gkeLocation)
6267
builder := gke.NewBuilder([]byte(gkeCreds), gkeProject, gkeLocation)
63-
builder.WithClusterMinorVersion(1, 24)
68+
builder.WithClusterMinorVersion(gkeVersionMajor, gkeVersionMinor)
6469
builder.WithWaitForTeardown(false)
6570
builder.WithCreateSubnet(createSubnet)
6671
builder.WithLabels(map[string]string{"test-cluster": "true"})
@@ -113,8 +118,8 @@ func testGKECluster(t *testing.T, createSubnet bool) {
113118
t.Log("validating kubernetes cluster version")
114119
kubernetesVersion, err := env.Cluster().Version()
115120
require.NoError(t, err)
116-
require.Equal(t, uint64(1), kubernetesVersion.Major)
117-
require.Equal(t, uint64(24), kubernetesVersion.Minor)
121+
require.Equal(t, uint64(gkeVersionMajor), kubernetesVersion.Major)
122+
require.Equal(t, uint64(gkeVersionMinor), kubernetesVersion.Minor)
118123

119124
t.Log("verifying that the kong addon deployed both proxy and controller")
120125
kongAddon, err := env.Cluster().GetAddon("kong")

0 commit comments

Comments
 (0)