|
|
|
@ -2,8 +2,10 @@ package manifests |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
import ( |
|
|
|
"fmt" |
|
|
|
"fmt" |
|
|
|
|
|
|
|
"strings" |
|
|
|
"testing" |
|
|
|
"testing" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
openshiftconfigv1 "github.com/openshift/api/config/v1" |
|
|
|
appsv1 "k8s.io/api/apps/v1" |
|
|
|
appsv1 "k8s.io/api/apps/v1" |
|
|
|
corev1 "k8s.io/api/core/v1" |
|
|
|
corev1 "k8s.io/api/core/v1" |
|
|
|
"sigs.k8s.io/controller-runtime/pkg/client" |
|
|
|
"sigs.k8s.io/controller-runtime/pkg/client" |
|
|
|
@ -11,6 +13,7 @@ import ( |
|
|
|
configv1 "github.com/grafana/loki/operator/apis/config/v1" |
|
|
|
configv1 "github.com/grafana/loki/operator/apis/config/v1" |
|
|
|
lokiv1 "github.com/grafana/loki/operator/apis/loki/v1" |
|
|
|
lokiv1 "github.com/grafana/loki/operator/apis/loki/v1" |
|
|
|
"github.com/grafana/loki/operator/internal/manifests/internal" |
|
|
|
"github.com/grafana/loki/operator/internal/manifests/internal" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
@ -83,6 +86,88 @@ func TestApplyUserOptions_AlwaysSetCompactorReplicasToOne(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestApplyTLSSettings_OverrideDefaults(t *testing.T) { |
|
|
|
|
|
|
|
type tt struct { |
|
|
|
|
|
|
|
desc string |
|
|
|
|
|
|
|
profile openshiftconfigv1.TLSSecurityProfile |
|
|
|
|
|
|
|
expected TLSProfileSpec |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tc := []tt{ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
desc: "Old profile", |
|
|
|
|
|
|
|
profile: openshiftconfigv1.TLSSecurityProfile{ |
|
|
|
|
|
|
|
Type: openshiftconfigv1.TLSProfileOldType, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
expected: TLSProfileSpec{ |
|
|
|
|
|
|
|
MinTLSVersion: "VersionTLS10", |
|
|
|
|
|
|
|
Ciphers: []string{ |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", |
|
|
|
|
|
|
|
"TLS_RSA_WITH_AES_128_GCM_SHA256", |
|
|
|
|
|
|
|
"TLS_RSA_WITH_AES_256_GCM_SHA384", |
|
|
|
|
|
|
|
"TLS_RSA_WITH_AES_128_CBC_SHA256", |
|
|
|
|
|
|
|
"TLS_RSA_WITH_AES_128_CBC_SHA", |
|
|
|
|
|
|
|
"TLS_RSA_WITH_AES_256_CBC_SHA", |
|
|
|
|
|
|
|
"TLS_RSA_WITH_3DES_EDE_CBC_SHA", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
desc: "Intermediate profile", |
|
|
|
|
|
|
|
profile: openshiftconfigv1.TLSSecurityProfile{ |
|
|
|
|
|
|
|
Type: openshiftconfigv1.TLSProfileIntermediateType, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
expected: TLSProfileSpec{ |
|
|
|
|
|
|
|
MinTLSVersion: "VersionTLS12", |
|
|
|
|
|
|
|
Ciphers: []string{ |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
desc: "Modern profile", |
|
|
|
|
|
|
|
profile: openshiftconfigv1.TLSSecurityProfile{ |
|
|
|
|
|
|
|
Type: openshiftconfigv1.TLSProfileModernType, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
expected: TLSProfileSpec{ |
|
|
|
|
|
|
|
MinTLSVersion: "VersionTLS13", |
|
|
|
|
|
|
|
// Go lib crypto doesn't allow ciphers to be configured for TLS 1.3
|
|
|
|
|
|
|
|
// (Read this and weep: https://github.com/golang/go/issues/29349)
|
|
|
|
|
|
|
|
Ciphers: []string{}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for _, tc := range tc { |
|
|
|
|
|
|
|
tc := tc |
|
|
|
|
|
|
|
t.Run(tc.desc, func(t *testing.T) { |
|
|
|
|
|
|
|
t.Parallel() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
opts := Options{} |
|
|
|
|
|
|
|
err := ApplyTLSSettings(&opts, &tc.profile) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
require.Nil(t, err) |
|
|
|
|
|
|
|
require.EqualValues(t, tc.expected, opts.TLSProfile) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func TestBuildAll_WithFeatureGates_ServiceMonitors(t *testing.T) { |
|
|
|
func TestBuildAll_WithFeatureGates_ServiceMonitors(t *testing.T) { |
|
|
|
type test struct { |
|
|
|
type test struct { |
|
|
|
desc string |
|
|
|
desc string |
|
|
|
@ -242,9 +327,19 @@ func TestBuildAll_WithFeatureGates_HTTPEncryption(t *testing.T) { |
|
|
|
HTTPEncryption: true, |
|
|
|
HTTPEncryption: true, |
|
|
|
}, |
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
ciphers := strings.Join([]string{ |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", |
|
|
|
|
|
|
|
}, ",") |
|
|
|
|
|
|
|
|
|
|
|
err := ApplyDefaultSettings(&opts) |
|
|
|
err := ApplyDefaultSettings(&opts) |
|
|
|
require.NoError(t, err) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
err = ApplyTLSSettings(&opts, nil) |
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
objects, buildErr := BuildAll(opts) |
|
|
|
objects, buildErr := BuildAll(opts) |
|
|
|
require.NoError(t, buildErr) |
|
|
|
require.NoError(t, buildErr) |
|
|
|
|
|
|
|
|
|
|
|
@ -295,6 +390,8 @@ func TestBuildAll_WithFeatureGates_HTTPEncryption(t *testing.T) { |
|
|
|
} |
|
|
|
} |
|
|
|
require.Contains(t, vms, expVolumeMount) |
|
|
|
require.Contains(t, vms, expVolumeMount) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
require.Contains(t, args, "-server.tls-min-version=VersionTLS12") |
|
|
|
|
|
|
|
require.Contains(t, args, fmt.Sprintf("-server.tls-cipher-suites=%s", ciphers)) |
|
|
|
require.Contains(t, args, "-server.http-tls-cert-path=/var/run/tls/http/tls.crt") |
|
|
|
require.Contains(t, args, "-server.http-tls-cert-path=/var/run/tls/http/tls.crt") |
|
|
|
require.Contains(t, args, "-server.http-tls-key-path=/var/run/tls/http/tls.key") |
|
|
|
require.Contains(t, args, "-server.http-tls-key-path=/var/run/tls/http/tls.key") |
|
|
|
require.Equal(t, corev1.URISchemeHTTPS, rps) |
|
|
|
require.Equal(t, corev1.URISchemeHTTPS, rps) |
|
|
|
@ -484,6 +581,15 @@ func TestBuildAll_WithFeatureGates_GRPCEncryption(t *testing.T) { |
|
|
|
"test-ruler": "test-ruler-grpc", |
|
|
|
"test-ruler": "test-ruler-grpc", |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ciphers := strings.Join([]string{ |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", |
|
|
|
|
|
|
|
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", |
|
|
|
|
|
|
|
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", |
|
|
|
|
|
|
|
}, ",") |
|
|
|
|
|
|
|
|
|
|
|
for _, tst := range table { |
|
|
|
for _, tst := range table { |
|
|
|
tst := tst |
|
|
|
tst := tst |
|
|
|
t.Run(tst.desc, func(t *testing.T) { |
|
|
|
t.Run(tst.desc, func(t *testing.T) { |
|
|
|
@ -492,6 +598,9 @@ func TestBuildAll_WithFeatureGates_GRPCEncryption(t *testing.T) { |
|
|
|
err := ApplyDefaultSettings(&tst.BuildOptions) |
|
|
|
err := ApplyDefaultSettings(&tst.BuildOptions) |
|
|
|
require.NoError(t, err) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err = ApplyTLSSettings(&tst.BuildOptions, nil) |
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
|
|
objs, err := BuildAll(tst.BuildOptions) |
|
|
|
objs, err := BuildAll(tst.BuildOptions) |
|
|
|
require.NoError(t, err) |
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
|
|
@ -516,6 +625,8 @@ func TestBuildAll_WithFeatureGates_GRPCEncryption(t *testing.T) { |
|
|
|
args := []string{ |
|
|
|
args := []string{ |
|
|
|
"-server.grpc-tls-cert-path=/var/run/tls/grpc/tls.crt", |
|
|
|
"-server.grpc-tls-cert-path=/var/run/tls/grpc/tls.crt", |
|
|
|
"-server.grpc-tls-key-path=/var/run/tls/grpc/tls.key", |
|
|
|
"-server.grpc-tls-key-path=/var/run/tls/grpc/tls.key", |
|
|
|
|
|
|
|
"-server.tls-min-version=VersionTLS12", |
|
|
|
|
|
|
|
fmt.Sprintf("-server.tls-cipher-suites=%s", ciphers), |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
vm := corev1.VolumeMount{ |
|
|
|
vm := corev1.VolumeMount{ |
|
|
|
|