2017-01-27 2 views
0

J'utilise le tout-en-un VM d'origine Openshift. J'essaye de tirer des images à partir d'un registre privé et sécurisé en utilisant un flux d'images. Ceci est la définition ImageStream:Openshift: Erreur lors de l'extraction de l'image à partir du registre de docker sécurisé et distant à l'aide de certificats

apiVersion: v1                   
kind: ImageStream                  
metadata:                    
    name: my-image-stream                  
    annotations:                   
    description: Keeps track of changes in the application image       
    name: my-image                
spec:                     
    dockerImageRepository: "my.registry.net/myproject/my-image" 

Le référentiel est sécurisé avec un certificat. Sur ma machine locale, je les ai en /etc/docker/certs.d/my.registry.net et je peux me connecter avec docker login my.registry.net.

Quand je lance oc import-image, cependant, je reçois l'erreur suivante:

The import completed with errors.              

Name:      my-image              
Namespace:   myproject               
Created:   About an hour ago             
Labels:      <none>              
Description:    Keeps track of changes in the application image    
Annotations:    openshift.io/image.dockerRepositoryCheck=2017-01-27T08:09:49Z 
Docker Pull Spec: 172.30.53.244:5000/myproject/my-image        
Unique Images:    0               
Tags:      1               

latest                     
    tagged from my.registry.net/myproject/my-image           

    ! error: Import failed (InternalError): Internal error occurred: Get https://my.registry.net/v2/: remote error: handshake failure 
      About an hour ago                

J'ai copié les certificats à la machine errante et redémarré le démon docker, mais le problème demeure. Je n'ai trouvé aucune documentation sur la façon d'ajouter correctement les certificats, je les ai donc simplement placés dans le dossier docker habituel.

Quelle est la manière appropriée de faire ce travail?

mise à jour en réponse à rezie's réponse:

Il n'y a pas de fichier etc/origin/master/ca-bundle.crt sur ma boîte errante. J'ai trouvé les fichiers ca-bundle.crt suivants:

$ find/-iname ca-bundle.crt 
/etc/pki/tls/certs/ca-bundle.crt 
##multiple lines like 
/var/lib/docker/devicemapper/mnt/something-hash-like/rootfs/etc/pki/tls/certs/ca-bundle.crt 
/var/lib/origin/openshift.local.config/master/ca-bundle.crt 

I en annexe le certificat racine à /etc/pki/tls/certs/ca-bundle.crt et var/lib/origin/openshift.local.config/master/ca-bundle.crt, mais cela ne change rien. S'il vous plaît note toutefois que je ne ai pas besoin d'avoir ce certificat racine dans /etc/docker/certs.d/... afin de vous connecter directement à l'aide docker login my.registry.net

J'ai joint

Répondre

0

Essayez votre annexant CA (le même que celui que vous avez dit vous avez dit qui a été utilisé dans le répertoire my.registry.net) dans le faisceau de ca de OpenShift (par exemple /etc/origin/master/ca-bundle.crt. redémarrez ensuite le service et une nouvelle tentative import-image (en vous assurant que vous ne pas inclure le drapeau --insecure).

Pour référence, consultez this issue du projet Origin.Comme vous l'avez mentionné, t Il n'existe actuellement aucun moyen de fournir des certificats avec le secret dockercfg, et la suggestion de ce problème consiste à ajouter l'autorité de certification en tant qu'autorité racine de confiance sur tous les hôtes.

+0

Merci - malheureusement, cela n'a pas fait l'affaire. J'ai mis à jour ma question en conséquence – feob

+0

Dans RHEL, l'autre option que nous avons essayée était d'ajouter le certificat à '/ etc/pki/ca-trust/sources/anchors', d'exécuter' update-ca-trust', et de redémarrer maître (s) à nouveau. Je ne suis pas sûr que ce soit un cas congruent pour l'option VM, mais cela pourrait valoir la peine. – rezie

1

Je ne peux pas commenter devoir remorquer le karma donc j'écrirai une réponse disant presque la même chose que rezie.

L'erreur:

! error: Import failed (InternalError): Internal error occurred: Get https://my.registry.net/v2/: remote error: handshake failure 
     About an hour ago                

vient de OpenShift, pas de docker, donc l'ajouter à /etc/docker/certs.d/my.registry.net n'empêche pas l'erreur de se produire.

Vous devez ajouter le certificat CA au niveau OS, je suppose les étapes a échoué pour une raison pour le faire de cette façon:

openssl s_client -connect my.registry.net:443 </dev/null | 
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \ 
> /etc/pki/ca-trust/source/anchors/my.registry.net.crt && 
update-ca-trust check && update-ca-trust extract 

tester Enfin, si ça a marché en cours d'exécution

curl https://my.registry.net/v2 

Si il ne vous donne pas une erreur de certificat et vous ne pouvez toujours pas faire l'importation oc redémarrer le service atomic-openshift-master-api