@@ -13,6 +13,7 @@ import (
1313 "github.com/aws/aws-sdk-go-v2/config"
1414 "github.com/prometheus/client_golang/prometheus/promhttp"
1515 log "github.com/sirupsen/logrus"
16+ "github.com/szuecs/kube-static-egress-controller/auth"
1617 "github.com/szuecs/kube-static-egress-controller/controller"
1718 "github.com/szuecs/kube-static-egress-controller/kube"
1819 "github.com/szuecs/kube-static-egress-controller/provider"
@@ -55,6 +56,9 @@ type Config struct {
5556 Namespace string
5657 ResyncInterval time.Duration
5758 Address string
59+ // required by Platform credentials
60+ UsePlatformCredentials bool
61+ CredentialsDir string
5862}
5963
6064var defaultConfig = & Config {
@@ -120,6 +124,8 @@ Example:
120124 // Flags related to Kubernetes
121125 app .Flag ("master" , "The Kubernetes API server to connect to (default: auto-detect)" ).Default (defaultConfig .Master ).StringVar (& cfg .Master )
122126 app .Flag ("kubeconfig" , "Retrieve target cluster configuration from a Kubernetes configuration file (default: auto-detect)" ).Default (defaultConfig .KubeConfig ).StringVar (& cfg .KubeConfig )
127+ app .Flag ("use-platform-credentials" , "Use Platform credentials (default: disabled)" ).BoolVar (& cfg .UsePlatformCredentials )
128+ app .Flag ("credentials-dir" , "Directory where the Platform credentials are stored (default: /meta/credentials)" ).Default (auth .DefaultCredentialsDir ).Envar (auth .CredentialsDirEnvar ).StringVar (& cfg .CredentialsDir )
123129 app .Flag ("provider" , "Provider implementing static egress <noop|aws> (default: auto-detect)" ).Default (defaultConfig .Provider ).StringVar (& cfg .Provider )
124130 app .Flag ("cluster-id" , "Cluster ID used define ownership of Egress stack." ).StringVar (& cfg .ClusterID )
125131 app .Flag ("cluster-id-tag-prefix" , "Prefix for the Cluster ID tag set on the Egress stack." ).Default (defaultConfig .ClusterIDTagPrefix ).StringVar (& cfg .ClusterIDTagPrefix )
@@ -169,7 +175,7 @@ func main() {
169175 }
170176
171177 configsChan := make (chan provider.EgressConfig )
172- cmWatcher , err := kube .NewConfigMapWatcher (newKubeClient (), cfg .Namespace , "egress=static" , configsChan )
178+ cmWatcher , err := kube .NewConfigMapWatcher (newKubeClient (cfg ), cfg .Namespace , "egress=static" , configsChan )
173179 if err != nil {
174180 log .Fatalf ("Failed to setup ConfigMap watcher: %v" , err )
175181 }
@@ -188,7 +194,7 @@ func main() {
188194}
189195
190196// newKubeClient returns a new Kubernetes client with the default config.
191- func newKubeClient () kubernetes.Interface {
197+ func newKubeClient (cfg * Config ) kubernetes.Interface {
192198 var kubeconfig string
193199 if _ , err := os .Stat (clientcmd .RecommendedHomeFile ); err == nil {
194200 kubeconfig = clientcmd .RecommendedHomeFile
@@ -199,6 +205,10 @@ func newKubeClient() kubernetes.Interface {
199205 log .Fatalf ("build config failed: %v" , err )
200206 }
201207
208+ if cfg .UsePlatformCredentials {
209+ config .Wrap (auth .TokenInjector (auth .NewPlatformCredentialsTokenSource (name , cfg .CredentialsDir )))
210+ }
211+
202212 client , err := kubernetes .NewForConfig (config )
203213 if err != nil {
204214 log .Fatalf ("initialize kubernetes client failed: %v" , err )
0 commit comments