2.4. 컨테이너 이미지 서명
Red Hat은 Red Hat Container Registries에 있는 이미지에 대한 서명을 제공합니다. 이러한 서명은 MCO(Machine Config Operator)를 사용하여 OpenShift Container Platform 4 클러스터로 가져올 때 자동으로 확인할 수 있습니다.
Quay.io는 OpenShift Container Platform을 구성하는 대부분의 이미지를 제공하며 릴리스 이미지만 서명됩니다. 릴리스 이미지는 승인된 OpenShift Container Platform 이미지를 참조하여 공급 체인 공격에 대한 보안 수준을 제공합니다. 그러나 로깅, 모니터링 및 서비스 메시와 같은 OpenShift Container Platform에 대한 일부 확장 기능은 OLM(Operator Lifecycle Manager)에서 Operator로 제공됩니다. 이러한 이미지는 Red Hat Ecosystem Catalog 컨테이너 이미지 레지스트리에서 제공됩니다.
Red Hat 레지스트리와 인프라 간의 이미지의 무결성을 확인하려면 서명 확인을 활성화하십시오.
2.4.1. Red Hat Container Registries에 대한 서명 확인 활성화
Red Hat Container Registries에 대한 컨테이너 서명 검증을 활성화하려면 이러한 레지스트리의 이미지를 확인하는 키를 지정하는 서명 확인 정책 파일을 작성해야 합니다. RHEL8 노드의 경우 레지스트리는 기본적으로 /etc/containers/registries.d
에 이미 정의되어 있습니다.
절차
작업자 노드에 필요한 구성이 포함된 Butane 구성 파일
51-worker-rh-registry-trust.bu
를 만듭니다.참고Butane에 대한 자세한 내용은 “Butane 을 사용하여 머신 구성 생성”을 참조하십시오.
variant: openshift version: 4.9.0 metadata: name: 51-worker-rh-registry-trust labels: machineconfiguration.openshift.io/role: worker storage: files: - path: /etc/containers/policy.json mode: 0644 overwrite: true contents: inline: | { "default": [ { "type": "insecureAcceptAnything" } ], "transports": { "docker": { "registry.access.redhat.com": [ { "type": "signedBy", "keyType": "GPGKeys", "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release" } ], "registry.redhat.io": [ { "type": "signedBy", "keyType": "GPGKeys", "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release" } ] }, "docker-daemon": { "": [ { "type": "insecureAcceptAnything" } ] } } }
Butane을 사용하여 작업자 노드의 디스크에 작성할 파일이 포함된 머신 구성 YAML 파일
51-worker-rh-registry-trust.yaml
을 생성합니다.$ butane 51-worker-rh-registry-trust.bu -o 51-worker-rh-registry-trust.yaml
생성된 머신 구성을 적용합니다.
$ oc apply -f 51-worker-rh-registry-trust.yaml
작업자 머신 구성 풀이 새 머신 구성으로 롤아웃되었는지 확인합니다.
새 머신 구성이 생성되었는지 확인합니다.
$ oc get mc
샘플 출력
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 25m 00-worker a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 25m 01-master-container-runtime a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 25m 01-master-kubelet a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 25m 01-worker-container-runtime a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 25m 01-worker-kubelet a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 25m 51-master-rh-registry-trust 3.2.0 13s 51-worker-rh-registry-trust 3.2.0 53s 1 99-master-generated-crio-seccomp-use-default 3.2.0 25m 99-master-generated-registries a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 25m 99-master-ssh 3.2.0 28m 99-worker-generated-crio-seccomp-use-default 3.2.0 25m 99-worker-generated-registries a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 25m 99-worker-ssh 3.2.0 28m rendered-master-af1e7ff78da0a9c851bab4be2777773b a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 8s rendered-master-cd51fd0c47e91812bfef2765c52ec7e6 a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 24m rendered-worker-2b52f75684fbc711bd1652dd86fd0b82 a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 24m rendered-worker-be3b3bce4f4aa52a62902304bac9da3c a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.2.0 48s 2
작업자 머신 구성 풀이 새 머신 구성으로 업데이트되고 있는지 확인합니다.
$ oc get mcp
샘플 출력
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-af1e7ff78da0a9c851bab4be2777773b True False False 3 3 3 0 30m worker rendered-worker-be3b3bce4f4aa52a62902304bac9da3c False True False 3 0 0 0 30m 1
- 1
UPDATING
필드가True
이면 머신 구성 풀이 새 머신 구성으로 업데이트됩니다. 필드가False
가 되면 작업자 머신 구성 풀이 새 머신 구성으로 롤아웃되었습니다.
클러스터에서 RHEL7 작업자 노드를 사용하는 경우 작업자 머신 구성 풀이 업데이트되면
/etc/containers/registries.d
디렉터리의 해당 노드에 YAML 파일을 생성하여 지정된 레지스트리 서버에 대해 분리된 서명의 위치를 지정합니다. 다음 예제는registry.access.redhat.com
및registry.redhat.io
에서 호스팅되는 이미지에만 작동합니다.각 RHEL7 작업자 노드에 대한 디버그 세션을 시작합니다.
$ oc debug node/<node_name>
루트 디렉토리를
/host
로 변경합니다.sh-4.2# chroot /host
다음이 포함된
/etc/containers/registries.d/registry.redhat.io.yaml
파일을 만듭니다.docker: registry.redhat.io: sigstore: https://registry.redhat.io/containers/sigstore
다음이 포함된
/etc/containers/registries.d/registry.access.redhat.com.yaml
파일을 만듭니다.docker: registry.access.redhat.com: sigstore: https://access.redhat.com/webassets/docker/content/sigstore
- 디버그 세션을 종료합니다.
2.4.2. 서명 확인 구성 확인
머신 구성을 클러스터에 적용한 후 머신 구성 컨트롤러에서 새 MachineConfig
오브젝트를 감지하고 새로운 rendered-worker-<hash>
버전을 생성합니다.
사전 요구 사항
- 머신 구성 파일을 사용하여 서명 확인 활성화로 설정해야 합니다.
프로세스
명령줄에서 다음 명령을 실행하여 원하는 작업자에 대한 정보를 표시합니다.
$ oc describe machineconfigpool/worker
초기 작업자 모니터링의 출력 예
Name: worker Namespace: Labels: machineconfiguration.openshift.io/mco-built-in= Annotations: <none> API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfigPool Metadata: Creation Timestamp: 2019-12-19T02:02:12Z Generation: 3 Resource Version: 16229 Self Link: /apis/machineconfiguration.openshift.io/v1/machineconfigpools/worker UID: 92697796-2203-11ea-b48c-fa163e3940e5 Spec: Configuration: Name: rendered-worker-f6819366eb455a401c42f8d96ab25c02 Source: API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 00-worker API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 01-worker-container-runtime API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 01-worker-kubelet API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 51-worker-rh-registry-trust API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 99-worker-92697796-2203-11ea-b48c-fa163e3940e5-registries API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 99-worker-ssh Machine Config Selector: Match Labels: machineconfiguration.openshift.io/role: worker Node Selector: Match Labels: node-role.kubernetes.io/worker: Paused: false Status: Conditions: Last Transition Time: 2019-12-19T02:03:27Z Message: Reason: Status: False Type: RenderDegraded Last Transition Time: 2019-12-19T02:03:43Z Message: Reason: Status: False Type: NodeDegraded Last Transition Time: 2019-12-19T02:03:43Z Message: Reason: Status: False Type: Degraded Last Transition Time: 2019-12-19T02:28:23Z Message: Reason: Status: False Type: Updated Last Transition Time: 2019-12-19T02:28:23Z Message: All nodes are updating to rendered-worker-f6819366eb455a401c42f8d96ab25c02 Reason: Status: True Type: Updating Configuration: Name: rendered-worker-d9b3f4ffcfd65c30dcf591a0e8cf9b2e Source: API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 00-worker API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 01-worker-container-runtime API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 01-worker-kubelet API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 99-worker-92697796-2203-11ea-b48c-fa163e3940e5-registries API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 99-worker-ssh Degraded Machine Count: 0 Machine Count: 1 Observed Generation: 3 Ready Machine Count: 0 Unavailable Machine Count: 1 Updated Machine Count: 0 Events: <none>
oc describe
명령을 다시 실행합니다.$ oc describe machineconfigpool/worker
작업자가 업데이트된 후 출력 예
... Last Transition Time: 2019-12-19T04:53:09Z Message: All nodes are updated with rendered-worker-f6819366eb455a401c42f8d96ab25c02 Reason: Status: True Type: Updated Last Transition Time: 2019-12-19T04:53:09Z Message: Reason: Status: False Type: Updating Configuration: Name: rendered-worker-f6819366eb455a401c42f8d96ab25c02 Source: API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 00-worker API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 01-worker-container-runtime API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 01-worker-kubelet API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 51-worker-rh-registry-trust API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 99-worker-92697796-2203-11ea-b48c-fa163e3940e5-registries API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfig Name: 99-worker-ssh Degraded Machine Count: 0 Machine Count: 3 Observed Generation: 4 Ready Machine Count: 3 Unavailable Machine Count: 0 Updated Machine Count: 3 ...
참고Observed Generation
매개변수는 컨트롤러에서 생성된 구성의 생성에 따라 증가된 개수를 보여줍니다. 이 컨트롤러는 사양을 처리하고 수정본을 생성하지 못하더라도 이 값을 업데이트합니다.Configuration Source
값은51-worker-rh-registry-trust
구성을 나타냅니다.다음 명령을 사용하여
policy.json
파일이 있는지 확인합니다.$ oc debug node/<node> -- chroot /host cat /etc/containers/policy.json
출력 예
Starting pod/<node>-debug ... To use host binaries, run `chroot /host` { "default": [ { "type": "insecureAcceptAnything" } ], "transports": { "docker": { "registry.access.redhat.com": [ { "type": "signedBy", "keyType": "GPGKeys", "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release" } ], "registry.redhat.io": [ { "type": "signedBy", "keyType": "GPGKeys", "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release" } ] }, "docker-daemon": { "": [ { "type": "insecureAcceptAnything" } ] } } }
다음 명령을 사용하여
registry.redhat.io.yaml
파일이 있는지 확인합니다.$ oc debug node/<node> -- chroot /host cat /etc/containers/registries.d/registry.redhat.io.yaml
출력 예
Starting pod/<node>-debug ... To use host binaries, run `chroot /host` docker: registry.redhat.io: sigstore: https://registry.redhat.io/containers/sigstore
다음 명령을 사용하여
registry.access.redhat.yaml
파일이 있는지 확인합니다.$ oc debug node/<node> -- chroot /host cat /etc/containers/registries.d/registry.access.redhat.com.yaml
출력 예
Starting pod/<node>-debug ... To use host binaries, run `chroot /host` docker: registry.access.redhat.com: sigstore: https://access.redhat.com/webassets/docker/content/sigstore