1- // Copyright (c) Tailscale Inc & AUTHORS
1+ // Copyright (c) Tailscale Inc & contributors
22// SPDX-License-Identifier: BSD-3-Clause
33
44//go:build !plan9
@@ -21,14 +21,14 @@ import (
2121 "strings"
2222 "time"
2323
24+ "github.com/pires/go-proxyproto"
2425 "go.uber.org/zap"
2526 "k8s.io/apimachinery/pkg/util/sets"
2627 "k8s.io/apiserver/pkg/endpoints/request"
2728 "k8s.io/client-go/rest"
2829 "k8s.io/client-go/transport"
2930 "tailscale.com/client/local"
3031 "tailscale.com/client/tailscale/apitype"
31- "tailscale.com/envknob"
3232 ksr "tailscale.com/k8s-operator/sessionrecording"
3333 "tailscale.com/kube/kubetypes"
3434 "tailscale.com/net/netx"
@@ -43,13 +43,7 @@ import (
4343var (
4444 // counterNumRequestsproxies counts the number of API server requests proxied via this proxy.
4545 counterNumRequestsProxied = clientmetric .NewCounter ("k8s_auth_proxy_requests_proxied" )
46- // NOTE: adding this metric so we can keep track of users during deprecation
47- counterExperimentalEventsVarUsed = clientmetric .NewCounter ("ts_experimental_kube_api_events_var_used" )
48- whoIsKey = ctxkey .New ("" , (* apitype .WhoIsResponse )(nil ))
49- )
50-
51- const (
52- eventsEnabledVar = "TS_EXPERIMENTAL_KUBE_API_EVENTS"
46+ whoIsKey = ctxkey .New ("" , (* apitype .WhoIsResponse )(nil ))
5347)
5448
5549// NewAPIServerProxy creates a new APIServerProxy that's ready to start once Run
@@ -103,7 +97,6 @@ func NewAPIServerProxy(zlog *zap.SugaredLogger, restConfig *rest.Config, ts *tsn
10397 upstreamURL : u ,
10498 ts : ts ,
10599 sendEventFunc : sessionrecording .SendEvent ,
106- eventsEnabled : envknob .Bool (eventsEnabledVar ),
107100 }
108101 ap .rp = & httputil.ReverseProxy {
109102 Rewrite : func (pr * httputil.ProxyRequest ) {
@@ -134,11 +127,6 @@ func (ap *APIServerProxy) Run(ctx context.Context) error {
134127 TLSNextProto : make (map [string ]func (* http.Server , * tls.Conn , http.Handler )),
135128 }
136129
137- if ap .eventsEnabled {
138- counterExperimentalEventsVarUsed .Add (1 )
139- ap .log .Warnf ("DEPRECATED: %q environment variable is deprecated, and will be removed in v1.96. See documentation for more detail." , eventsEnabledVar )
140- }
141-
142130 mode := "noauth"
143131 if ap .authMode {
144132 mode = "auth"
@@ -163,10 +151,18 @@ func (ap *APIServerProxy) Run(ctx context.Context) error {
163151 }
164152 } else {
165153 var err error
166- proxyLn , err = net .Listen ("tcp" , "localhost:80" )
154+ baseLn , err : = net .Listen ("tcp" , "localhost:80" )
167155 if err != nil {
168156 return fmt .Errorf ("could not listen on :80: %w" , err )
169157 }
158+ proxyLn = & proxyproto.Listener {
159+ Listener : baseLn ,
160+ ReadHeaderTimeout : 10 * time .Second ,
161+ ConnPolicy : proxyproto .ConnPolicyFunc (func (opts proxyproto.ConnPolicyOptions ) (proxyproto.Policy ,
162+ error ) {
163+ return proxyproto .REQUIRE , nil
164+ }),
165+ }
170166 serve = ap .hs .Serve
171167 }
172168
@@ -205,10 +201,6 @@ type APIServerProxy struct {
205201 upstreamURL * url.URL
206202
207203 sendEventFunc func (ap netip.AddrPort , event io.Reader , dial netx.DialFunc ) error
208-
209- // Flag used to enable sending API requests as events to tsrecorder.
210- // Deprecated: events are now set via ACLs (see https://tailscale.com/kb/1246/tailscale-ssh-session-recording#turn-on-session-recording-in-your-tailnet-policy-file)
211- eventsEnabled bool
212204}
213205
214206// serveDefault is the default handler for Kubernetes API server requests.
@@ -237,8 +229,7 @@ func (ap *APIServerProxy) serveDefault(w http.ResponseWriter, r *http.Request) {
237229 return
238230 }
239231
240- // NOTE: (ChaosInTheCRD) ap.eventsEnabled deprecated, remove in v1.96
241- if c .enableEvents || ap .eventsEnabled {
232+ if c .enableEvents {
242233 if err = ap .recordRequestAsEvent (r , who , c .recorderAddresses , c .failOpen ); err != nil {
243234 msg := fmt .Sprintf ("error recording Kubernetes API request: %v" , err )
244235 ap .log .Errorf (msg )
@@ -308,8 +299,7 @@ func (ap *APIServerProxy) sessionForProto(w http.ResponseWriter, r *http.Request
308299 return
309300 }
310301
311- // NOTE: (ChaosInTheCRD) ap.eventsEnabled deprecated, remove in v1.96
312- if c .enableEvents || ap .eventsEnabled {
302+ if c .enableEvents {
313303 if err = ap .recordRequestAsEvent (r , who , c .recorderAddresses , c .failOpen ); err != nil {
314304 msg := fmt .Sprintf ("error recording Kubernetes API request: %v" , err )
315305 ap .log .Errorf (msg )
0 commit comments