Skip to content

Commit dee2a32

Browse files
Merge pull request #17 from greenrd/cluster-auto-auth
Add in-cluster auth helper; add Bearer prefix to bearer tokens
2 parents 12b071f + ed9a148 commit dee2a32

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)
@@ -27,6 +29,7 @@ import Network.HTTP.Client.TLS (mkManagerSettings)
2729
import Network.TLS (Credential, defaultParamsClient)
2830
import qualified Network.TLS as TLS
2931
import qualified Network.TLS.Extra as TLS
32+
import System.Environment (getEnv)
3033
import System.X509 (getSystemCertificateStore)
3134

3235
-- |Sets the master URI in the 'K.KubernetesConfig'.
@@ -47,7 +50,7 @@ setTokenAuth
4750
-> K.KubernetesConfig
4851
-> K.KubernetesConfig
4952
setTokenAuth token kcfg = kcfg
50-
{ K.configAuthMethods = [K.AnyAuthMethod (K.AuthApiKeyBearerToken token)]
53+
{ K.configAuthMethods = [K.AnyAuthMethod (K.AuthApiKeyBearerToken $ "Bearer " <> token)]
5154
}
5255

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

0 commit comments

Comments
 (0)