Peut-on stocker un fichier binaire dans un KubernetesConfigMap puis lire plus tard le même contenu à partir d'un volume qui monte ce ConfigMap? Par exemple, si le répertoire /etc/mycompany/myapp/config
contient un fichier binaire keystore.jks
, volonté
kubectl create configmap myapp-config --from-file=/etc/mycompany/myapp/config
inclure le fichier keystore.jks
dans ConfigMap myapp-config
qui peut ensuite être mappé à un volume, monté dans un conteneur et lu comme un fichier binaire?
Par exemple, compte tenu des spécifications de pod suivantes, est-ce que keystore.jks
être disponible pour myapp
à /etc/mycompany/myapp/config/keystore.jks
?
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: mycompany/myapp
volumeMounts:
- name: myapp-config
mountPath: /etc/mycompany/myapp/config
volumes:
- name: myapp-config
configMap:
name: myapp-config
Détails de la version de Kubernetes:
derek@derek-HP-EliteOne-800-G1-AiO:~/Documents/platinum/fix/brvm$ kubectl version
Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.6", GitCommit:"ae4550cc9c89a593bcda6678df201db1b208133b", GitTreeState:"clean", BuildDate:"2016-08-26T18:13:23Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/AMD64"}
Server Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.6+coreos.0", GitCommit:"f6f0055b8e503cbe5fb7b6f1a2ee37d0f160c1cd", GitTreeState:"clean", BuildDate:"2016-08-29T17:01:01Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/AMD64"}
Les ConfigMaps binaires sont désormais pris en charge depuis Kubernetes version 1.10.0. D'après les notes du fichier Lisez-moi:
Les objets ConfigMap prennent désormais en charge les données binaires via un nouveau champ binaryData. Lorsque vous utilisez kubectl create configmap --from-file, les fichiers contenant des données non UTF8 seront placés dans ce nouveau champ afin de conserver les données non UTF8. Notez que la fonction --append-hash de kubectl ne prend pas en compte les données binaires. L'utilisation de cette fonctionnalité nécessite apiserver 1.10+ et kubelets. (# 57938, @dims)
Voir le changelog pour plus de détails: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md#apps
Ce que je ferais c'est encoder ce fichier en base64 puis le conteneur qui utilise décodé pour pouvoir l'utiliser
Selon Jorgan Liggitt dans le numéro de Kubernetes " Activer ConfigMaps pour stocker les fichiers binaires ainsi que les fichiers de caractères. ", Kubernetes 1.3.6 ne peut pas stocker un fichier binaire dans un ConfigMap.
Commentaire GitHub 1 :
les cartes de configuration stockent les données sous forme de chaîne, pas [] octets ... je ne suis pas sûr que je m'attendrais à pouvoir y mettre du contenu binaire arbitraire "
Commentaire GitHub 2 :
@liggitt ConfigMaps n'encode-t-il pas le contenu binaire sous forme de chaînes?
ils ne le font pas, ils stockent des cordes. l'encodage base64 peut être superposé avec la logique d'application si vous le souhaitez
J'ai par la suite démontré que ConfigMaps ne prend pas en charge les fichiers binaires.
Basé sur d'autres réponses, Base64 fonctionne pour moi (une seule fois)
Pas:
base64 -w 0 cacerts > cacerts.base64
sha256sum.exe cacerts.base64
keytool.exe -list -v -keystore cacerts
Je me connecte à openshift et crée la carte de configuration
oc create configmap cacerts.base64 --from-file = cacerts.base64
...
template:
metadata:
name: mydeployment...
spec:
volumes:
- name: cacerts-volume
configMap:
name: cacerts.base64
containers:
- name: crg-driver
command:
- base64
args:
- '--decode'
- '-w 0'
- '/opt/axatech/openpaas/certificates/cacerts.base64 > /opt/axatech/openpaas/certificates/cacerts' #this does not work yet
env:
- name: SWARM_JVM_ARGS
value: >-
-Djavax.net.ssl.trustStore=/opt/certificates/cacerts.base64
-Djavax.net.ssl.trustStorePassword=changeit
volumeMounts:
- name: cacerts-volume
mountPath: /opt/certificates
Le moyen le plus simple de modifier/mettre à jour un cacerts existant est de coder les nouveaux cacerts en base64 (avec l'option -w 0), de l'ouvrir avec l'éditeur de fichiers (c.-à-d. Le Bloc-notes), de copier le contenu et de le coller via l'interface utilisateur de la console OpenShift
https://osconsole.mycloud.something.example/console/project/project-dev/browse/config-maps/cacerts.base64
ou en ligne de commande
oc modifier configmap cacerts.base64