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

Commit 48dbebe

Browse files
authored
Merge pull request #100 from JoshVanL/in-cluster-config
In-cluster config only used when no client flags have been provided
2 parents 79aae2d + be1fa46 commit 48dbebe

File tree

2 files changed

+60
-14
lines changed

2 files changed

+60
-14
lines changed

cmd/options/client.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Copyright Jetstack Ltd. See LICENSE for details.
2+
package options
3+
4+
import (
5+
"github.com/spf13/cobra"
6+
"github.com/spf13/pflag"
7+
"k8s.io/cli-runtime/pkg/genericclioptions"
8+
)
9+
10+
type ClientOptions struct {
11+
*genericclioptions.ConfigFlags
12+
}
13+
14+
func NewClientFlags() *ClientOptions {
15+
return &ClientOptions{
16+
ConfigFlags: genericclioptions.NewConfigFlags(true),
17+
}
18+
}
19+
20+
func (c *ClientOptions) AddFlags(flags *pflag.FlagSet) {
21+
c.ConfigFlags.AddFlags(flags)
22+
}
23+
24+
func (c *ClientOptions) ClientFlagsChanged(cmd *cobra.Command) bool {
25+
for _, f := range clientOptionFlags() {
26+
if ff := cmd.Flag(f); ff != nil && ff.Changed {
27+
return true
28+
}
29+
}
30+
31+
return false
32+
}
33+
34+
func clientOptionFlags() []string {
35+
return []string{"certificate-authority", "client-certificate", "client-key", "cluster",
36+
"context", "insecure-skip-tls-verify", "kubeconfig", "namespace",
37+
"request-timeout", "server", "token", "user",
38+
}
39+
}

cmd/run.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
apiserveroptions "k8s.io/apiserver/pkg/server/options"
1515
"k8s.io/apiserver/pkg/util/term"
1616
"k8s.io/apiserver/plugin/pkg/authenticator/token/oidc"
17-
"k8s.io/cli-runtime/pkg/genericclioptions"
1817
"k8s.io/client-go/rest"
1918
cliflag "k8s.io/component-base/cli/flag"
2019
"k8s.io/component-base/cli/globalflag"
@@ -47,7 +46,7 @@ func NewRunCommand(stopCh <-chan struct{}) *cobra.Command {
4746

4847
kopOptions := new(options.KubeOIDCProxyOptions)
4948

50-
clientConfigFlags := genericclioptions.NewConfigFlags(true)
49+
clientConfigOptions := options.NewClientFlags()
5150

5251
healthCheck := probe.New(strconv.Itoa(readinessProbePort))
5352

@@ -56,6 +55,8 @@ func NewRunCommand(stopCh <-chan struct{}) *cobra.Command {
5655
Use: "kube-oidc-proxy",
5756
Long: "kube-oidc-proxy is a reverse proxy to authenticate users to Kubernetes API servers with Open ID Connect Authentication.",
5857
RunE: func(cmd *cobra.Command, args []string) error {
58+
var err error
59+
5960
if cmd.Flag("version").Value.String() == "true" {
6061
version.PrintVersionAndExit()
6162
}
@@ -68,12 +69,18 @@ func NewRunCommand(stopCh <-chan struct{}) *cobra.Command {
6869
return errors.New("unable to securely serve on port 8080, used by readiness prob")
6970
}
7071

71-
// client rest config
72-
restConfig, err := rest.InClusterConfig()
73-
if err != nil {
72+
var restConfig *rest.Config
7473

75-
// fall back to cli flags if in cluster fails
76-
restConfig, err = clientConfigFlags.ToRESTConfig()
74+
if clientConfigOptions.ClientFlagsChanged(cmd) {
75+
// one or more client flags have been set to use client flag built
76+
// config
77+
restConfig, err = clientConfigOptions.ToRESTConfig()
78+
if err != nil {
79+
return err
80+
}
81+
} else {
82+
// no client flags have been set so default to in-cluster config
83+
restConfig, err = rest.InClusterConfig()
7784
if err != nil {
7885
return err
7986
}
@@ -145,15 +152,15 @@ func NewRunCommand(stopCh <-chan struct{}) *cobra.Command {
145152
oidcfs := namedFlagSets.FlagSet("OIDC")
146153
oidcOptions.AddFlags(oidcfs)
147154

148-
ssoptionsWithLB.AddFlags(namedFlagSets.FlagSet("secure serving"))
155+
ssoptionsWithLB.AddFlags(namedFlagSets.FlagSet("Secure Serving"))
149156

150-
clientConfigFlags.CacheDir = nil
151-
clientConfigFlags.Impersonate = nil
152-
clientConfigFlags.ImpersonateGroup = nil
153-
clientConfigFlags.AddFlags(namedFlagSets.FlagSet("client"))
157+
clientConfigOptions.CacheDir = nil
158+
clientConfigOptions.Impersonate = nil
159+
clientConfigOptions.ImpersonateGroup = nil
160+
clientConfigOptions.AddFlags(namedFlagSets.FlagSet("Client"))
154161

155-
globalflag.AddGlobalFlags(namedFlagSets.FlagSet("misc"), cmd.Name())
156-
namedFlagSets.FlagSet("misc").Bool("version",
162+
globalflag.AddGlobalFlags(namedFlagSets.FlagSet("Misc"), cmd.Name())
163+
namedFlagSets.FlagSet("Misc").Bool("version",
157164
false, "Print version information and quit")
158165

159166
for _, f := range namedFlagSets.FlagSets {

0 commit comments

Comments
 (0)