@@ -10,150 +10,27 @@ set -u -e
1010#
1111# SPDX-License-Identifier: Apache-2.0
1212
13- CNI_BIN_DIR=${CNI_BIN_DIR:- " /host/opt/cni/bin/" }
14- WHEREABOUTS_KUBECONFIG_FILE_HOST=${WHEREABOUTS_KUBECONFIG_FILE_HOST:- " /etc/cni/net.d/whereabouts.d/whereabouts.kubeconfig" }
15- CNI_CONF_DIR=${CNI_CONF_DIR:- " /host/etc/cni/net.d" }
16- WHEREABOUTS_RECONCILER_CRON=${WHEREABOUTS_RECONCILER_CRON:- 30 4 * * * }
17-
18- # Make a whereabouts.d directory (for our kubeconfig)
19-
20- mkdir -p $CNI_CONF_DIR /whereabouts.d
21- WHEREABOUTS_KUBECONFIG=$CNI_CONF_DIR /whereabouts.d/whereabouts.kubeconfig
22- WHEREABOUTS_CONF_FILE=$CNI_CONF_DIR /whereabouts.d/whereabouts.conf
23- WHEREABOUTS_KUBECONFIG_LITERAL=$( echo " $WHEREABOUTS_KUBECONFIG " | sed -e s' |/host||' )
24-
25- # ------------------------------- Generate a "kube-config"
26- SERVICE_ACCOUNT_PATH=/var/run/secrets/kubernetes.io/serviceaccount
27- KUBE_CA_FILE=${KUBE_CA_FILE:- $SERVICE_ACCOUNT_PATH / ca.crt}
28- SERVICE_ACCOUNT_TOKEN=$( cat $SERVICE_ACCOUNT_PATH /token)
29- SERVICE_ACCOUNT_TOKEN_PATH=$SERVICE_ACCOUNT_PATH /token
30- SKIP_TLS_VERIFY=${SKIP_TLS_VERIFY:- false}
31-
32- LAST_SERVICEACCOUNT_MD5SUM=" "
33- LAST_KUBE_CA_FILE_MD5SUM=" "
13+ source lib.sh
3414
3515# Setup our logging routines
3616
37- function log()
38- {
39- echo " $( date --iso-8601=seconds) ${1} "
40- }
41-
42- function error()
43- {
44- log " ERR: {$1 }"
45- }
46-
47- function warn()
48- {
49- log " WARN: {$1 }"
50- }
51-
52-
53- function generateKubeConfig {
54- # Check if we're running as a k8s pod.
55- if [ -f " $SERVICE_ACCOUNT_PATH /token" ]; then
56- # We're running as a k8d pod - expect some variables.
57- if [ -z ${KUBERNETES_SERVICE_HOST} ]; then
58- error " KUBERNETES_SERVICE_HOST not set" ; exit 1;
59- fi
60- if [ -z ${KUBERNETES_SERVICE_PORT} ]; then
61- error " KUBERNETES_SERVICE_PORT not set" ; exit 1;
62- fi
63-
64- if [ " $SKIP_TLS_VERIFY " == " true" ]; then
65- TLS_CFG=" insecure-skip-tls-verify: true"
66- elif [ -f " $KUBE_CA_FILE " ]; then
67- TLS_CFG=" certificate-authority-data: $( cat $KUBE_CA_FILE | base64 | tr -d ' \n' ) "
68- fi
69-
70- # Kubernetes service address must be wrapped if it is IPv6 address
71- KUBERNETES_SERVICE_HOST_WRAP=$KUBERNETES_SERVICE_HOST
72- if [ " $KUBERNETES_SERVICE_HOST_WRAP " != " ${KUBERNETES_SERVICE_HOST_WRAP#*: [0-9a-fA-F]} " ]; then
73- KUBERNETES_SERVICE_HOST_WRAP=\[ $KUBERNETES_SERVICE_HOST_WRAP \]
74- fi
75-
76- # Write a kubeconfig file for the CNI plugin. Do this
77- # to skip TLS verification for now. We should eventually support
78- # writing more complete kubeconfig files. This is only used
79- # if the provided CNI network config references it.
80- touch $WHEREABOUTS_KUBECONFIG
81- chmod ${KUBECONFIG_MODE:- 600} $WHEREABOUTS_KUBECONFIG
82- cat > $WHEREABOUTS_KUBECONFIG << EOF
83- # Kubeconfig file for the Whereabouts CNI plugin.
84- apiVersion: v1
85- kind: Config
86- clusters:
87- - name: local
88- cluster:
89- server: ${KUBERNETES_SERVICE_PROTOCOL:- https} ://${KUBERNETES_SERVICE_HOST_WRAP} :${KUBERNETES_SERVICE_PORT}
90- $TLS_CFG
91- users:
92- - name: whereabouts
93- user:
94- token: "${SERVICE_ACCOUNT_TOKEN} "
95- contexts:
96- - name: whereabouts-context
97- context:
98- cluster: local
99- user: whereabouts
100- namespace: ${WHEREABOUTS_NAMESPACE}
101- current-context: whereabouts-context
102- EOF
103-
104- else
105- warn " Doesn't look like we're running in a kubernetes environment (no serviceaccount token)"
106- fi
107-
108- }
10917
18+ # -------------------Generate a "kube-config"
11019generateKubeConfig
111-
20+ export LAST_SERVICEACCOUNT_MD5SUM=" $( get_token_md5sum) "
21+ export LAST_KUBE_CA_FILE_MD5SUM=" $( get_ca_file_md5sum) "
11222# ------------------ end Generate a "kube-config"
11323
11424# ----------------- Generate a whereabouts conf
115-
116- function generateWhereaboutsConf {
117-
118- touch $WHEREABOUTS_CONF_FILE
119- chmod ${KUBECONFIG_MODE:- 600} $WHEREABOUTS_CONF_FILE
120- cat > $WHEREABOUTS_CONF_FILE << EOF
121- {
122- "datastore": "kubernetes",
123- "kubernetes": {
124- "kubeconfig": "${WHEREABOUTS_KUBECONFIG_LITERAL} "
125- },
126- "reconciler_cron_expression": "${WHEREABOUTS_RECONCILER_CRON} "
127- }
128- EOF
129-
130- }
131-
13225generateWhereaboutsConf
133-
13426# ---------------- End generate a whereabouts conf
13527
13628
137-
13829# copy whereabouts to the cni bin dir
13930cp -f /whereabouts $CNI_BIN_DIR
14031
14132# ---------------------- end generate a "kube-config".
14233
143- # enter sleep/watch loop
144-
145- while true ; do
146- # Check the md5sum of the service account token and ca.
147- svcaccountsum=$( md5sum $SERVICE_ACCOUNT_TOKEN_PATH | awk ' {print $1}' )
148- casum=$( md5sum $KUBE_CA_FILE | awk ' {print $1}' )
149- if [ " $svcaccountsum " != " $LAST_SERVICEACCOUNT_MD5SUM " ] || [ " $casum " != " $LAST_KUBE_CA_FILE_MD5SUM " ]; then
150- # log "Detected service account or CA file change, regenerating kubeconfig..."
151- generateKubeConfig
152- fi
153-
154- sleep 1
155- done
156-
15734# Unless told otherwise, sleep forever.
15835# This prevents Kubernetes from restarting the pod repeatedly.
15936should_sleep=${SLEEP:- " true" }
0 commit comments