2016-09-09 6 views
8

KubernetesConfigMap에 이진 파일을 저장 한 다음 나중에이 ConfigMap을 탑재하는 볼륨에서 동일한 내용을 읽을 수 있습니까? 예를 들어, 디렉토리 /etc/mycompany/myapp/configKubernetes ConfigMap에 어떻게 바이너리 파일을 저장할 수 있습니까?

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

나중에 볼륨에 매핑 할 수 있습니다 ConfigMap 형 myapp-config에서 파일 keystore.jks을 포함 용기에 장착하고, 바이너리 파일로 읽을 것, 이진 파일 keystore.jks이 포함 된 경우?

예를 들어, 다음 포드 사양이 주어진 경우 myapp/etc/mycompany/myapp/config/keystore.jkskeystore.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]k-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"} 
+0

Kubernetes는 바이너리'keystore.jks'를 configmap에 저장하지만 파일 크기는 원본 파일보다 크다는 사실을 알았습니다. 그 다음으로 configmap이 매핑 된 볼륨의 파일 크기도 커집니다. –

+0

문제가 https://github.com/kubernetes/kubernetes/issues/32432로보고되었습니다. –

+0

문제점을 버그 보고서에서 기능 요청으로 변경했습니다. –

답변

1

"Enable ConfigMaps to store binary files as well as character files."는 Kubernetes 문제에 Jorgan Liggitt에 따르면,는 Kubernetes 1.3.6 ConfigMap 형의 바이너리 파일을 저장할 수 없습니다.

GitHub의 코멘트 1 : 문자열로

설정지도 데이터를 저장하지 [] 바이트 ... 내가

"그들에 임의의 바이너리 내용을 넣을 수 있도록 을 기대 확실하지

GitHub의 코멘트 2 :

@liggitt가 수행 ConfigMaps하지 ENC 바이너리 컨텐트를 문자열로 처리 하시겠습니까?

그들은 문자열을 저장하지 않습니다. 나는 이후 demonstrated ConfigMaps 바이너리 파일을 지원하지 않는

를 원하는 경우 base64로 인코딩은 애플리케이션 로직과 상부에 적층 될 수있다. 내가 할 것이 무엇

3

는 base64로이 파일을 인코딩하고 디코딩 사용하는 컨테이너가 다른 답변을 바탕으로

+0

좋은 아이디어! Kubernetes가 https://github.com/kubernetes/kubernetes/issues/32432를 구현할 때까지이 작업을 수행 할 수 있습니다. –

+0

작동합니까? 나는 base64에서 나의 키 스토어를 인 코드했고, 내 비밀에이 base64 값을 추가했고, 여기에 설명 된대로 내 비밀을 볼륨으로 마운트했다 : https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files- from-a-pod, 그리고 마침내 내 클러스터에 배포되었습니다. 이 볼륨을 포함한 모든 포드는 이제 시작하지 못합니다./ –

+0

실제로 작동하지만 바이너리 파일을 두 번 "base64 인코딩"해야합니다. 한 번만 수행하면 상점에 저장된 값이 2 진 양식 (문자열)으로됩니다. 이 문자열에는 Go 코드가 이해할 수없는 많은 이상한 문자가 포함되어 있습니다. 마지막으로 서버에 .jks 파일을 만들려면'initContainer'를 사용할 수 있습니다 : https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod- 비밀에있는 값을 "base64 디코드"하여 파일에 저장하는 초기화 컨테이너입니다. –

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를 편집 할 수있는 가장 쉬운 방법은, (옵션 -w 0) 64 기수에 새 인 cacerts를 인코딩 파일 편집기 (예 : 메모장)에서 엽니 다하는 것입니다, 내용을 복사

OC 편집 ConfigMap 형의 cacerts.base64

0 OpenShift 콘솔 UI

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

를 통해 또는 명령 줄에 붙여 넣습니다