Skip to content
This repository was archived by the owner on May 17, 2024. It is now read-only.

Commit c3b84bd

Browse files
committed
Use a no Auth transport client to send SA passthough requests
Signed-off-by: JoshVanL <[email protected]>
1 parent e680ac3 commit c3b84bd

File tree

1 file changed

+51
-23
lines changed

1 file changed

+51
-23
lines changed

pkg/proxy/proxy.go

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ type Proxy struct {
3636
tokenAuther *tokenreview.TokenReview
3737
secureServingInfo *server.SecureServingInfo
3838

39-
restConfig *rest.Config
40-
clientTransport http.RoundTripper
39+
restConfig *rest.Config
40+
clientTransport http.RoundTripper
41+
noAuthClientTransport http.RoundTripper
4142
}
4243

4344
func New(restConfig *rest.Config, oidcAuther *bearertoken.Authenticator,
@@ -51,31 +52,29 @@ func New(restConfig *rest.Config, oidcAuther *bearertoken.Authenticator,
5152
}
5253

5354
func (p *Proxy) Run(stopCh <-chan struct{}) (<-chan struct{}, error) {
54-
klog.Infof("waiting for oidc provider to become ready...")
55-
56-
// get golang tls config to the API server
57-
tlsConfig, err := rest.TLSConfigFor(p.restConfig)
55+
clientRT, err := p.roundTripperForRestConfig(p.restConfig)
5856
if err != nil {
5957
return nil, err
6058
}
59+
p.clientTransport = clientRT
6160

62-
// create tls transport to request
63-
tlsTransport := &http.Transport{
64-
TLSClientConfig: tlsConfig,
65-
}
66-
67-
// get kube transport config form rest client config
68-
restTransportConfig, err := p.restConfig.TransportConfig()
69-
if err != nil {
70-
return nil, err
71-
}
61+
// No auth round tripper for no impersonation
62+
if p.tokenAuther != nil {
63+
noAuthClientRT, err := p.roundTripperForRestConfig(&rest.Config{
64+
APIPath: p.restConfig.APIPath,
65+
Host: p.restConfig.Host,
66+
Timeout: p.restConfig.Timeout,
67+
TLSClientConfig: rest.TLSClientConfig{
68+
CAFile: p.restConfig.CAFile,
69+
CAData: p.restConfig.CAData,
70+
},
71+
})
72+
if err != nil {
73+
return nil, err
74+
}
7275

73-
// wrap golang tls config with kube transport round tripper
74-
clientRT, err := transport.HTTPWrappersForConfig(restTransportConfig, tlsTransport)
75-
if err != nil {
76-
return nil, err
76+
p.noAuthClientTransport = noAuthClientRT
7777
}
78-
p.clientTransport = clientRT
7978

8079
// get API server url
8180
url, err := url.Parse(p.restConfig.Host)
@@ -89,6 +88,7 @@ func (p *Proxy) Run(stopCh <-chan struct{}) (<-chan struct{}, error) {
8988
proxyHandler.ErrorHandler = p.Error
9089

9190
// wait for oidc auther to become ready
91+
klog.Infof("waiting for oidc provider to become ready...")
9292
time.Sleep(10 * time.Second)
9393

9494
waitCh, err := p.serve(proxyHandler, stopCh)
@@ -127,8 +127,9 @@ func (p *Proxy) RoundTrip(req *http.Request) (*http.Response, error) {
127127
if tkErr == nil && ok {
128128
klog.V(4).Infof("passing request with valid token through (%s)",
129129
req.RemoteAddr)
130-
// don't set impersonation headers
131-
return p.clientTransport.RoundTrip(req)
130+
// Don't set impersonation headers and pass through without proxy auth
131+
// and headers still set
132+
return p.noAuthClientTransport.RoundTrip(req)
132133
}
133134

134135
if tkErr != nil {
@@ -231,3 +232,30 @@ func (p *Proxy) Error(rw http.ResponseWriter, r *http.Request, err error) {
231232
http.Error(rw, "", http.StatusInternalServerError)
232233
}
233234
}
235+
236+
func (p *Proxy) roundTripperForRestConfig(config *rest.Config) (http.RoundTripper, error) {
237+
// get golang tls config to the API server
238+
tlsConfig, err := rest.TLSConfigFor(config)
239+
if err != nil {
240+
return nil, err
241+
}
242+
243+
// create tls transport to request
244+
tlsTransport := &http.Transport{
245+
TLSClientConfig: tlsConfig,
246+
}
247+
248+
// get kube transport config form rest client config
249+
restTransportConfig, err := config.TransportConfig()
250+
if err != nil {
251+
return nil, err
252+
}
253+
254+
// wrap golang tls config with kube transport round tripper
255+
clientRT, err := transport.HTTPWrappersForConfig(restTransportConfig, tlsTransport)
256+
if err != nil {
257+
return nil, err
258+
}
259+
260+
return clientRT, nil
261+
}

0 commit comments

Comments
 (0)