IBM Cloud Docs
앱에 대한 이미지 빌드

앱에 대한 이미지 빌드

Docker 이미지는 IBM Cloud® Kubernetes Service를 사용하여 작성하는 모든 컨테이너의 기초가 됩니다.

이미지는 이미지를 빌드하는 지시사항이 포함된 파일인 Dockerfile에서 작성됩니다. Dockerfile은 앱, 해당 앱의 구성 및 그 종속 항목과 같이 개별적으로 저장되는 해당 지시사항의 빌드 아티팩트를 참조할 수 있습니다.

IBM Cloud Container Registry 이미지에서 default Kubernetes 네임스페이스로 컨테이너 배치

IBM Cloud Container Registry 네임스페이스에 저장된 개인용 이미지나 IBM 제공 공용 이미지에서 클러스터로 컨테이너를 배치할 수 있습니다. 클러스터에서 레지스트리 이미지에 액세스하는 방법에 대한 자세한 정보는 IBM Cloud Container Registry에서 이미지를 가져오도록 클러스터에 권한을 부여하는 방법 이해를 참조하십시오.

시작하기 전에:

  1. IBM Cloud Container Registry에 네임스페이스를 설정하고 이 네임스페이스에 이미지를 푸시하십시오.

  2. 클러스터를 작성하십시오.

  3. 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

  4. <deployment>.yaml이라는 배치 구성 파일을 작성하십시오.

  5. IBM Cloud Container Registry의 네임스페이스에서 사용할 배치 및 이미지를 정의하십시오.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <deployment>
    spec:
      replicas: <number_of_replicas>
      selector:
        matchLabels:
          app: <app_name>
      template:
        metadata:
          labels:
            app: <app_name>
        spec:
          containers:
          - name: <app_name>
            image: <region>.icr.io/<namespace>/<image>:<tag>
    
    <deployment>
    배치에 이름을 지정하십시오.
    <number_of_replicas>
    배치에서 작성하는 복제본 팟(Pod) 수를 입력하십시오.
    app: <app_name>
    앱 이름을 컨테이너의 레이블로 사용하십시오.
    name: <app_name>
    컨테이너에 이름을 지정하십시오(예: app 레이블 이름).
    image: <region>.icr.io/namespace>/image>:tag>
    이미지 URL 변수를 사용자의 이미지 정보로 바꾸십시오.
    region>: 레지스트리 도메인의 지역 IBM Cloud Container Registry API 엔드포인트입니다. 로그인한 지역의 도메인 목록을 나열하려면 ibmcloud cr api를 실행하십시오.
    namespace>: 레지스트리 네임스페이스입니다. 네임스페이스 정보를 가져오려면 ibmcloud cr namespace-list를 실행하십시오.
    image>:tag>: 컨테이너에 사용할 이미지 및 태그입니다. 레지스트리 네임스페이스에 사용 가능한 이미지를 나열하려면 ibmcloud cr images를 실행하십시오.
  6. 클러스터에 배치를 작성하십시오.

    kubectl apply -f <deployment>.yaml
    

팟(Pod) 배치의 이미지 풀 시크릿 참조

클러스터 관리자가 Kubernetes 서비스 계정에 이미지 풀 시크릿을 저장하지 않은 경우 서비스 계정을 지정하지 않은 모든 배치는 이미지 풀 시크릿을 사용하여 컨테이너를 배치할 수 없습니다. 대신, 팟(Pod) 배치에서 이미지 풀 시크릿을 정의할 수 있습니다. 팟 배치에서 이미지 풀 시크릿을 참조하는 경우 이미지 풀 시크릿은 이 팟에만 유효하며 Kubernetes 네임스페이스의 팟 간에 공유할 수 없습니다.

시작하기 전에

팟(Pod) 배치에서 이미지 풀 시크릿을 참조하려면 다음을 수행하십시오.

  1. mypod.yaml이라는 이름의 팟(Pod) 구성 파일을 작성하십시오.

  2. IBM Cloud Container Registry의 이미지에 액세스하기 위한 팟(Pod) 및 이미지 풀 시크릿을 정의하십시오.

    개인용 이미지에 액세스하려면 다음과 같이 정의하십시오.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: <container_name>
          image: <region>.icr.io/<namespace_name>/<image_name>:<tag>
      imagePullSecrets:
        - name: <secret_name>
    

    IBM Cloud 공용 이미지에 액세스하려면 다음과 같이 정의하십시오.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: <container_name>
          image: icr.io/<image_name>:<tag>
      imagePullSecrets:
        - name: <secret_name>
    
    container_name>
    클러스터에 배치할 컨테이너의 이름입니다. namespace_name>: 이미지가 저장되는 레지스트리 네임스페이스입니다. 사용 가능한 네임스페이스를 나열하려면 ibmcloud cr namespace-list를 실행하십시오. image_name>: 사용할 이미지의 이름입니다. IBM Cloud 계정에서 사용 가능한 이미지를 나열하려면 ibmcloud cr image-list를 실행하십시오. tag>: 사용하려는 이미지의 버전입니다. 태그가 지정되지 않은 경우, 기본적으로 latest로 태그가 지정된 이미지가 사용됩니다. <secret_name>: 이전에 작성한 이미지 풀 시크릿의 이름입니다.
  3. 변경사항을 저장하십시오.

  4. 클러스터에 배치를 작성하십시오.

    kubectl apply -f mypod.yaml
    

이미지를 IBM Cloud Container Registry에 푸시

클러스터 관리자가 IBM Cloud Container Registry로 이미지 레지스트지를 설정하고 나면 이미지를 네임스페이스에 추가하여 안전하게 Docker 이미지를 저장하고 다른 사용자와 공유할 수 있습니다.

