Skip to content

Commit f5426e7

Browse files
Instead of doing our own user home directory detection for .kube/config, use the k8s.io/cmdclient built-in methods which support KUBECONFIG env variable, $HOME/.kube/config, and KUBERNETES_SERVICE env variables automatically.
Also print out a sanitized representation of the config at startup in case of misconfiguration.
1 parent 1b49c0f commit f5426e7

File tree

2 files changed

+17
-29
lines changed

2 files changed

+17
-29
lines changed

Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ COPY . .
66
RUN go mod vendor
77
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o k8s-event-logger &&\
88
if ldd 'k8s-event-logger'; then exit 1; fi; # Ensure binary is statically-linked
9-
RUN echo "k8s-event-logger:x:10001:10001::/:/bin/false" > /etc_passwd_to_copy
109

1110
FROM --platform=${TARGETPLATFORM} scratch
12-
COPY --from=builder /etc_passwd_to_copy /go/src/github.com/max-rocket-internet/k8s-event-logger/k8s-event-logger /
13-
ENV USER=k8s-event-logger
11+
COPY --from=builder /go/src/github.com/max-rocket-internet/k8s-event-logger/k8s-event-logger /
1412
USER 10001
1513
ENTRYPOINT ["/k8s-event-logger"]

main.go

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ package main
22

33
import (
44
"encoding/json"
5-
"fmt"
65
"log"
76
"os"
8-
"os/user"
97

108
corev1 "k8s.io/api/core/v1"
119
"k8s.io/apimachinery/pkg/fields"
@@ -19,35 +17,27 @@ func main() {
1917
loggerApplication := log.New(os.Stderr, "", log.LstdFlags)
2018
loggerEvent := log.New(os.Stdout, "", 0)
2119

22-
usr, err := user.Current()
23-
if err != nil {
24-
loggerApplication.Panicln(err.Error())
25-
}
26-
20+
var err error
2721
var config *rest.Config
2822

29-
if k8s_port := os.Getenv("KUBERNETES_PORT"); k8s_port == "" {
30-
loggerApplication.Println("Using local kubeconfig")
31-
var kubeconfig string
32-
home := usr.HomeDir
33-
if home != "" {
34-
kubeconfig = fmt.Sprintf("%s/.kube/config", home)
35-
} else {
36-
loggerApplication.Panicln("home directory unknown")
37-
}
23+
// Using First sample from https://pkg.go.dev/k8s.io/client-go/tools/clientcmd to automatically deal with environment variables and default file paths
24+
25+
loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
26+
// if you want to change the loading rules (which files in which order), you can do so here
3827

39-
config, err = clientcmd.BuildConfigFromFlags("", kubeconfig)
40-
if err != nil {
41-
loggerApplication.Panicln(err.Error())
42-
}
43-
} else {
44-
loggerApplication.Println("Using in-cluster authentication")
45-
config, err = rest.InClusterConfig()
46-
if err != nil {
47-
loggerApplication.Panicln(err.Error())
48-
}
28+
configOverrides := &clientcmd.ConfigOverrides{}
29+
// if you want to change override values or bind them to flags, there are methods to help you
30+
31+
kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
32+
33+
config, err = kubeConfig.ClientConfig()
34+
if err != nil {
35+
loggerApplication.Panicln(err.Error())
4936
}
5037

38+
// Note that this *should* automatically sanitize sensitive fields
39+
loggerApplication.Println("Using configuration:", config.String())
40+
5141
clientset, err := kubernetes.NewForConfig(config)
5242
if err != nil {
5343
loggerApplication.Panicln(err.Error())

0 commit comments

Comments
 (0)