Skip to content

Commit ed9a148

Browse files
committed
Add in-cluster auth helper; add Bearer prefix to bearer tokens
1 parent 38f64fc commit ed9a148

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

kubernetes-client-helper/src/Kubernetes/ClientHelper.hs

+18-1
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import qualified Data.ByteString as B
1111
import qualified Data.ByteString.Lazy as LazyB
1212
import Data.Default.Class (def)
1313
import Data.Either (rights)
14+
import Data.Monoid ((<>))
1415
import Data.PEM (pemContent, pemParseBS)
1516
import qualified Data.Text as T
1617
import qualified Data.Text.Encoding as T
18+
import qualified Data.Text.IO as T
1719
import Data.Typeable (Typeable)
1820
import Data.X509 (SignedCertificate,
1921
decodeSignedCertificate)
@@ -26,6 +28,7 @@ import Network.HTTP.Client.TLS (mkManagerSettings)
2628
import Network.TLS (Credential, defaultParamsClient)
2729
import qualified Network.TLS as TLS
2830
import qualified Network.TLS.Extra as TLS
31+
import System.Environment (getEnv)
2932
import System.X509 (getSystemCertificateStore)
3033

3134
-- |Sets the master URI in the 'K.KubernetesConfig'.
@@ -46,7 +49,7 @@ setTokenAuth
4649
-> K.KubernetesConfig
4750
-> K.KubernetesConfig
4851
setTokenAuth token kcfg = kcfg
49-
{ K.configAuthMethods = [K.AnyAuthMethod (K.AuthApiKeyBearerToken token)]
52+
{ K.configAuthMethods = [K.AnyAuthMethod (K.AuthApiKeyBearerToken $ "Bearer " <> token)]
5053
}
5154

5255
-- |Creates a 'NH.Manager' that can handle TLS.
@@ -119,3 +122,17 @@ loadPEMCerts p = do
119122
liftIO (B.readFile p)
120123
>>= either (throwM . ParsePEMCertsException) return
121124
. parsePEMCerts
125+
126+
serviceAccountDir :: FilePath
127+
serviceAccountDir = "/var/run/secrets/kubernetes.io/serviceaccount"
128+
129+
cluster :: (MonadIO m, MonadThrow m) => m (NH.Manager, K.KubernetesConfig)
130+
cluster = do
131+
caStore <- loadPEMCerts $ serviceAccountDir ++ "/ca.crt"
132+
defTlsParams <- liftIO defaultTLSClientParams
133+
mgr <- liftIO . newManager . setCAStore caStore $ disableServerNameValidation defTlsParams
134+
tok <- liftIO . T.readFile $ serviceAccountDir ++ "/token"
135+
host <- liftIO $ getEnv "KUBERNETES_SERVICE_HOST"
136+
port <- liftIO $ getEnv "KUBERNETES_SERVICE_PORT"
137+
config <- setTokenAuth tok . setMasterURI (T.pack $ "https://" ++ host ++ ":" ++ port) <$> liftIO K.newConfig
138+
return (mgr, config)

0 commit comments

Comments
 (0)