Hinzufügen einer vertrauenswürdigen CA zu Red Hat OpenShift on IBM Cloud

Virtuelle private Cloud 4.19 und später RHCOS-Arbeiter-Knoten RHEL-Arbeitsknoten

Erfahren Sie, wie Sie eine vertrauenswürdige Zertifizierungsstelle (CA) zu Ihrem Red Hat® OpenShift® on IBM Cloud® Cluster hinzufügen. Sie müssen möglicherweise eine vertrauenswürdige Zertifizierungsstelle hinzufügen, wenn Sie Bilder von einer selbst gehosteten Registrierung abrufen, die ein von einer benutzerdefinierten Zertifizierungsstelle signiertes Zertifikat verwendet.

Hinzufügen einer vertrauenswürdigen CA zu Ihrem Cluster

Um eine vertrauenswürdige CA zu Ihrem Red Hat OpenShift on IBM Cloud Cluster hinzuzufügen, erstellen Sie eine Configmap, die Ihr CA-Zertifikat enthält, und stellen ein Daemonset bereit, das das Zertifikat auf allen Worker Nodes installiert.

Bevor Sie beginnen, stellen Sie sicher, dass Sie Ihre CA-Zertifikatsdatei bereithalten. Das Zertifikat muss im PEM-Format vorliegen.

  1. Erstellen Sie die openshift-config-user-ca-bundle configmap mit Ihrem CA-Zertifikat. Ersetzen Sie <path-to-your-ca-cert> durch den Pfad zu Ihrer CA-Zertifikatsdatei.

    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. Erstellen Sie das Skript, das die vertrauenswürdige CA auf jedem Knoten installiert.

    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. Erstellen Sie das Daemonset, das das Skript auf allen Knoten ausführt.

    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. Überprüfen Sie, ob die vertrauenswürdige CA installiert wurde, indem Sie die Daemonset-Protokolle überprüfen.

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

Nach Abschluss des Daemonsets ist Ihre vertrauenswürdige Zertifizierungsstelle auf allen Arbeitsknoten installiert und Ihr Cluster kann Bilder aus Registrierungen abrufen, die von Ihrer benutzerdefinierten Zertifizierungsstelle signierte Zertifikate verwenden.