Ajout d'une autorité de certification de confiance à Red Hat OpenShift on IBM Cloud

Cloud privé virtuel 4.19 et plus tard Nœuds de travail RHCOS Nœuds de travail RHEL

Découvrez comment ajouter une autorité de certification (CA) de confiance à votre cluster Red Hat® OpenShift® on IBM Cloud®. Il peut être nécessaire d'ajouter une autorité de certification de confiance lorsque vous récupérez des images à partir d'un registre auto-hébergé qui utilise un certificat signé par une autorité de certification personnalisée.

Ajout d'une autorité de certification de confiance à votre cluster

Pour ajouter une autorité de certification de confiance à votre cluster Red Hat OpenShift on IBM Cloud, vous devez créer une carte de configuration contenant votre certificat d'autorité de certification et déployer un daemonset qui installe le certificat sur tous les nœuds de travail.

Avant de commencer, assurez-vous que votre fichier de certificat CA est prêt. Le certificat doit être au format PEM.

  1. Créez le configmap openshift-config-user-ca-bundle avec votre certificat d'autorité de certification. Remplacez <path-to-your-ca-cert> par le chemin d'accès à votre fichier de certificat CA.

    kubectl create cm openshift-config-user-ca-bundle -n kube-system --from-file=openshift-config-user-ca-bundle.crt=<path-to-your-ca-cert>
    
  2. Créez le script qui installe l'autorité de certification de confiance sur chaque nœud.

    cat > openshift-config-user-ca-script.sh <<EOF
    #!/bin/bash
    set -e  # Exit on any error
    set -x  # Enable debug output
    if ! diff /tmp/openshift-config-user-ca-bundle/openshift-config-user-ca-bundle.crt /host/etc/pki/ca-trust/source/anchors ; then
        cp /tmp/openshift-config-user-ca-bundle/openshift-config-user-ca-bundle.crt /host/etc/pki/ca-trust/source/anchors
        chroot /host update-ca-trust extract
        if chroot /host systemctl is-enabled coreos-update-ca-trust.service; then
            chroot /host systemctl restart coreos-update-ca-trust.service
        fi
        chroot /host systemctl restart crio.service;
    fi
    # Keep container running to maintain daemonset pod
    sleep inf
    EOF
    kubectl delete cm -n kube-system openshift-config-user-ca-script --ignore-not-found
    kubectl create cm -n kube-system --from-file openshift-config-user-ca-script.sh openshift-config-user-ca-script
    
  3. Créer le daemonset qui exécute le script sur tous les nœuds.

    OCP_REGISTRY_ENDPOINT=$(kubectl get pod -n kube-system -l k8s-app=kube-apiserver-proxy -o json | jq -r '.items[0].spec.containers[0].image | select( . != null )' | awk -F/ '{ print $1 }')
    if [[ -z "${OCP_REGISTRY_ENDPOINT}" ]]; then
        OCP_REGISTRY_ENDPOINT=$(kubectl get pod -n kube-system -l app=ibm-master-proxy-static -o json | jq -r '.items[0].spec.containers[0].image | select( . != null )' | awk -F/ '{ print $1 }')
    fi
    OCP_VERSION=$(oc version -o json | jq -r .openshiftVersion)
    kubectl apply -f - <<EOF
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: update-openshift-config-user-ca-bundle
      namespace: kube-system
      labels:
        app: update-openshift-config-user-ca-bundle
    spec:
      selector:
        matchLabels:
          app: update-openshift-config-user-ca-bundle
      template:
        metadata:
          labels:
            app: update-openshift-config-user-ca-bundle
        spec:
          containers:
            - command: ["/bin/bash", "-c", "/tmp/openshift-config-user-ca-script/openshift-config-user-ca-script.sh"]
              image: ${OCP_REGISTRY_ENDPOINT}/armada-master/ocp-release-${OCP_VERSION}-x86_64:cli
              imagePullPolicy: IfNotPresent
              name: update-openshift-config-user-ca-bundle
              resources:
                requests:
                  cpu: 1m
                  memory: 1Mi
              securityContext:
                privileged: true
              volumeMounts:
                - name: host-volume
                  mountPath: /host
                - name: openshift-config-user-ca-bundle
                  mountPath: /tmp/openshift-config-user-ca-bundle
                - name: openshift-config-user-ca-script
                  mountPath: /tmp/openshift-config-user-ca-script
          hostIPC: true
          hostNetwork: true
          hostPID: true
          tolerations:
          - operator: Exists
          volumes:
            - name: host-volume
              hostPath:
                path: /
                type: Directory
            - name: openshift-config-user-ca-bundle
              configMap:
                name: openshift-config-user-ca-bundle
            - name: openshift-config-user-ca-script
              configMap:
                name: openshift-config-user-ca-script
                defaultMode: 0755
    EOF
    kubectl rollout status ds -n kube-system update-openshift-config-user-ca-bundle
    
  4. Vérifiez que l'autorité de certification approuvée a été installée en consultant les journaux du jeu de démons.

    oc logs -n kube-system -l app=update-openshift-config-user-ca-bundle --tail=-1
    

Une fois le daemonset terminé, votre autorité de certification de confiance est installée sur tous les nœuds de travail et votre cluster peut extraire des images des registres qui utilisent des certificats signés par votre autorité de certification personnalisée.