Skip to content

Commit d814f8f

Browse files
upgrade to latest dependencies (#1265)
bumping knative.dev/reconciler-test 03cc77c...785e0bd: > 785e0bd Improve error message when deleting resources (# 618) > 7d36fe9 Copy pull secrets to SA for eventshub (# 615) > e52650f upgrade to latest dependencies (# 606) bumping knative.dev/pkg bd99f2f...56bfe0d: > 56bfe0d [release-1.11] [CVE-2023-44487] Disable http2 for webhooks (# 2875) bumping knative.dev/eventing 6a695cb...0dadfd9: > 0dadfd9 [release-1.11] Scheduler: fix reserved replicas handling, blocking autoscaler and overcommitted pods (# 7374) > c1626f1 [release-1.11] Update dependencies (# 7362) > 46cc775 [release-1.11] TLS certificate rotation tests (# 7103) (# 7346) Signed-off-by: Knative Automation <[email protected]>
1 parent 5b654fb commit d814f8f

File tree

17 files changed

+525
-19
lines changed

17 files changed

+525
-19
lines changed

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ require (
2121
k8s.io/client-go v0.26.5
2222
k8s.io/code-generator v0.26.5
2323
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280
24-
knative.dev/eventing v0.38.4
24+
knative.dev/eventing v0.38.5
2525
knative.dev/hack v0.0.0-20230712131415-ddae80293c43
26-
knative.dev/pkg v0.0.0-20231011193800-bd99f2f98be7
27-
knative.dev/reconciler-test v0.0.0-20231010075208-03cc77c11831
26+
knative.dev/pkg v0.0.0-20231023150739-56bfe0dd9626
27+
knative.dev/reconciler-test v0.0.0-20231023114057-785e0bd2d9a2
2828
sigs.k8s.io/controller-runtime v0.14.6
2929
)
3030

go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -883,14 +883,14 @@ k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+O
883883
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
884884
k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU=
885885
k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
886-
knative.dev/eventing v0.38.4 h1:eH059bfeLilj2xAN6V7XXOh3wqzz5ssoMS/CIJpJfmk=
887-
knative.dev/eventing v0.38.4/go.mod h1:ct8t+v6nmp1kFCy6ngkDWIEvnjJDNDoKptrfnQVh+z8=
886+
knative.dev/eventing v0.38.5 h1:NvSy3lek9IbLLWEot36NyAfNv7VkJNl38F1ItVL0D6s=
887+
knative.dev/eventing v0.38.5/go.mod h1:g+iAS+KBRSKULEPqoVnseMkObDeq3SJhqefbuIu8zY8=
888888
knative.dev/hack v0.0.0-20230712131415-ddae80293c43 h1:3SE06uNfSFGm/5XS+0trbyCUpgsOaBeyhPQU8FPNFz8=
889889
knative.dev/hack v0.0.0-20230712131415-ddae80293c43/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
890-
knative.dev/pkg v0.0.0-20231011193800-bd99f2f98be7 h1:y3qbfYX1SuSr/1ysXvKfpV8q/kCwWLWieCUgAhBUHmQ=
891-
knative.dev/pkg v0.0.0-20231011193800-bd99f2f98be7/go.mod h1:g+UCgSKQ2f15kHYu/V3CPtoKo5F1x/2Y1ot0NSK7gA0=
892-
knative.dev/reconciler-test v0.0.0-20231010075208-03cc77c11831 h1:rOisVvTe0yuJNImgOex1Z4vdqXRPP1FAg5xPxbLOSlU=
893-
knative.dev/reconciler-test v0.0.0-20231010075208-03cc77c11831/go.mod h1:i+/PWK/n3HPgjXMoj5U7CA6WRW/C3c3EfHCQ0FmrhNM=
890+
knative.dev/pkg v0.0.0-20231023150739-56bfe0dd9626 h1:qFE+UDBRg6cpF5LbA0sv1XK4XZ36Z7aTRCa+HcuxnNQ=
891+
knative.dev/pkg v0.0.0-20231023150739-56bfe0dd9626/go.mod h1:g+UCgSKQ2f15kHYu/V3CPtoKo5F1x/2Y1ot0NSK7gA0=
892+
knative.dev/reconciler-test v0.0.0-20231023114057-785e0bd2d9a2 h1:Lenj/sGhPYZoCdl4bvoeZzA4Y1VS4LNEIWH1/HTU+6I=
893+
knative.dev/reconciler-test v0.0.0-20231023114057-785e0bd2d9a2/go.mod h1:HgugJUOhHZ3F6Tbhte92ecL0sBqJtCeJtd7K8jX+IJk=
894894
pgregory.net/rapid v0.3.3 h1:jCjBsY4ln4Atz78QoBWxUEvAHaFyNDQg9+WU62aCn1U=
895895
pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU=
896896
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/*
2+
Copyright 2023 The Knative Authors
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package broker
18+
19+
import (
20+
"context"
21+
"time"
22+
23+
cetest "github.com/cloudevents/sdk-go/v2/test"
24+
"github.com/google/uuid"
25+
"k8s.io/apimachinery/pkg/types"
26+
"knative.dev/pkg/system"
27+
"knative.dev/reconciler-test/pkg/eventshub"
28+
"knative.dev/reconciler-test/pkg/eventshub/assert"
29+
"knative.dev/reconciler-test/pkg/feature"
30+
"knative.dev/reconciler-test/pkg/resources/service"
31+
"knative.dev/reconciler-test/resources/certificate"
32+
33+
"knative.dev/eventing/test/rekt/features/featureflags"
34+
"knative.dev/eventing/test/rekt/resources/addressable"
35+
"knative.dev/eventing/test/rekt/resources/broker"
36+
"knative.dev/eventing/test/rekt/resources/trigger"
37+
)
38+
39+
func RotateMTChannelBrokerTLSCertificates() *feature.Feature {
40+
ingressCertificateName := "mt-broker-ingress-server-tls"
41+
ingressSecretName := "mt-broker-ingress-server-tls"
42+
43+
filterCertificateName := "mt-broker-filter-server-tls"
44+
45+
brokerName := feature.MakeRandomK8sName("broker")
46+
triggerName := feature.MakeRandomK8sName("trigger")
47+
sink := feature.MakeRandomK8sName("sink")
48+
source := feature.MakeRandomK8sName("source")
49+
50+
f := feature.NewFeatureNamed("Rotate MTChannelBroker TLS certificate")
51+
52+
f.Prerequisite("transport encryption is strict", featureflags.TransportEncryptionStrict())
53+
f.Prerequisite("should not run when Istio is enabled", featureflags.IstioDisabled())
54+
55+
f.Setup("Rotate ingress certificate", certificate.Rotate(certificate.RotateCertificate{
56+
Certificate: types.NamespacedName{
57+
Namespace: system.Namespace(),
58+
Name: ingressCertificateName,
59+
},
60+
}))
61+
// We cannot externally verify this certificate rotation
62+
f.Setup("Rotate filter certificate", certificate.Rotate(certificate.RotateCertificate{
63+
Certificate: types.NamespacedName{
64+
Namespace: system.Namespace(),
65+
Name: filterCertificateName,
66+
},
67+
}))
68+
69+
f.Setup("install sink", eventshub.Install(sink, eventshub.StartReceiverTLS))
70+
f.Setup("install broker", broker.Install(brokerName, broker.WithEnvConfig()...))
71+
f.Setup("Broker is ready", broker.IsReady(brokerName))
72+
f.Setup("install trigger", func(ctx context.Context, t feature.T) {
73+
d := service.AsDestinationRef(sink)
74+
d.CACerts = eventshub.GetCaCerts(ctx)
75+
trigger.Install(triggerName, brokerName, trigger.WithSubscriberFromDestination(d))(ctx, t)
76+
})
77+
f.Setup("trigger is ready", trigger.IsReady(triggerName))
78+
f.Setup("Broker has HTTPS address", broker.ValidateAddress(brokerName, addressable.AssertHTTPSAddress))
79+
80+
event := cetest.FullEvent()
81+
event.SetID(uuid.New().String())
82+
83+
f.Requirement("install source", eventshub.Install(source,
84+
eventshub.StartSenderToResourceTLS(broker.GVR(), brokerName, nil),
85+
eventshub.InputEvent(event),
86+
// Send multiple events so that we take into account that the certificate rotation might
87+
// be detected by the server after some time.
88+
eventshub.SendMultipleEvents(100, 3*time.Second),
89+
))
90+
91+
f.Assert("Event sent", assert.OnStore(source).
92+
MatchSentEvent(cetest.HasId(event.ID())).
93+
AtLeast(1),
94+
)
95+
f.Assert("Event received", assert.OnStore(sink).
96+
MatchReceivedEvent(cetest.HasId(event.ID())).
97+
AtLeast(1),
98+
)
99+
f.Assert("Source match updated peer certificate", assert.OnStore(source).
100+
MatchPeerCertificatesReceived(assert.MatchPeerCertificatesFromSecret(system.Namespace(), ingressSecretName, "tls.crt")).
101+
AtLeast(1),
102+
)
103+
104+
return f
105+
}

vendor/knative.dev/eventing/test/rekt/features/featureflags/featureflags.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,20 @@ func TransportEncryptionPermissiveOrStrict() feature.ShouldRun {
4646
}
4747
}
4848

49+
func TransportEncryptionStrict() feature.ShouldRun {
50+
return func(ctx context.Context, t feature.T) (feature.PrerequisiteResult, error) {
51+
flags, err := getFeatureFlags(ctx, "config-features")
52+
if err != nil {
53+
return feature.PrerequisiteResult{}, err
54+
}
55+
56+
return feature.PrerequisiteResult{
57+
ShouldRun: flags.IsStrictTransportEncryption(),
58+
Reason: flags.String(),
59+
}, nil
60+
}
61+
}
62+
4963
func IstioDisabled() feature.ShouldRun {
5064
return func(ctx context.Context, t feature.T) (feature.PrerequisiteResult, error) {
5165
flags, err := getFeatureFlags(ctx, "config-features")

vendor/knative.dev/eventing/test/rekt/resources/addressable/addressable.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package addressable
1818

1919
import (
2020
"context"
21+
"fmt"
2122
"time"
2223

2324
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -27,6 +28,8 @@ import (
2728
"knative.dev/reconciler-test/pkg/k8s"
2829
)
2930

31+
type ValidateAddress func(addressable *duckv1.Addressable) error
32+
3033
// Address returns a broker's address.
3134
func Address(ctx context.Context, gvr schema.GroupVersionResource, name string, timings ...time.Duration) (*duckv1.Addressable, error) {
3235
interval, timeout := k8s.PollTimings(ctx, timings)
@@ -51,3 +54,10 @@ func Address(ctx context.Context, gvr schema.GroupVersionResource, name string,
5154
})
5255
return addr, err
5356
}
57+
58+
func AssertHTTPSAddress(addr *duckv1.Addressable) error {
59+
if addr.URL.Scheme != "https" {
60+
return fmt.Errorf("address is not HTTPS: %#v", addr)
61+
}
62+
return nil
63+
}

vendor/knative.dev/eventing/test/rekt/resources/broker/broker.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,21 @@ func IsAddressable(name string, timings ...time.Duration) feature.StepFn {
158158
return k8s.IsAddressable(GVR(), name, timings...)
159159
}
160160

161+
// ValidateAddress validates the address retured by Address
162+
func ValidateAddress(name string, validate addressable.ValidateAddress, timings ...time.Duration) feature.StepFn {
163+
return func(ctx context.Context, t feature.T) {
164+
addr, err := Address(ctx, name, timings...)
165+
if err != nil {
166+
t.Error(err)
167+
return
168+
}
169+
if err := validate(addr); err != nil {
170+
t.Error(err)
171+
return
172+
}
173+
}
174+
}
175+
161176
// Address returns a broker's address.
162177
func Address(ctx context.Context, name string, timings ...time.Duration) (*duckv1.Addressable, error) {
163178
return addressable.Address(ctx, GVR(), name, timings...)

vendor/knative.dev/eventing/test/rekt/resources/channel_impl/channel_impl.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,3 +172,18 @@ func AsDestinationRef(name string) *duckv1.Destination {
172172

173173
// WithDeadLetterSink adds the dead letter sink related config to a Subscription spec.
174174
var WithDeadLetterSink = delivery.WithDeadLetterSink
175+
176+
// ValidateAddress validates the address retured by Address
177+
func ValidateAddress(name string, validate addressable.ValidateAddress, timings ...time.Duration) feature.StepFn {
178+
return func(ctx context.Context, t feature.T) {
179+
addr, err := Address(ctx, name, timings...)
180+
if err != nil {
181+
t.Error(err)
182+
return
183+
}
184+
if err := validate(addr); err != nil {
185+
t.Error(err)
186+
return
187+
}
188+
}
189+
}

vendor/knative.dev/eventing/test/rekt/resources/subscription/subscription.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ package subscription
1919
import (
2020
"context"
2121
"embed"
22+
"strings"
2223
"time"
2324

2425
"k8s.io/apimachinery/pkg/runtime/schema"
25-
"knative.dev/eventing/test/rekt/resources/delivery"
2626
duckv1 "knative.dev/pkg/apis/duck/v1"
2727
"knative.dev/reconciler-test/pkg/feature"
2828
"knative.dev/reconciler-test/pkg/k8s"
2929
"knative.dev/reconciler-test/pkg/manifest"
30+
31+
"knative.dev/eventing/test/rekt/resources/delivery"
3032
)
3133

3234
//go:embed *.yaml
@@ -128,3 +130,36 @@ func Install(name string, opts ...manifest.CfgFn) feature.StepFn {
128130
func IsReady(name string, timing ...time.Duration) feature.StepFn {
129131
return k8s.IsReady(gvr(), name, timing...)
130132
}
133+
134+
// WithSubscriberFromDestination adds the subscriber related config to a Trigger spec.
135+
func WithSubscriberFromDestination(dest *duckv1.Destination) manifest.CfgFn {
136+
return func(cfg map[string]interface{}) {
137+
if _, set := cfg["subscriber"]; !set {
138+
cfg["subscriber"] = map[string]interface{}{}
139+
}
140+
subscriber := cfg["subscriber"].(map[string]interface{})
141+
142+
uri := dest.URI
143+
ref := dest.Ref
144+
145+
if dest.CACerts != nil {
146+
// This is a multi-line string and should be indented accordingly.
147+
// Replace "new line" with "new line + spaces".
148+
subscriber["CACerts"] = strings.ReplaceAll(*dest.CACerts, "\n", "\n ")
149+
}
150+
151+
if uri != nil {
152+
subscriber["uri"] = uri.String()
153+
}
154+
if ref != nil {
155+
if _, set := subscriber["ref"]; !set {
156+
subscriber["ref"] = map[string]interface{}{}
157+
}
158+
sref := subscriber["ref"].(map[string]interface{})
159+
sref["apiVersion"] = ref.APIVersion
160+
sref["kind"] = ref.Kind
161+
// skip namespace
162+
sref["name"] = ref.Name
163+
}
164+
}
165+
}

vendor/knative.dev/eventing/test/rekt/resources/subscription/subscription.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ spec:
3636
{{ if .subscriber.uri }}
3737
uri: {{ .subscriber.uri }}
3838
{{ end }}
39+
{{ if .subscriber.CACerts }}
40+
CACerts: |-
41+
{{ .subscriber.CACerts }}
42+
{{ end }}
3943
{{ end }}
4044
{{if .reply }}
4145
reply:
@@ -53,6 +57,10 @@ spec:
5357
{{ if .reply.uri }}
5458
uri: {{ .reply.uri }}
5559
{{ end }}
60+
{{ if .reply.CACerts }}
61+
CACerts: |-
62+
{{ .reply.CACerts }}
63+
{{ end }}
5664
{{ end }}
5765
{{ if .delivery }}
5866
delivery:
@@ -72,6 +80,10 @@ spec:
7280
{{ if .delivery.deadLetterSink.uri }}
7381
uri: {{ .delivery.deadLetterSink.uri }}
7482
{{ end }}
83+
{{ if .delivery.deadLetterSink.CACerts }}
84+
CACerts: |-
85+
{{ .delivery.deadLetterSink.CACerts }}
86+
{{ end }}
7587
{{ end }}
7688
{{ if .delivery.retry }}
7789
retry: {{ .delivery.retry}}

vendor/knative.dev/pkg/webhook/webhook.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,17 @@ type Options struct {
7474
// ControllerOptions encapsulates options for creating a new controller,
7575
// including throttling and stats behavior.
7676
ControllerOptions *controller.ControllerOptions
77+
78+
// EnableHTTP2 enables HTTP2 for webhooks.
79+
// Mitigate CVE-2023-44487 by disabling HTTP2 by default until the Go
80+
// standard library and golang.org/x/net are fully fixed.
81+
// Right now, it is possible for authenticated and unauthenticated users to
82+
// hold open HTTP2 connections and consume huge amounts of memory.
83+
// See:
84+
// * https://github.com/kubernetes/kubernetes/pull/121120
85+
// * https://github.com/kubernetes/kubernetes/issues/121197
86+
// * https://github.com/golang/go/issues/63417#issuecomment-1758858612
87+
EnableHTTP2 bool
7788
}
7889

7990
// Operation is the verb being operated on
@@ -237,12 +248,19 @@ func (wh *Webhook) Run(stop <-chan struct{}) error {
237248
QuietPeriod: wh.Options.GracePeriod,
238249
}
239250

251+
// If TLSNextProto is not nil, HTTP/2 support is not enabled automatically.
252+
nextProto := map[string]func(*http.Server, *tls.Conn, http.Handler){}
253+
if wh.Options.EnableHTTP2 {
254+
nextProto = nil
255+
}
256+
240257
server := &http.Server{
241258
ErrorLog: log.New(&zapWrapper{logger}, "", 0),
242259
Handler: drainer,
243260
Addr: fmt.Sprint(":", wh.Options.Port),
244261
TLSConfig: wh.tlsConfig,
245262
ReadHeaderTimeout: time.Minute, //https://medium.com/a-journey-with-go/go-understand-and-mitigate-slowloris-attack-711c1b1403f6
263+
TLSNextProto: nextProto,
246264
}
247265

248266
var serve = server.ListenAndServe

0 commit comments

Comments
 (0)