This is an automated email from the ASF dual-hosted git repository.

smolnar82 pushed a commit to branch knox_idf
in repository https://gitbox.apache.org/repos/asf/knox.git

commit 8f9789cf32e62e39c0e31377ec3545e33e1a5327
Author: hanicz <[email protected]>
AuthorDate: Mon Jun 29 09:31:25 2026 +0200

    KNOX-3364: New loadAliasesFromK8sSecrets method in entrypoint.sh to load 
aliases from k8s secrets. Install jq in the container as well. (#1282)
    
    (cherry picked from commit 2fdbda09d970522cd46cba8d36ccdc439246b611)
---
 .../src/main/resources/docker/Dockerfile           |  3 +-
 .../main/resources/docker/gateway-entrypoint.sh    | 47 ++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/gateway-docker/src/main/resources/docker/Dockerfile 
b/gateway-docker/src/main/resources/docker/Dockerfile
index 7121de75d..f7926ba9b 100644
--- a/gateway-docker/src/main/resources/docker/Dockerfile
+++ b/gateway-docker/src/main/resources/docker/Dockerfile
@@ -30,7 +30,8 @@ RUN apt-get update && \
        libnss3 \
        bash \
        passwd \
-       curl && \
+       curl \
+       jq && \
     apt-get clean && \
     rm -rf /var/lib/apt/lists/*
 
diff --git a/gateway-docker/src/main/resources/docker/gateway-entrypoint.sh 
b/gateway-docker/src/main/resources/docker/gateway-entrypoint.sh
index 1d7eed82b..c2ea0dd6b 100755
--- a/gateway-docker/src/main/resources/docker/gateway-entrypoint.sh
+++ b/gateway-docker/src/main/resources/docker/gateway-entrypoint.sh
@@ -35,6 +35,8 @@
 #   TRUSTSTORE_IMPORTS="myRootCA:/mountedpath/enterprise_root_cert.pem 
myBizPartnerCA:/mountedpath/mybiz_partner_cert.pem"
 #   Description:
 #   This will import the specified certificates into the truststore JKS with 
the provided alias name(s) during the container startup process.
+# - KNOX_ALIAS_LABEL - (optional) label selector used to discover Knox alias
+#   Secrets in the pod's namespace, default 'knox.apache.org/alias=true'.
 
 
 set -e
@@ -92,6 +94,49 @@ saveAlias() {
   fi
 }
 
+## Helper function to load Knox aliases from labeled Kubernetes Secrets.
+loadAliasesFromK8sSecrets() {
+  local sa_token_file="/var/run/secrets/kubernetes.io/serviceaccount/token"
+  local sa_ca_file="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
+  local sa_ns_file="/var/run/secrets/kubernetes.io/serviceaccount/namespace"
+  local label="${KNOX_ALIAS_LABEL:-knox.apache.org/alias=true}"
+
+  if [[ ! -r ${sa_token_file} || ! -r ${sa_ca_file} || ! -r ${sa_ns_file} ]]; 
then
+    echo "ServiceAccount token not mounted; skipping k8s-sourced Knox aliases"
+    return 0
+  fi
+
+  echo "Loading Knox aliases from labeled k8s Secrets (label: ${label}) ..."
+  local namespace token resp_file http_code secret_names
+  namespace=$(/bin/cat "${sa_ns_file}")
+  token=$(/bin/cat "${sa_token_file}")
+  resp_file=$(mktemp)
+
+  http_code=$(curl -sS \
+    --cacert "${sa_ca_file}" \
+    -H "Authorization: Bearer ${token}" \
+    -o "${resp_file}" -w "%{http_code}" \
+    
"https://kubernetes.default.svc/api/v1/namespaces/${namespace}/secrets?labelSelector=${label}";)
 || http_code="000"
+
+  if [[ ${http_code} != "200" ]]; then
+    echo "WARN: failed to list Knox alias Secrets from k8s API (HTTP 
${http_code}); continuing without k8s aliases"
+    /bin/rm -f "${resp_file}"
+    return 0
+  fi
+
+  secret_names=$(jq -r '.items[].metadata.name' "${resp_file}" | tr '\n' ' ') 
|| secret_names=""
+  /bin/rm -f "${resp_file}"
+
+  if [[ -z ${secret_names} ]]; then
+    echo "No labeled Knox alias Secrets found"
+    return 0
+  fi
+
+  # shellcheck disable=SC2086
+  /home/knox/knox/bin/knoxcli.sh create-k8s-alias ${secret_names} --namespace 
"${namespace}"
+  echo "Knox aliases loaded from k8s Secrets: ${secret_names}"
+}
+
 export GATEWAY_SERVER_RUN_IN_FOREGROUND=true
 
 
@@ -131,6 +176,8 @@ else
   /home/knox/knox/bin/knoxcli.sh generate-jwk --saveAlias knox.token.hash.key
 fi
 
+loadAliasesFromK8sSecrets
+
 # If keystore dir is empty use default one
 if [[ -z ${KEYSTORE_DIR} ]]
 then

Reply via email to