예를 들어, 사설 또는 공용 레지스트리 소스에서 이미지를 가져온 후 IBM Cloud Container Registry에서 차후 사용을 위해 이를 태그로 지정할 수 있습니다. 또는 다른 사용자가 이미지에 액세스할 수 있도록 작업하는 Docker 이미지를 네임스페이스에 푸시할 수 있습니다. 시작하려면 이미지를 네임스페이스에 추가를 참조하십시오.

Vulnerability Advisor로 IBM Cloud Container Registry에서 이미지의 보안 관리

Vulnerability Advisor는 IBM, 서드파티에서 제공하거나 조직의 IBM Cloud Container Registry 네임스페이스에 추가되는 컨테이너 이미지의 보안 상태를 확인합니다.

이미지를 네임스페이스에 추가하면 보안 문제 및 잠재적인 취약성을 발견하도록 Vulnerability Advisor에서 자동으로 이미지를 스캔합니다. 보안 문제가 발견되면 보고된 취약성을 수정하는 데 유용한 지시사항이 제공됩니다. 시작하려면 Vulnerability Advisor를 사용하여 이미지 보안 관리를 참조하십시오.

컨테이너 이미지에 대한 신뢰할 수 있는 컨텐츠 설정

서명되어 IBM Cloud Container Registry에 저장된 신뢰할 수 있는 이미지에서 컨테이너를 빌드하고 서명되지 않았거나 취약한 이미지에서 배치되지 않도록 할 수 있습니다.

  1. 신뢰할 수 있는 컨텐츠에 대한 이미지에 서명하십시오. 이미지에 대한 신뢰를 설정한 후 레지스트리에 이미지를 푸시할 수 있는 신뢰할 수 있는 컨텐츠 및 서명자를 관리할 수 있습니다.
  2. 클러스터에서 컨테이너를 빌드하는 데 서명된 이미지만 사용할 수 있도록 정책을 강제 실행하려면 오픈 소스 Portieris 프로젝트를 설치하십시오.
  3. 클러스터 사용자는 신뢰할 수 있는 이미지에서 빌드된 앱을 배치할 수 있습니다.
    1. default Kubernetes 네임스페이스에 배치하십시오.
    2. 다른 Kubernetes 네임스페이스에 배치하거나 다른 IBM Cloud 지역 또는 계정에서 배치하십시오.

클러스터에서 이미지 보안 적용 사용

클러스터에서 이미지 보안 적용을 사용으로 설정할 때 오픈 소스 Portieris Kubernetes 프로젝트를 설치합니다. 그런 다음 클러스터에서 정책을 충족하지 않는 팟(Pod)(예: 서명되지 않은 이미지)이 실행되지 않도록 차단하는 이미지 정책을 작성할 수 있습니다.

자세한 내용은 Portieris 문서를 참고하세요.

변경된 이미지: 기본적으로 Portieris는 태그 대신 요약으로 이미지를 참조하도록 MutatingAdmissionWebhook 승인 제어기를 사용하여 이미지를 변경합니다. 하지만, 변경된 이미지를 거부하는 일부 배치 기술이 있을 수 있습니다. 그렇다면 이미지 변형 옵션정책을 사용하여 기본 동작을 변경할 수 있습니다.

이미지 보안 적용 사용 또는 사용 안함

CLI 또는 콘솔에서 클러스터의 이미지 보안 적용을 활성화하거나 비활성화할 수 있습니다. 이전 버전의 경우, Portieris 문서를 참조하십시오.

CLI를 사용하여 이미지 보안 적용을 사용 또는 사용 안함으로 설정

다음 명령을 참조하십시오.

콘솔에서 이미지 보안 적용을 사용 또는 사용 안함으로 설정

  1. 콘솔에서 클러스터를 선택합니다.
  2. 이미지 보안 적용 필드를 찾아 활성화 또는 비활성화를 클릭합니다.

기본 이미지 정책

이미지 보안 적용을 사용으로 설정하는 경우 IBM Cloud Kubernetes Service에서 자동으로 클러스터에 특정 이미지 정책을 작성합니다. 이 기능을 사용 안함으로 설정하면 기본 ClusterImagePolicy CRD가 제거되어 모든 기본 이미지 정책 및 사용자가 작성한 모든 사용자 정의 이미지 정책이 제거됩니다.

  • 이름이 ibm-signed-image-enforcement인 이미지 정책은 네임스페이스에서 실행되는 이미지를 IBM Cloud Kubernetes Service 이미지로 제한합니다. 이러한 이미지 정책을 수정하지 마십시오. 몇 분 후에 변경사항이 겹쳐써집니다.
  • 다른 이미지 정책(예: default 또는 default-allow-all)은 다른 이미지 정책에서 제한되지 않는 이미지를 허용합니다. 이러한 이미지 정책을 수정할 수 있고 변경사항이 보존되지만 이미지 정책의 이름을 바꾸지 마십시오. 정책의 이름을 바꾸면 기본 이름 및 설정의 추가 정책이 작성됩니다.

클러스터의 이미지 정책을 검토하려면 다음을 수행하십시오.

시작하기 전에

계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

  1. 클러스터에 글로벌로 적용되는 이미지 정책을 나열하십시오. 설정 예는 Portieris 정책 문서를 참고하세요.

    kubectl get ClusterImagePolicy
    
  2. 클러스터 내 특정 네임스페이스에 적용되는 이미지 정책을 나열하십시오. 설정 예는 Portieris 정책 문서를 참고하세요.

    kubectl get ImagePolicy --all-namespaces