2016-09-09 9 views
8

Можно ли сохранить двоичный файл в KubernetesConfigMap, а затем позже прочитать тот же контент из тома, который монтирует этот ConfigMap? Например, если каталог /etc/mycompany/myapp/config содержит двоичный файл keystore.jks, будетКак сохранить двоичный файл в Kubernetes ConfigMap?

kubectl create configmap myapp-config --from-file=/etc/mycompany/myapp/config 

включают файл keystore.jks в ConfigMap myapp-config, который впоследствии может быть сопоставлен с объемом, установленный в контейнер, и читать в виде двоичного файла?

Например, с учетом следующей спецификации образца, должно быть keystore.jks доступно для 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 

Kubernetes версия детали:

[email protected]:~/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"} 
+0

Я заметил, что Kubernetes хранит двоичный 'keystore.jks' в configmap, но размер файла больше исходного файла, равно как и размер файла в томе, к которому впоследствии была сопоставлена ​​конфигурация. –

+0

Я сообщил о проблеме https://github.com/kubernetes/kubernetes/issues/32432. –

+0

Я изменил проблему из отчета об ошибке в запрос функции. –

ответ

1

Согласно Jorgan Liggitt в Kubernetes выпуске "Enable ConfigMaps to store binary files as well as character files.", Kubernetes 1.3.6 не может хранить двоичный файл в ConfigMap.

GitHub комментарий 1:

конфигурации карты хранят данные в виде строки, а не [] байт ... не уверен, что я ожидал бы , чтобы иметь возможность поставить произвольное бинарное содержимое в них»

GitHub комментарий 2:

@liggitt ли ConfigMaps не прил ode двоичный контент как строки?

они не имеют, они хранят строки. base64-кодирование может быть слоистым на сверху с логикой приложения при желании

я впоследствии demonstrated что ConfigMaps не поддерживает двоичные файлы.

3

Что я буду делать это кодировать этот файл в base64, а затем контейнер, который использует декодируется, чтобы иметь возможность использовать его

+0

Хорошая идея! Я могу сделать это, пока Кубернетес не реализует https://github.com/kubernetes/kubernetes/issues/32432. –

+0

Это работает? Я закодировал свое хранилище ключей в base64, добавил это значение base64 в свой секрет, установил мой секрет как том, как описано здесь: https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files- от-a-pod, и, наконец, развернут в моем кластере. Все мои модули, включая этот том, теперь не запускаются:/ –

+0

На самом деле это работает, но вам нужно дважды «кодировать» base64 двоичный файл. Если вы делаете это только один раз, значение, сохраненное в хранилище, находится в двоичной форме (в виде строки). Эта строка содержит много странных символов, которые код Go не может понять. Наконец, чтобы создать файл .jks на сервере, вы можете использовать 'initContainer': https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod- который-has-an-init-container, который будет «base64 декодировать» значение в Secret и помещать его в файл. –

0

на основе других ответов, Base64 работает для меня (только один раз)

шаги:

на моей рабочей станции

base64 -w 0 cacerts > cacerts.base64 
sha256sum.exe cacerts.base64 
keytool.exe -list -v -keystore cacerts 

OpenShift

Я подключаюсь к openshift и создаю конфигурационную карту

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 

Самый простой способ редактирования/обновить существующий cacerts чтобы кодировать новые cacerts в base64 (с опцией -w 0), откройте его с помощью редактора файлов (например, Notepad), скопировать содержимое и вставить его через OpenShift Console UI

https://osconsole.mycloud.something.example/console/project/project-dev/browse/config-maps/cacerts.base64 

или в командной строке

ос редактировать ConfigMap cacerts.base64

 Смежные вопросы

  • Нет связанных вопросов^_^