2016-09-09 9 views
8

क्या कोई KubernetesConfigMap में एक बाइनरी फ़ाइल संग्रहीत कर सकता है और फिर बाद में उसी कॉन्फ़िगरेशन को मापने वाले वॉल्यूम से उसी सामग्री को पढ़ सकता है? उदाहरण के लिए, निर्देशिका /etc/mycompany/myapp/config बाइनरी फ़ाइल keystore.jks होता है,मैं कुबर्नेट्स कॉन्फ़िगर में एक बाइनरी फ़ाइल कैसे संग्रहीत कर सकता हूं?

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

एक कंटेनर में रखा जाता है, ConfigMap myapp-config में फ़ाइल keystore.jks कि बाद में एक मात्रा के लिए मैप किया जा सकता शामिल होंगे, और एक बाइनरी फ़ाइल के रूप में पढ़ा तो क्या होगा?

उदाहरण के लिए, निम्नलिखित पॉड स्पेक दिया गया है, keystore.jksmyapp पर /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

मैंने देखा कि क्यूबर्नेट्स कॉन्फ़िगरेशन में बाइनरी 'keystore.jks' को संग्रहीत करता है, लेकिन फ़ाइल का आकार मूल फ़ाइल से बड़ा है, जैसा वॉल्यूम में फ़ाइल का आकार है जिसके बाद कॉन्फ़िगरेशन को मैप किया गया था। –

+0

मैंने समस्या की रिपोर्ट https://github.com/kubernetes/kubernetes/issues/32432। –

+0

मैंने समस्या को एक बग रिपोर्ट से एक फीचर अनुरोध में बदल दिया। –

उत्तर

1

Kubernetes अंक में "Enable ConfigMaps to store binary files as well as character files." Jorgan Liggitt के अनुसार, Kubernetes 1.3.6 एक ConfigMap में एक बाइनरी फ़ाइल की दुकान नहीं कर सकते हैं।

GitHub टिप्पणी 1:

स्ट्रिंग के रूप में config नक्शे दुकान डेटा, नहीं [] बाइट ... यकीन नहीं मैं उम्मीद थी उन में मनमाने ढंग से द्विआधारी सामग्री डाल करने के लिए "

सक्षम होने के लिए

GitHub टिप्पणी 2:

@liggitt मत ConfigMaps ENC स्ट्रिंग के रूप में ode बाइनरी सामग्री?

वे नहीं करते हैं, वे तारों को स्टोर करते हैं। बेस 64 एन्कोडिंग आवेदन तर्क के साथ शीर्ष पर स्तरित जा सकता है अगर वांछित

मैं बाद में demonstrated कि ConfigMaps बाइनरी फ़ाइलें समर्थन नहीं करते।

3

मैं क्या करना होगा क्या बेस 64 में इस फाइल को सांकेतिक शब्दों में बदलना और फिर कंटेनर कि डीकोड का उपयोग करता है इसका इस्तेमाल करने

+0

अच्छा विचार! मैं तब तक ऐसा कर सकता हूं जब तक कि कुबेरनेट्स https://github.com/kubernetes/kubernetes/issues/32432 लागू नहीं करता है। –

+0

क्या यह काम करता है? मैंने बेस 64 में अपने कीस्टोर को एन्कोड किया, मेरे सीक्रेट में इस बेस 64 वैल्यू को जोड़ा, मेरे सीक्रेट को वॉल्यूम के रूप में घुमाया जैसा कि यहां बताया गया है: https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files- एक-पॉड से, और अंततः मेरे क्लस्टर में तैनात किया गया। इस वॉल्यूम समेत मेरे सभी फोड अब लॉन्च करने में विफल:/ –

+0

असल में यह काम करता है लेकिन आपको बाइनरी फ़ाइल को दो बार "बेस 64 एन्कोड" करना होगा। यदि आप इसे केवल एक बार करते हैं, तो स्टोर में सहेजा गया मूल्य इसके बाइनरी रूप में है (एक स्ट्रिंग के रूप में)। इस स्ट्रिंग में बहुत से अजीब वर्ण हैं जो गो कोड समझने में सक्षम नहीं है। अंत में, सर्वर में .jks फ़ाइल बनाने के लिए आप 'initContainer' का उपयोग कर सकते हैं: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod- उसमें एक इन-इन-कंटेनर है जो गुप्त में मूल्य को "बेस 64 डीकोड" करेगा और इसे एक फ़ाइल में रखेगा। –

0

अन्य उत्तर के आधार पर, Base64 मेरे लिए काम करता है (बस एक बार)

कदम सक्षम होने के लिए है:

मेरे कार्य केंद्र पर

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

OpenShift

मैं openshift से कनेक्ट करता हूं और कॉन्फ़िगरेशन मानचित्र

oc configmap cacerts.base64 --from-file = cacerts बनाएं।बेस 64

तैनाती विन्यास

... 
    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 सबसे आसान तरीका है (विकल्प डब्ल्यू 0 के साथ), बेस 64 के लिए नए cacerts सांकेतिक शब्दों में बदलना फ़ाइल संपादक (यानी नोटपैड) के साथ इसे खोलने के लिए है, सामग्री की प्रतिलिपि और OpenShift कंसोल यूआई

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

के माध्यम से या कमांड लाइन में

OC संपादित configmap cacerts.base64

0 पेस्ट करें
संबंधित मुद्दे

 संबंधित मुद्दे