@ -3,7 +3,7 @@
//go:build !plan9
package main
package apiproxy
import (
"crypto/tls"
@ -37,15 +37,15 @@ var (
whoIsKey = ctxkey . New ( "" , ( * apitype . WhoIsResponse ) ( nil ) )
)
type api ServerProxyMode int
type API ServerProxyMode int
func ( a api ServerProxyMode) String ( ) string {
func ( a API ServerProxyMode) String ( ) string {
switch a {
case apis erverProxyModeDisabled:
case APIS erverProxyModeDisabled:
return "disabled"
case apis erverProxyModeEnabled:
case APIS erverProxyModeEnabled:
return "auth"
case apis erverProxyModeNoAuth:
case APIS erverProxyModeNoAuth:
return "noauth"
default :
return "unknown"
@ -53,12 +53,12 @@ func (a apiServerProxyMode) String() string {
}
const (
apiserverProxyModeDisabled api ServerProxyMode = iota
apis erverProxyModeEnabled
apis erverProxyModeNoAuth
APIServerProxyModeDisabled API ServerProxyMode = iota
APIS erverProxyModeEnabled
APIS erverProxyModeNoAuth
)
func parseAPIProxyMode( ) api ServerProxyMode {
func ParseAPIProxyMode( ) API ServerProxyMode {
haveAuthProxyEnv := os . Getenv ( "AUTH_PROXY" ) != ""
haveAPIProxyEnv := os . Getenv ( "APISERVER_PROXY" ) != ""
switch {
@ -67,34 +67,34 @@ func parseAPIProxyMode() apiServerProxyMode {
case haveAuthProxyEnv :
var authProxyEnv = defaultBool ( "AUTH_PROXY" , false ) // deprecated
if authProxyEnv {
return apis erverProxyModeEnabled
return APIS erverProxyModeEnabled
}
return apis erverProxyModeDisabled
return APIS erverProxyModeDisabled
case haveAPIProxyEnv :
var apiProxyEnv = defaultEnv ( "APISERVER_PROXY" , "" ) // true, false or "noauth"
switch apiProxyEnv {
case "true" :
return apis erverProxyModeEnabled
return APIS erverProxyModeEnabled
case "false" , "" :
return apis erverProxyModeDisabled
return APIS erverProxyModeDisabled
case "noauth" :
return apis erverProxyModeNoAuth
return APIS erverProxyModeNoAuth
default :
panic ( fmt . Sprintf ( "unknown APISERVER_PROXY value %q" , apiProxyEnv ) )
}
}
return apis erverProxyModeDisabled
return APIS erverProxyModeDisabled
}
// maybeLaunchAPIServerProxy launches the auth proxy, which is a small HTTP server
// that authenticates requests using the Tailscale LocalAPI and then proxies
// them to the kube-apiserver.
func m aybeLaunchAPIServerProxy( zlog * zap . SugaredLogger , restConfig * rest . Config , s * tsnet . Server , mode api ServerProxyMode) {
if mode == apis erverProxyModeDisabled {
func M aybeLaunchAPIServerProxy( zlog * zap . SugaredLogger , restConfig * rest . Config , s * tsnet . Server , mode API ServerProxyMode) {
if mode == APIS erverProxyModeDisabled {
return
}
startlog := zlog . Named ( "launchAPIProxy" )
if mode == apis erverProxyModeNoAuth {
if mode == APIS erverProxyModeNoAuth {
restConfig = rest . AnonymousClientConfig ( restConfig )
}
cfg , err := restConfig . TransportConfig ( )
@ -132,8 +132,8 @@ func maybeLaunchAPIServerProxy(zlog *zap.SugaredLogger, restConfig *rest.Config,
// are passed through to the Kubernetes API.
//
// It never returns.
func runAPIServerProxy ( ts * tsnet . Server , rt http . RoundTripper , log * zap . SugaredLogger , mode api ServerProxyMode, host string ) {
if mode == apis erverProxyModeDisabled {
func runAPIServerProxy ( ts * tsnet . Server , rt http . RoundTripper , log * zap . SugaredLogger , mode API ServerProxyMode, host string ) {
if mode == APIS erverProxyModeDisabled {
return
}
ln , err := ts . Listen ( "tcp" , ":443" )
@ -192,7 +192,7 @@ type apiserverProxy struct {
lc * local . Client
rp * httputil . ReverseProxy
mode api ServerProxyMode
mode API ServerProxyMode
ts * tsnet . Server
upstreamURL * url . URL
}
@ -285,7 +285,7 @@ func (ap *apiserverProxy) execForProto(w http.ResponseWriter, r *http.Request, p
func ( h * apiserverProxy ) addImpersonationHeadersAsRequired ( r * http . Request ) {
r . URL . Scheme = h . upstreamURL . Scheme
r . URL . Host = h . upstreamURL . Host
if h . mode == apis erverProxyModeNoAuth {
if h . mode == APIS erverProxyModeNoAuth {
// If we are not providing authentication, then we are just
// proxying to the Kubernetes API, so we don't need to do
// anything else.