신뢰할 수 있는 CA를 Red Hat OpenShift on IBM Cloud

가상 프라이빗 클라우드 4.19 이후 RHCOS 워커 노드 RHEL 워커 노드

Red Hat® OpenShift® on IBM Cloud® 클러스터에 신뢰할 수 있는 CA(인증 기관)를 추가하는 방법을 알아보세요. 사용자 지정 CA가 서명한 인증서를 사용하는 자체 호스팅 레지스트리에서 이미지를 가져올 때 신뢰할 수 있는 CA를 추가해야 할 수도 있습니다.

클러스터에 신뢰할 수 있는 CA 추가하기

Red Hat OpenShift on IBM Cloud 클러스터에 신뢰할 수 있는 CA를 추가하려면 CA 인증서가 포함된 구성 맵을 만들고 모든 작업자 노드에 인증서를 설치하는 데몬셋을 배포합니다.

시작하기 전에 CA 인증서 파일이 준비되었는지 확인하세요. 인증서는 PEM 형식이어야 합니다.

  1. CA 인증서를 사용하여 openshift-config-user-ca-bundle configmap을 만듭니다. <path-to-your-ca-cert> 을 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. 각 노드에 신뢰할 수 있는 CA를 설치하는 스크립트를 만듭니다.

    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. 모든 노드에서 스크립트를 실행하는 데몬셋을 생성합니다.

    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. 데몬 세트 로그를 확인하여 신뢰할 수 있는 CA가 설치되었는지 확인합니다.

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

데몬 세트가 완료되면 신뢰할 수 있는 CA가 모든 작업자 노드에 설치되고 클러스터는 사용자 지정 CA가 서명한 인증서를 사용하는 레지스트리에서 이미지를 가져올 수 있습니다.