BuildConfig를 사용하는 빌드
1장. 이미지 빌드 이해 링크 복사링크가 클립보드에 복사되었습니다!
1.1. 빌드 링크 복사링크가 클립보드에 복사되었습니다!
빌드는 입력 매개변수를 결과 오브젝트로 변환하는 프로세스입니다. 대부분의 경우 프로세스는 입력 매개변수 또는 소스 코드를 실행 가능한 이미지로 변환하는 데 사용됩니다. BuildConfig
오브젝트는 전체 빌드 프로세스에 대한 정의입니다.
OpenShift Container Platform에서는 빌드 이미지에서 컨테이너를 생성하고 이를 컨테이너 이미지 레지스트리로 내보내는 방식으로 Kubernetes를 사용합니다.
빌드 오브젝트는 빌드에 대한 입력, 즉 빌드 프로세스를 완료하고 빌드 프로세스를 로깅한 후 성공한 빌드의 리소스를 게시하고 빌드의 최종 상태를 게시하는 데 필요한 요구 사항과 같은 공통 특징을 공유합니다. 빌드에서는 CPU 사용량, 메모리 사용량, 빌드 또는 Pod 실행 시간과 같은 리소스 제한 사항을 활용합니다.
OpenShift Container Platform 빌드 시스템은 빌드 API에서 지정한 선택 가능한 유형을 기반으로 하는 빌드 전략에 확장 가능한 지원을 제공합니다. 다음은 세 가지 주요 빌드 전략입니다.
- Docker 빌드
- S2I(Source-to-Image) 빌드
- 사용자 정의 빌드
기본적으로 Docker 빌드 및 S2I 빌드가 지원됩니다.
빌드의 결과 오브젝트는 빌드를 생성하는 데 사용된 빌더에 따라 다릅니다. Docker 및 S2I 빌드의 경우 결과 오브젝트는 실행 가능한 이미지입니다. 사용자 정의 빌드의 경우 결과 오브젝트는 빌더 이미지 작성자가 지정한 모든 항목입니다.
또한 파이프라인 빌드 전략을 사용하여 정교한 워크플로를 구현할 수 있습니다.
- 연속 통합
- 연속 배포
1.1.1. Docker 빌드 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform은 Buildah를 사용하여 Dockerfile에서 컨테이너 이미지를 빌드합니다. Dockerfile을 사용하여 컨테이너 이미지를 빌드하는 방법에 대한 자세한 내용은 Dockerfile 참조 문서를 참조하십시오.
buildArgs
배열을 사용하여 Docker 빌드 인수를 설정하는 경우 Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.
1.1.2. S2I(Source-to-Image) 빌드 링크 복사링크가 클립보드에 복사되었습니다!
S2I(Source-to-Image)는 재현 가능한 컨테이너 이미지를 빌드하는 툴입니다. 컨테이너 이미지에 애플리케이션 소스를 삽입하고 새 이미지를 어셈블하여 실행할 수 있는 이미지를 생성합니다. 새 이미지는 기본 이미지, 빌더, 빌드 소스를 통합하고 buildah run
명령과 함께 사용할 수 있습니다. S2I는 이전에 다운로드한 종속 항목, 이전에 빌드한 아티팩트 등을 다시 사용하는 증분 빌드를 지원합니다.
1.1.3. 사용자 정의 빌드 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 빌드 전략을 사용하면 개발자가 전체 빌드 프로세스를 담당하는 특정 빌더 이미지를 정의할 수 있습니다. 자체 빌더 이미지를 사용하면 빌드 프로세스를 사용자 정의할 수 있습니다.
사용자 정의 빌더 이미지는 빌드 프로세스 논리가 포함된 일반 컨테이너 이미지입니다(예: RPM 또는 기본 이미지 빌드).
사용자 정의 빌드는 높은 권한으로 실행되며 기본적으로 사용자에게 제공되지 않습니다. 클러스터 관리 권한이 있는 신뢰할 수 있는 사용자에게만 사용자 정의 빌드를 실행할 수 있는 권한을 부여해야 합니다.
1.1.4. 파이프라인 빌드 링크 복사링크가 클립보드에 복사되었습니다!
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
파이프라인 빌드 전략을 사용하면 개발자가 Jenkins 파이프라인 플러그인에서 사용할 Jenkins 파이프라인을 정의할 수 있습니다. 다른 빌드 유형과 동일한 방식으로 OpenShift Container Platform에서 빌드를 시작, 모니터링, 관리할 수 있습니다.
파이프라인 워크플로는 빌드 구성에 직접 포함하거나 Git 리포지토리에 제공하는 방식으로 jenkinsfile
에 정의하고 빌드 구성에서 참조합니다.
2장. 빌드 구성 이해 링크 복사링크가 클립보드에 복사되었습니다!
다음 섹션에서는 빌드의 개념과 빌드 구성을 정의하고 사용 가능한 주요 빌드 전략을 간략히 설명합니다.
2.1. BuildConfigs 링크 복사링크가 클립보드에 복사되었습니다!
빌드 구성은 단일 빌드 정의와 새 빌드가 생성될 때의 트리거 세트를 나타냅니다. 빌드 구성은 BuildConfig
에 의해 정의되는데 BuildConfig는 새 인스턴스를 생성하기 위해 API 서버에 대한 POST에 사용할 수 있는 REST 오브젝트입니다.
빌드 구성 또는 BuildConfig
는 빌드 전략 및 하나 이상의 소스가 특징입니다. 전략에 따라 프로세스가 결정되고 소스에서는 입력을 제공합니다.
OpenShift Container Platform을 사용하여 애플리케이션을 생성하기 위해 선택하는 방법에 따라 BuildConfig
는 일반적으로 웹 콘솔 또는 CLI를 사용하는 경우 자동으로 생성되며 언제든지 편집할 수 있습니다. BuildConfig
를 구성하는 부분과 해당 부분의 사용 가능한 옵션을 이해하면 나중에 구성을 수동으로 변경할 때 도움이 될 수 있습니다.
다음 예제 BuildConfig
에서는 컨테이너 이미지 태그 또는 소스 코드가 변경될 때마다 새 빌드를 생성합니다.
BuildConfig
오브젝트 정의
- 1
- 이 사양은
ruby-sample-build
라는 새BuildConfig
를 생성합니다. - 2
runPolicy
필드는 이 빌드 구성에서 생성한 빌드를 동시에 실행할 수 있는지 여부를 제어합니다. 기본값은Serial
입니다. 즉 새 빌드가 동시에 실행되지 않고 순차적으로 실행됩니다.- 3
- 트리거 목록을 지정할 수 있으며 이 경우 새 빌드가 생성될 수 있습니다.
- 4
source
섹션은 빌드의 소스를 정의합니다. 소스 유형에 따라 기본 입력 소스가 결정되는데, 소스 유형은 코드 리포지토리 위치를 가리키는Git
, 인라인 Dockerfile에서 빌드하는Dockerfile
또는 바이너리 페이로드를 허용하는Binary
일 수 있습니다. 한 번에 여러 개의 소스를 사용할 수 있습니다. 자세한 내용은 각 소스 유형에 대한 설명서를 참조하십시오.- 5
strategy
섹션에서는 빌드를 실행하는 데 사용하는 빌드 전략에 대해 설명합니다. 여기에서Source
,Docker
또는Custom
전략을 지정할 수 있습니다. 이 예에서는 S2I(Source-to-Image)에서 애플리케이션 빌드에 사용하는ruby-20-centos7
컨테이너 이미지를 사용합니다.- 6
- 컨테이너 이미지가 성공적으로 빌드되면
output
섹션에 설명된 리포지토리로 푸시됩니다. - 7
postCommit
섹션에서는 선택적 빌드 후크를 정의합니다.
3장. 빌드 입력 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 섹션에서는 빌드 입력에 대한 개요, 입력을 사용하여 빌드가 작동하도록 소스 콘텐츠를 제공하는 방법, 빌드 환경을 사용하고 보안을 생성하는 방법에 대한 지침을 확인할 수 있습니다.
3.1. 빌드 입력 링크 복사링크가 클립보드에 복사되었습니다!
빌드 입력에서는 빌드가 작동하도록 소스 콘텐츠를 제공합니다. 다음 빌드 입력을 사용하여 OpenShift Container Platform에 소스를 제공할 수 있습니다(우선순위 순으로 표시됨).
- 인라인 Dockerfile 정의
- 기존 이미지에서 추출한 컨텐츠
- Git 리포지토리
- 바이너리(로컬) 입력
- 입력 보안
- 외부 아티팩트
단일 빌드에서 여러 입력을 결합할 수 있습니다. 그러나 인라인 Dockerfile이 우선하므로 다른 입력에서 제공하는 Dockerfile이라는 기타 파일을 덮어쓸 수 있습니다. 바이너리(local) 입력과 Git 리포지토리는 서로 함께 사용할 수 없는 입력입니다.
빌드 중 사용한 특정 리소스 또는 자격 증명을 빌드에서 생성한 최종 애플리케이션 이미지에 사용하지 않으려는 경우 또는 보안 리소스에 정의된 값을 사용하려는 경우에는 입력 보안을 사용하면 됩니다. 외부 아티팩트를 사용하면 기타 빌드 입력 유형 중 하나로 사용할 수 없는 추가 파일을 가져올 수 있습니다.
빌드를 실행하면 다음이 수행됩니다.
- 작업 디렉터리가 구성되고 모든 입력 콘텐츠가 작업 디렉터리에 배치됩니다. 예를 들어 입력 Git 리포지토리가 작업 디렉터리에 복제되고 입력 이미지에서 지정된 파일이 타겟 경로를 사용하여 작업 디렉터리에 복사됩니다.
-
빌드 프로세스에서는
contextDir
이 정의된 경우 디렉터리를 해당 디렉터리로 변경합니다. - 인라인 Dockerfile(있는 경우)은 현재 디렉터리에 기록됩니다.
-
현재 디렉터리의 콘텐츠는 Dockerfile, 사용자 지정 빌더 논리 또는
assemble
스크립트에서 참조할 수 있도록 빌드 프로세스에 제공됩니다. 즉contextDir
외부에 있는 모든 입력 콘텐츠는 빌드에서 무시합니다.
다음 소스 정의 예제에는 다양한 입력 유형 및 이러한 유형이 결합되는 방법에 대한 설명이 포함되어 있습니다. 각 입력 유형이 정의되는 방법에 대한 자세한 내용은 각 입력 유형별 섹션을 참조하십시오.
3.2. Dockerfile 소스 링크 복사링크가 클립보드에 복사되었습니다!
dockerfile
값을 제공하면 이 필드의 콘텐츠가 dockerfile
이라는 파일로 디스크에 작성됩니다. 이 작업은 다른 입력 소스를 처리한 후 수행되므로 입력 소스 리포지토리의 루트 디렉터리에 Dockerfile이 포함된 경우 해당 콘텐츠가 이를 덮어씁니다.
소스 정의는 BuildConfig
에 있는 spec
섹션의 일부입니다.
source: dockerfile: "FROM centos:7\nRUN yum install -y httpd"
source:
dockerfile: "FROM centos:7\nRUN yum install -y httpd"
- 1
dockerfile
필드에는 빌드된 인라인 Dockerfile이 포함됩니다.
3.3. 이미지 소스 링크 복사링크가 클립보드에 복사되었습니다!
이미지가 포함된 빌드 프로세스에 파일을 추가할 수 있습니다. 입력 이미지는 From
및 To
이미지 타겟을 정의하는 방식과 동일한 방식으로 참조합니다. 즉 컨테이너 이미지와 이미지 스트림 태그를 모두 참조할 수 있습니다. 이미지와 함께 이미지를 복사할 파일 또는 디렉터리의 경로와 빌드 컨텍스트에서 해당 이미지를 배치할 대상을 나타내는 하나 이상의 경로 쌍을 제공해야 합니다.
소스 경로는 지정된 이미지 내의 모든 절대 경로일 수 있습니다. 대상은 상대 디렉터리 경로여야 합니다. 빌드 시 이미지가 로드되고 표시된 파일과 디렉터리가 빌드 프로세스의 컨텍스트 디렉터리로 복사됩니다. 이 디렉터리는 소스 리포지토리 콘텐츠가 복제되는 것과 동일한 디렉터리입니다. 소스 경로가 /.
로 종료되면 디렉터리의 콘텐츠가 복사되지만 디렉터리 자체는 대상에 생성되지 않습니다.
이미지 입력은 BuildConfig
의 source
정의에 지정됩니다.
클러스터에서 ImageDigestMirrorSet
,ImageTagMirrorSet
또는 ImageContentSourcePolicy
개체를 사용하여 저장소 미러링을 구성하는 경우 미러링된 레지스트리에 대해 글로벌 풀 시크릿만 사용할 수 있습니다. 프로젝트에 풀 시크릿을 추가할 수 없습니다.
pull 시크릿이 필요한 이미지
가져오기 보안이 필요한 입력 이미지를 사용하는 경우 빌드에서 사용하는 서비스 계정에 가져오기 보안을 연결할 수 있습니다. 기본적으로 빌드에서는 builder
서비스 계정을 사용합니다. 보안에 입력 이미지를 호스팅하는 리포지토리와 일치하는 자격 증명이 포함된 경우 가져오기 보안이 빌드에 자동으로 추가됩니다. 빌드에서 사용하는 서비스 계정에 가져오기 보안을 연결하려면 다음을 실행합니다.
oc secrets link builder dockerhub
$ oc secrets link builder dockerhub
이 기능은 사용자 정의 전략을 사용하는 빌드에는 지원되지 않습니다.
풀 시크릿이 필요한 미러링된 레지스트리의 이미지
미러링된 레지스트리의 입력 이미지를 사용하는 경우 build error: failed to pull image
메시지를 가져오지 못했습니다. 다음 방법 중 하나를 사용하여 오류를 해결할 수 있습니다.
- 빌더 이미지 저장소 및 모든 알려진 미러에 대한 인증 인증 정보가 포함된 입력 보안을 생성합니다. 이 경우 이미지 레지스트리 및 해당 미러에 대한 인증 정보에 대한 풀 시크릿을 생성합니다.
-
입력 보안을
BuildConfig
오브젝트의 풀 시크릿으로 사용합니다.
3.4. Git 소스 링크 복사링크가 클립보드에 복사되었습니다!
지정하는 경우 입력한 위치에서 소스 코드를 가져옵니다.
인라인 Dockerfile을 제공하는 경우 Git 리포지토리의 contextDir
에 Dockerfile을 덮어씁니다.
소스 정의는 BuildConfig
에 있는 spec
섹션의 일부입니다.
- 1
git
필드에는 소스 코드의 원격 Git 리포지토리에 대한 URI(Uniform Resource Identifier)가 포함되어 있습니다. 특정 Git 참조를 확인하려면ref
필드의 값을 지정해야 합니다. 유효한ref
는 SHA1 태그 또는 분기 이름이 될 수 있습니다.ref
필드의 기본값은master
입니다.- 2
contextDir
필드를 사용하면 빌드에서 애플리케이션 소스 코드를 찾는 소스 코드 리포지토리 내부의 기본 위치를 덮어쓸 수 있습니다. 애플리케이션이 하위 디렉터리에 있는 경우 이 필드를 사용하여 기본 위치(루트 폴더)를 덮어쓸 수 있습니다.- 3
- 선택적
dockerfile
필드를 제공하는 경우 소스 리포지토리에 있을 수 있는 모든 Dockerfile을 덮어쓰는 Dockerfile이 문자열에 포함되어야 합니다.
ref
필드가 가져오기 요청을 나타내는 경우 시스템은 git fetch
작업을 사용한 후 FETCH_HEAD
를 점검합니다.
ref
값을 제공하지 않으면 OpenShift Container Platform에서 부분 복제(--depth=1)
를 수행합니다. 이 경우 기본 분기(일반적으로 master
)의 최근 커밋과 관련된 파일만 다운로드됩니다. 그러면 리포지토리는 더 빠르게 다운로드되지만 전체 커밋 내역은 다운로드되지 않습니다. 지정된 리포지토리의 기본 분기의 전체 git clone
을 수행하려면 기본 분기 이름(예: main
)을 ref
로 설정합니다.
MITM(Man in the middle) TLS 하이재킹을 수행하거나 프록시 연결을 재암호화하고 있는 프록시를 통과하는 Git 복제 작업이 작동하지 않습니다.
3.4.1. 프록시 사용 링크 복사링크가 클립보드에 복사되었습니다!
프록시를 사용하는 경우에만 Git 리포지토리에 액세스할 수 있는 경우 빌드 구성의 source
섹션에 사용할 프록시를 정의할 수 있습니다. 사용할 HTTP 및 HTTPS 프록시를 둘 다 구성할 수 있습니다. 두 필드 모두 선택 사항입니다. 프록시를 사용할 수 없는 도메인도 NoProxy
필드에 지정할 수 있습니다.
이를 위해서는 소스 URI에서 HTTP 또는 HTTPS 프로토콜을 사용해야 합니다.
Pipeline 전략 빌드의 경우 Jenkins용 Git 플러그인에 대한 현재 제한 사항을 고려할 때 Git 플러그인을 통한 모든 Git 작업은 BuildConfig
에 정의된 HTTP 또는 HTTPS 프록시를 사용하지 않습니다. Git 플러그인은 플러그인 관리자 패널에서 Jenkins UI에 구성된 프록시만 사용합니다. 그런 다음 이 프록시는 모든 작업에서 Jenkins 내의 모든 Git 상호 작용에 사용됩니다.
3.4.2. 소스 복제 보안 링크 복사링크가 클립보드에 복사되었습니다!
빌더 Pod는 빌드의 소스로 정의된 모든 Git 리포지토리에 액세스해야 합니다. 소스 복제 보안은 자체 서명되거나 신뢰할 수 없는 SSL 인증서가 있는 프라이빗 리포지토리 또는 리포지토리와 같이 일반적으로 액세스할 수 없는 리포지토리에 대한 액세스 권한을 제공하는 데 사용됩니다.
다음과 같은 소스 복제 보안 구성이 지원됩니다.
-
.gitconfig
파일 - 기본 인증
- SSH 키 인증
- 신뢰할 수 있는 인증 기관
이러한 구성의 조합을 사용하여 특정 요구 사항을 충족할 수도 있습니다.
3.4.2.1. 빌드 구성에 소스 복제 보안 자동 추가 링크 복사링크가 클립보드에 복사되었습니다!
BuildConfig
가 생성되면 OpenShift Container Platform에서 소스 복제 보안 참조를 자동으로 채울 수 있습니다. 이 동작을 사용하면 생성된 빌드에서 참조된 보안에 저장된 자격 증명을 자동으로 사용하여 추가 구성없이 원격 Git 리포지토리에 인증할 수 있습니다.
이 기능을 사용하려면 Git 리포지토리 자격 증명이 포함된 보안이 나중에 BuildConfig
가 생성되는 네임스페이스에 있어야 합니다. 이 보안에는 build.openshift.io/source-secret-match-uri-
접두사가 있는 주석이 하나 이상 포함되어야 합니다. 이러한 주석의 각 값은 다음과 같이 정의되는 URI(Uniform Resource Identifier) 패턴입니다. 소스 복제 보안 참조 없이 BuildConfig
를 생성하고 해당 Git 소스 URI가 보안 주석의 URI 패턴과 일치하는 경우 OpenShift Container Platform은 BuildConfig
에 해당 보안에 대한 참조를 자동으로 삽입합니다.
사전 요구 사항
URI 패턴은 다음으로 구성되어야 합니다.
-
유효 스키마:
*://
,git://
,http://
,https://
또는ssh://
-
호스트: *' 또는 유효한 호스트 이름이나 필요한 경우 앞에
*.
가 있는 IP 주소 -
경로:
/*
또는/
뒤에*
문자를 선택적으로 포함하는 모든 문자
위의 모든 항목에서 *
문자는 와일드카드로 해석됩니다.
URI 패턴은 RFC3986을 준수하는 Git 소스 URI와 일치해야 합니다. URI 패턴에 사용자 이름(또는 암호) 구성 요소를 포함하지 마십시오.
예를 들어 Git 리포지토리 URL에 ssh://git@bitbucket.atlassian.com:7999/ATLASSIAN jira.git
을 사용하는 경우 소스 보안을 ssh://bitbucket.atlassian.com:7999/*
(ssh://git@bitbucket.atlassian.com:7999/*
아님)로 지정해야 합니다.
oc annotate secret mysecret \ 'build.openshift.io/source-secret-match-uri-1=ssh://bitbucket.atlassian.com:7999/*'
$ oc annotate secret mysecret \
'build.openshift.io/source-secret-match-uri-1=ssh://bitbucket.atlassian.com:7999/*'
프로세스
특정 BuildConfig
의 Git URI와 일치하는 보안이 여러 개인 경우 OpenShift Container Platform은 가장 긴 일치 항목이 있는 보안을 선택합니다. 이렇게 하면 다음 예와 같이 기본 덮어쓰기가 가능합니다.
다음 조각은 두 개의 부분적인 소스 복제 보안을 보여줍니다. 첫 번째는 HTTPS를 통해 액세스하는 도메인 mycorp.com
의 모든 서버와 일치하고, 두 번째는 서버 mydev1.mycorp.com
및 mydev2.mycorp.com
에 대한 액세스 권한을 덮어씁니다.
다음을 사용하여 기존 보안에
build.openshift.io/source-secret-match-uri-
주석을 추가합니다.oc annotate secret mysecret \ 'build.openshift.io/source-secret-match-uri-1=https://*.mycorp.com/*'
$ oc annotate secret mysecret \ 'build.openshift.io/source-secret-match-uri-1=https://*.mycorp.com/*'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2.2. 수동으로 소스 복제 보안 추가 링크 복사링크가 클립보드에 복사되었습니다!
소스 복제 보안은 BuildConfig
내부의 source
필드에 sourceSecret
필드를 추가한 후 사용자가 생성한 보안의 이름으로 설정하는 방식으로 빌드 구성에 수동으로 추가할 수 있습니다. 다음 예에서는 basicsecret
입니다.
프로세스
oc set build-secret
명령을 사용하여 기존 빌드 구성에 소스 복제 보안을 설정할 수도 있습니다.
기존 빌드 구성에 소스 복제 보안을 설정하려면 다음 명령을 입력합니다.
oc set build-secret --source bc/sample-build basicsecret
$ oc set build-secret --source bc/sample-build basicsecret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2.3. .gitconfig 파일에서 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션 복제에서 .gitconfig
파일을 사용하는 경우 이 파일을 포함하는 보안을 생성할 수 있습니다. 빌더 서비스 계정에 추가한 다음 BuildConfig
에 추가합니다.
프로세스
-
.gitconfig
파일에서 보안을 생성하려면 다음을 수행합니다.
oc create secret generic <secret_name> --from-file=<path/to/.gitconfig>
$ oc create secret generic <secret_name> --from-file=<path/to/.gitconfig>
.gitconfig
파일의 http
섹션에 sslVerify=false
가 설정되어 있는 경우 SSL 확인을 해제할 수 있습니다.
[http] sslVerify=false
[http]
sslVerify=false
3.4.2.4. 보안 Git의 .gitconfig 파일에서 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
Git 서버가 양방향 SSL과 사용자 이름 및 암호로 보호되는 경우 소스 빌드에 인증서 파일을 추가하고 .gitconfig
파일의 인증서 파일에 참조를 추가해야 합니다.
사전 요구 사항
- Git 자격 증명이 있어야 합니다.
프로세스
소스 빌드에 인증서 파일을 추가하고 .gitconfig
파일의 인증서 파일에 대한 참조를 추가합니다.
-
애플리케이션 소스 코드의
/var/run/secrets/openshift.io/source/
폴더에client.crt
,cacert.crt
,client.key
파일을 추가합니다. 서버의
.gitconfig
파일에서 다음 예에 표시된[http]
섹션을 추가합니다.cat .gitconfig
# cat .gitconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 보안을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
암호를 다시 입력하지 않으려면 빌드에서 S2I(Source-to-Image) 이미지를 지정해야 합니다. 그러나 리포지토리를 복제할 수 없는 경우 빌드를 승격하려면 사용자 이름과 암호를 계속 지정해야 합니다.
3.4.2.5. 소스 코드 기본 인증에서 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
기본 인증에는 --username
및 --password
의 조합 또는 SCM(소프트웨어 구성 관리) 서버에 대해 인증하는 토큰이 필요합니다.
사전 요구 사항
- 개인 리포지토리에 액세스할 수 있는 사용자 이름 및 암호입니다.
프로세스
먼저 보안을 생성한 후
--username
및--password
를 사용하여 개인 리포지토리에 액세스합니다.oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --type=kubernetes.io/basic-auth
$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --type=kubernetes.io/basic-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 토큰을 사용하여 기본 인증 보안을 생성합니다.
oc create secret generic <secret_name> \ --from-literal=password=<token> \ --type=kubernetes.io/basic-auth
$ oc create secret generic <secret_name> \ --from-literal=password=<token> \ --type=kubernetes.io/basic-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2.6. 소스 코드 SSH 키 인증에서 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
SSH 키 기반 인증에는 개인 SSH 키가 필요합니다.
리포지토리 키는 일반적으로 $HOME/.ssh/
디렉터리에 있으며 기본적으로 이름이 id_dsa.pub
, id_ecdsa.pub
, id_ed25519.pub
또는 id_rsa.pub
입니다.
프로세스
SSH 키 자격 증명을 생성합니다.
ssh-keygen -t ed25519 -C "your_email@example.com"
$ ssh-keygen -t ed25519 -C "your_email@example.com"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고SSH 키의 암호를 생성하면 OpenShift Container Platform이 빌드되지 않습니다. 암호를 입력하라는 메시지가 표시되면 비워 두십시오.
두 파일(공개 키 및 해당 개인 키(
id_dsa
,id_ecdsa
,id_ed25519
또는id_rsa
))이 생성됩니다. 두 파일이 모두 있는 상태에서 공개 키를 업로드하는 방법에 대한 SCM(소스 제어 관리) 시스템의 설명서를 참조하십시오. 개인 키는 개인 리포지토리에 액세스하는 데 사용됩니다.SSH 키를 사용하여 개인 리포지토리에 액세스하기 전에 보안을 생성합니다.
oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/known_hosts> \ --type=kubernetes.io/ssh-auth
$ oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/known_hosts> \
1 --type=kubernetes.io/ssh-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 선택 사항: 이 필드를 추가하면 엄격한 서버 호스트 키 확인이 가능합니다.
주의시크릿을 생성하는 동안
known_hosts
파일을 건너뛰면 잠재적인 MIT(man-in-the-middle) 공격에 빌드가 취약해집니다.참고known_hosts
파일에 소스 코드 호스트의 항목이 포함되어 있는지 확인합니다.
3.4.2.7. 신뢰할 수 있는 소스 코드 인증 기관에서 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
Git 복제 작업 중 신뢰할 수 있는 일련의 TLS(Transport Layer Security) CA(인증 기관)가 OpenShift Container Platform 인프라 이미지로 빌드됩니다. Git 서버에서 자체 서명된 인증서 또는 이미지에서 신뢰할 수 없는 인증 기관에서 서명한 인증서를 사용하는 경우 인증서가 포함된 보안을 생성하거나 TLS 확인을 비활성화할 수 있습니다.
CA 인증서에 대한 보안을 생성하는 경우 OpenShift Container Platform에서는 Git 복제 작업 중 Git 서버에 액세스합니다. 이 방법을 사용하면 제공되는 모든 TLS 인증서를 허용하는 Git SSL 확인을 비활성화하는 것보다 더 안전합니다.
프로세스
CA 인증서 파일을 사용하여 보안을 생성합니다.
CA에서 중간 인증 기관을 사용하는 경우
ca.crt
파일의 모든 CA 인증서를 결합합니다. 다음 명령을 실행합니다.cat intermediateCA.crt intermediateCA.crt rootCA.crt > ca.crt
$ cat intermediateCA.crt intermediateCA.crt rootCA.crt > ca.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 시크릿을 생성합니다.
oc create secret generic mycert --from-file=ca.crt=</path/to/file>
$ oc create secret generic mycert --from-file=ca.crt=</path/to/file>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 키 이름으로
ca.crt
를 사용해야 합니다.
3.4.2.8. 소스 보안 조합 링크 복사링크가 클립보드에 복사되었습니다!
특정 요구 사항에 맞는 소스 복제 보안을 생성하기 위해 다양한 방법을 결합할 수 있습니다.
3.4.2.8.1. .gitconfig 파일을 사용하여 SSH 기반 인증 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: .gitconfig
파일을 사용하는 SSH 기반 인증 보안).
사전 요구 사항
- SSH 인증
-
.gitconfig
파일
프로세스
.gitconfig
파일을 사용하여 SSH 기반 인증 보안을 생성하려면 다음 명령을 입력합니다.oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/.gitconfig> \ --type=kubernetes.io/ssh-auth
$ oc create secret generic <secret_name> \ --from-file=ssh-privatekey=<path/to/ssh/private/key> \ --from-file=<path/to/.gitconfig> \ --type=kubernetes.io/ssh-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2.8.2. .gitconfig 파일 및 CA 인증서를 결합하는 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: .gitconfig
파일 및 CA(인증 기관) 인증서를 결합하는 보안).
사전 요구 사항
-
.gitconfig
파일 - CA 인증서
프로세스
.gitconfig
파일 및 CA 인증서를 결합하는 보안을 생성하려면 다음 명령을 입력합니다.oc create secret generic <secret_name> \ --from-file=ca.crt=<path/to/certificate> \ --from-file=<path/to/.gitconfig>
$ oc create secret generic <secret_name> \ --from-file=ca.crt=<path/to/certificate> \ --from-file=<path/to/.gitconfig>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2.8.3. CA 인증서를 사용하여 기본 인증 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: 기본 인증 및 CA(인증 기관) 인증서를 결합하는 보안).
사전 요구 사항
- 기본 인증 자격 증명
- CA 인증서
프로세스
CA 인증서를 사용하여 기본 인증 보안을 생성하려면 다음 명령을 입력합니다.
oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=ca-cert=</path/to/file> \ --type=kubernetes.io/basic-auth
$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=ca-cert=</path/to/file> \ --type=kubernetes.io/basic-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2.8.4. Git 구성 파일을 사용하여 기본 인증 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: 기본 인증 및 .gitconfig
파일을 결합하는 보안).
사전 요구 사항
- 기본 인증 자격 증명
-
.gitconfig
파일
프로세스
.gitconfig
파일을 사용하여 기본 인증 보안을 생성하려면 다음 명령을 입력합니다.oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=</path/to/.gitconfig> \ --type=kubernetes.io/basic-auth
$ oc create secret generic <secret_name> \ --from-literal=username=<user_name> \ --from-literal=password=<password> \ --from-file=</path/to/.gitconfig> \ --type=kubernetes.io/basic-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2.8.5. .gitconfig 파일 및 CA 인증서를 사용하여 기본 인증 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
다양한 방법을 결합하여 특정 요구 사항에 맞는 소스 복제 보안을 생성할 수 있습니다(예: 기본 인증, .gitconfig
파일, CA(인증 기관) 인증서를 결합하는 보안).
사전 요구 사항
- 기본 인증 자격 증명
-
.gitconfig
파일 - CA 인증서
프로세스
.gitconfig
파일 및 CA 인증서를 사용하여 기본 인증 보안을 생성하려면 다음 명령을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5. 바이너리(로컬) 소스 링크 복사링크가 클립보드에 복사되었습니다!
로컬 파일 시스템의 콘텐츠를 빌더로 스트리밍하는 것을 Binary
빌드라고 합니다. 이러한 빌드의 경우 BuildConfig.spec.source.type
의 해당 값이 Binary
입니다.
이 소스 유형은 oc start-build
를 사용할 때만 활용하므로 고유합니다.
바이너리 유형 빌드에서는 로컬 파일 시스템의 콘텐츠를 스트리밍해야 하므로 이미지 변경 트리거와 같이 바이너리 유형 빌드를 자동으로 트리거할 수 없습니다. 바이너리 파일을 제공할 수 없기 때문입니다. 마찬가지로 웹 콘솔에서 바이너리 유형 빌드를 시작할 수 없습니다.
바이너리 빌드를 사용하려면 다음 옵션 중 하나를 사용하여 oc start-build
를 호출합니다.
-
--from-file
: 지정한 파일의 콘텐츠가 빌더에 바이너리 스트림으로 전송됩니다. 파일에 URL을 지정할 수도 있습니다. 그러면 빌더에서 빌드 컨텍스트 상단에 있는 것과 동일한 이름으로 파일에 데이터를 저장합니다. -
--from-dir
및--from-repo
: 콘텐츠가 보관되고 빌더에 바이너리 스트림으로 전송됩니다. 그러면 빌더가 빌드 컨텍스트 디렉터리 내에서 아카이브 콘텐츠를 추출합니다.--from-dir
을 사용하면 추출된 아카이브에 URL을 지정할 수도 있습니다. -
--from-archive
: 지정하는 아카이브가 빌더로 전송되며 빌드 컨텍스트 디렉터리 내에서 추출됩니다. 이 옵션은--from-dir
과 동일하게 작동합니다. 이러한 옵션에 대한 인수가 디렉터리인 경우 먼저 호스트에서 아카이브가 생성됩니다.
위에 나열된 각 사례에서 다음을 수행합니다.
-
BuildConfig
에 이미Binary
소스 유형이 정의되어 있는 경우 효과적으로 무시되고 클라이언트에서 전송하는 내용으로 교체됩니다. -
BuildConfig
에Git
소스 유형이 정의되어 있는 경우Binary
및Git
을 함께 사용할 수 없으므로 해당 BuildConfig가 동적으로 비활성화되고 빌더에 제공하는 바이너리 스트림의 데이터에 우선순위가 지정됩니다.
HTTP 또는 HTTPS 스키마를 사용하여 파일 이름 대신 URL을 --from-file
및 --from-archive
로 전달할 수 있습니다. URL과 함께 --from-file
을 사용하는 경우 빌더 이미지의 파일 이름은 웹 서버에서 전송한 Content-Disposition
헤더 또는 헤더가 없는 경우 URL 경로의 마지막 구성 요소에 따라 결정됩니다. 지원되는 인증 형식이 없는 경우 사용자 정의 TLS 인증서를 사용하거나 인증서 검증 작업을 비활성화할 수 없습니다.
oc new-build --binary=true
를 사용하면 명령에서 바이너리 빌드와 관련된 제한을 적용합니다. 생성된 BuildConfig
의 소스 유형이 Binary
이므로 이 BuildConfig
로 빌드를 실행하는 유일한 방법은 --from
옵션 중 하나와 함께 oc start-build
를 사용하여 필수 바이너리 데이터를 제공하는 것입니다.
Dockerfile 및 contextDir
소스 옵션에는 바이너리 빌드에서 특별한 의미가 있습니다.
Dockerfile은 바이너리 빌드 소스와 함께 사용할 수 있습니다. Dockerfile을 사용하고 바이너리 스트림이 아카이브인 경우 해당 콘텐츠는 아카이브의 모든 Dockerfile에 대한 대체 Dockerfile 역할을 합니다. Dockerfile을 --from-file
인수와 함께 사용하고 파일 인수의 이름이 Dockerfile인 경우 Dockerfile의 값이 바이너리 스트림의 값을 대체합니다.
추출된 아카이브 콘텐츠를 캡슐화하는 바이너리 스트림의 경우 contextDir
필드의 값이 아카이브 내 하위 디렉터리로 해석되고, 유효한 경우 빌드를 실행하기 전에 빌더가 해당 하위 디렉터리로 변경됩니다.
3.6. 입력 보안 및 구성 맵 링크 복사링크가 클립보드에 복사되었습니다!
입력 보안 및 구성 맵의 콘텐츠가 빌드 출력 컨테이너 이미지에 표시되지 않도록 Docker 빌드 및 source-to-image 빌드 전략의 빌드 볼륨을 사용합니다.
일부 시나리오에서는 빌드 작업을 수행하려면 종속 리소스에 액세스하기 위해 자격 증명 또는 기타 구성 데이터가 필요합니다. 그러나 이러한 정보가 소스 제어에 배치되는 것은 바람직하지 않습니다. 이러한 용도를 위해 입력 보안 및 입력 구성 맵을 정의할 수 있습니다.
예를 들어 Maven으로 Java 애플리케이션을 빌드할 때 개인 키로 액세스할 수 있는 Maven Central 또는 JCenter의 개인 미러를 설정할 수 있습니다. 해당 개인 미러에서 라이브러리를 다운로드하려면 다음을 제공해야 합니다.
-
미러의 URL 및 연결 설정으로 구성된
settings.xml
파일 -
설정 파일에서 참조하는 개인 키(예:
~/.ssh/id_rsa
)
보안상의 이유로 애플리케이션 이미지에 자격 증명을 노출해서는 안 됩니다.
이 예제에서는 Java 애플리케이션을 설명하지만 /etc/ssl/certs
디렉터리, API 키 또는 토큰, 라이선스 파일 등에 SSL 인증서를 추가하는 데 동일한 접근 방식을 사용할 수 있습니다.
3.6.1. 비밀이란? 링크 복사링크가 클립보드에 복사되었습니다!
Secret
오브젝트 유형에서는 암호, OpenShift Container Platform 클라이언트 구성 파일, dockercfg
파일, 개인 소스 리포지토리 자격 증명 등과 같은 중요한 정보를 보유하는 메커니즘을 제공합니다. 보안은 Pod에서 중요한 콘텐츠를 분리합니다. 볼륨 플러그인을 사용하여 컨테이너에 보안을 마운트하거나 시스템에서 시크릿을 사용하여 Pod 대신 작업을 수행할 수 있습니다.
YAML 보안 오브젝트 정의
3.6.1.1. 보안 속성 링크 복사링크가 클립보드에 복사되었습니다!
주요 속성은 다음과 같습니다.
- 보안 데이터는 정의와는 별도로 참조할 수 있습니다.
- 보안 데이터 볼륨은 임시 파일 저장 기능(tmpfs)에 의해 지원되며 노드에 저장되지 않습니다.
- 보안 데이터는 네임스페이스 내에서 공유할 수 있습니다.
3.6.1.2. 보안 유형 링크 복사링크가 클립보드에 복사되었습니다!
type
필드의 값은 보안의 키 이름과 값의 구조를 나타냅니다. 유형을 사용하면 보안 오브젝트에 사용자 이름과 키를 적용할 수 있습니다. 검증을 수행하지 않으려면 기본값인 opaque
유형을 사용합니다.
보안 데이터에 특정 키 이름이 있는지 확인하기 위해 서버 측 최소 검증을 트리거하려면 다음 유형 중 하나를 지정합니다.
-
kubernetes.io/service-account-token
. 서비스 계정 토큰을 사용합니다. -
kubernetes.io/dockercfg
. 필수 Docker 자격 증명으로.dockercfg
파일을 사용합니다. -
kubernetes.io/dockerconfigjson
. 필수 Docker 자격 증명으로.docker/config.json
파일을 사용합니다. -
kubernetes.io/basic-auth
. 기본 인증에 사용합니다. -
kubernetes.io/ssh-auth
. SSH 키 인증에 사용합니다. -
kubernetes.io/tls
. TLS 인증 기관에 사용합니다.
검증을 수행하지 않으려면 type= Opaque
를 지정합니다. 즉 보안에서 키 이름 또는 값에 대한 규칙을 준수하도록 요청하지 않습니다. opaque
보안에는 임의의 값을 포함할 수 있는 비정형 key:value
쌍을 사용할 수 있습니다.
example.com/my-secret-type
과 같은 다른 임의의 유형을 지정할 수 있습니다. 이러한 유형은 서버 측에 적용되지 않지만 보안 생성자가 해당 유형의 키/값 요구 사항을 준수하도록 의도했음을 나타냅니다.
3.6.1.3. 보안 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
보안 값을 수정해도 이미 실행 중인 Pod에서 사용하는 값은 동적으로 변경되지 않습니다. 보안을 변경하려면 동일한 PodSpec
을 사용하는 일부 경우에서 원래 Pod를 삭제하고 새 Pod를 생성해야 합니다.
보안 업데이트 작업에서는 새 컨테이너 이미지를 배포하는 것과 동일한 워크플로를 따릅니다. kubectl rolling-update
명령을 사용할 수 있습니다.
보안의 resourceVersion
값은 참조 시 지정되지 않습니다. 따라서 Pod가 시작되는 동시에 보안이 업데이트되는 경우 Pod에 사용되는 보안의 버전이 정의되지 않습니다.
현재는 Pod가 생성될 때 사용된 보안 오브젝트의 리소스 버전을 확인할 수 없습니다. 컨트롤러에서 이전 resourceVersion
을 사용하여 재시작할 수 있도록 Pod에서 이 정보를 보고하도록 계획되어 있습니다. 그동안 기존 보안 데이터를 업데이트하지 말고 고유한 이름으로 새 보안을 생성하십시오.
3.6.2. 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
먼저 보안을 생성한 후 해당 보안을 사용하는 Pod를 생성해야 합니다.
보안 생성 시 다음을 수행합니다.
- 보안 데이터를 사용하여 보안 오브젝트를 생성합니다.
- Pod 서비스 계정을 업데이트하여 보안에 대한 참조를 허용합니다.
-
보안을 환경 변수로 사용하거나
secret
볼륨을 사용하여 파일로 사용하는 Pod를 생성합니다.
프로세스
JSON 또는 YAML 파일에서 보안 오브젝트를 생성하려면 다음 명령을 입력합니다.
oc create -f <filename>
$ oc create -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 로컬
.docker/config.json
파일에서 보안을 생성할 수 있습니다.oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
$ oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은
dockerhub
라는 보안의 JSON 사양을 생성한 후 오브젝트를 생성합니다.YAML Opaque Secret 오브젝트 정의
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 불투명 보안을 지정합니다.
Docker 구성 JSON 파일 시크릿 오브젝트 정의
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6.3. 보안 사용 링크 복사링크가 클립보드에 복사되었습니다!
보안을 생성한 후에는 해당 보안을 참조하는 Pod를 생성하고 로그를 가져오고 해당 Pod를 삭제할 수 있습니다.
프로세스
다음 명령을 입력하여 보안을 참조할 Pod를 생성합니다.
oc create -f <your_yaml_file>.yaml
$ oc create -f <your_yaml_file>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 로그를 가져옵니다.
oc logs secret-example-pod
$ oc logs secret-example-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 Pod를 삭제합니다.
oc delete pod secret-example-pod
$ oc delete pod secret-example-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6.4. 입력 보안 및 구성 맵 추가 링크 복사링크가 클립보드에 복사되었습니다!
소스 제어에 의존하지 않고 인증 정보 및 기타 구성 데이터를 빌드에 제공하기 위해 입력 보안 및 입력 구성 맵을 정의할 수 있습니다.
일부 시나리오에서는 빌드 작업을 수행하려면 종속 리소스에 액세스하기 위해 인증 정보 또는 기타 구성 데이터가 필요합니다. 해당 정보를 소스 제어에 배치하지 않고 사용할 수 있도록 입력 보안 및 입력 구성 맵을 정의할 수 있습니다.
프로세스
입력 보안이나 구성 맵 또는 둘 다를 기존 BuildConfig
오브젝트에 추가하려면 다음을 수행합니다.
ConfigMap
오브젝트가 없는 경우 다음 명령을 입력하여 생성합니다.oc create configmap settings-mvn \ --from-file=settings.xml=<path/to/settings.xml>
$ oc create configmap settings-mvn \ --from-file=settings.xml=<path/to/settings.xml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면
settings-mvn
이라는 새 구성 맵이 생성됩니다. 이 맵에는settings.xml
파일의 일반 텍스트 내용이 포함됩니다.작은 정보다음 YAML을 적용하여 구성 맵을 만들 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Secret
오브젝트가 없는 경우 다음 명령을 입력하여 생성합니다.oc create secret generic secret-mvn \ --from-file=ssh-privatekey=<path/to/.ssh/id_rsa> \ --type=kubernetes.io/ssh-auth
$ oc create secret generic secret-mvn \ --from-file=ssh-privatekey=<path/to/.ssh/id_rsa> \ --type=kubernetes.io/ssh-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면
secret-mvn
이라는 새 보안이 생성됩니다. 이 보안에는id_rsa
개인 키의 base64 인코딩 콘텐츠가 포함됩니다.작은 정보다음 YAML을 적용하여 입력 보안을 생성할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이 기존
BuildConfig
오브젝트의source
섹션에 구성 맵과 보안을 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새
BuildConfig
오브젝트에 시크릿 및 구성 맵을 포함하려면 다음 명령을 입력합니다.oc new-build \ openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \ --context-dir helloworld --build-secret “secret-mvn” \ --build-config-map "settings-mvn"
$ oc new-build \ openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \ --context-dir helloworld --build-secret “secret-mvn” \ --build-config-map "settings-mvn"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드 중에 빌드 프로세스는
settings.xml
및id_rsa
파일을 소스 코드가 있는 디렉터리에 복사합니다. OpenShift Container Platform S2I 빌더 이미지의 경우 이 디렉터리는Dockerfile
에WORKDIR
명령을 사용하여 설정하는 이미지 작업 디렉터리입니다. 다른 디렉터리를 지정하려면 정의에destinationDir
을 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 새
BuildConfig
오브젝트를 생성할 때 대상 디렉터리를 지정할 수도 있습니다.oc new-build \ openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \ --context-dir helloworld --build-secret “secret-mvn:.ssh” \ --build-config-map "settings-mvn:.m2"
$ oc new-build \ openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \ --context-dir helloworld --build-secret “secret-mvn:.ssh” \ --build-config-map "settings-mvn:.m2"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 두 경우 모두
settings.xml
파일은 빌드 환경의./.m2
디렉터리에 추가되고id_rsa
키는./.ssh
디렉터리에 추가됩니다.
3.6.5. S2I(Source-to-Image) 전략 링크 복사링크가 클립보드에 복사되었습니다!
Source
전략을 사용하면 정의된 모든 입력 보안이 해당 destinationDir
에 복사됩니다. destinationDir
을 비워 두면 보안이 빌더 이미지의 작업 디렉터리에 배치됩니다.
destinationDir
이 상대 경로인 경우 동일한 규칙이 사용됩니다. 보안은 이미지 작업 디렉터리의 상대 경로에 배치됩니다. destinationDir
경로의 최종 디렉터리가 빌더 이미지에 없는 경우 해당 디렉터리가 생성됩니다. destinationDir
의 선행 디렉터리가 모두 존재해야 합니다. 없는 경우 오류가 발생합니다.
입력 보안은 전역 쓰기 가능으로 추가되고 0666
권한이 있으며 assemble
스크립트 실행 후 크기가 0으로 잘립니다. 즉 보안 파일은 결과 이미지에 존재하지만 보안상의 이유로 비어 있습니다.
assemble
스크립트가 완료되면 입력 구성 맵이 잘리지 않습니다.
3.6.6. Docker 전략 링크 복사링크가 클립보드에 복사되었습니다!
docker 전략을 사용하는 경우 Dockerfile의 ADD
및 COPY
명령을 사용하여 정의된 모든 입력 보안을 컨테이너 이미지에 추가할 수 있습니다.
보안의 destinationDir
을 지정하지 않으면 Dockerfile이 있는 동일한 디렉터리로 파일이 복사됩니다. 상대 경로를 destinationDir
로 지정하면 보안이 Dockerfile 위치와 상대되는 해당 디렉터리에 복사됩니다. 그러면 Docker 빌드 작업에서 빌드 중 사용하는 컨텍스트 디렉터리의 일부로 보안 파일을 사용할 수 있습니다.
보안 및 구성 맵 데이터를 참조하는 Dockerfile의 예
일반적으로 사용자는 해당 이미지에서 실행되는 컨테이너에 보안이 표시되지 않도록 최종 애플리케이션 이미지에서 입력 보안을 제거합니다. 그러나 보안은 추가된 계층에 있는 이미지 자체에 계속 있습니다. 이 제거는 Dockerfile 자체에 포함됩니다.
입력 보안 및 구성 맵의 콘텐츠가 빌드 출력 컨테이너 이미지에 표시되지 않도록 하려면 Docker 빌드 전략의 빌드 볼륨을 대신 사용합니다.
3.6.7. 사용자 정의 전략 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 전략을 사용하는 경우 정의된 입력 보안 및 구성 맵을 /var/run/secrets/openshift.io/build
디렉터리의 빌더 컨테이너에서 모두 사용할 수 있습니다. 사용자 정의 빌드 이미지에서는 이러한 보안 및 구성 맵을 적절하게 사용해야 합니다. 사용자 정의 전략을 사용하면 사용자 정의 전략 옵션에 설명된 대로 보안을 정의할 수 있습니다.
기존 전략 보안과 입력 보안은 기술적으로 차이가 없습니다. 하지만 빌더 이미지는 빌드 사용 사례에 따라 해당 항목을 구분하고 다르게 사용할 수 있습니다.
입력 보안은 항상 /var/run/secrets/openshift.io/build
디렉터리에 마운트되거나 빌더에서 전체 빌드 오브젝트를 포함하는 $BUILD
환경 변수를 구문 분석할 수 있습니다.
레지스트리에 대한 가져오기 보안이 네임스페이스와 노드 모두에 있는 경우 빌드는 기본적으로 네임스페이스의 가져오기 보안을 사용합니다.
3.7. 외부 아티팩트 링크 복사링크가 클립보드에 복사되었습니다!
바이너리 파일을 소스 리포지토리에 저장하지 않는 것이 좋습니다. 따라서 빌드 프로세스 중 Java .jar
종속 항목과 같은 추가 파일을 가져오는 빌드를 정의해야 합니다. 이 작업을 수행하는 방법은 사용 중인 빌드 전략에 따라 다릅니다.
소스 빌드 전략의 경우 assemble
스크립트에 적절한 쉘 명령을 배치해야 합니다.
.s2i/bin/assemble
파일
#!/bin/sh APP_VERSION=1.0 wget http://repository.example.com/app/app-$APP_VERSION.jar -O app.jar
#!/bin/sh
APP_VERSION=1.0
wget http://repository.example.com/app/app-$APP_VERSION.jar -O app.jar
.s2i/bin/run
파일
#!/bin/sh exec java -jar app.jar
#!/bin/sh
exec java -jar app.jar
Docker 빌드 전략의 경우 Dockerfile을 수정하고 RUN
명령을 사용하여 쉘 명령을 호출해야 합니다.
Dockerfile 발췌 내용
실제로 Dockerfile 또는 assemble
스크립트를 업데이트하는 대신 BuildConfig
에 정의된 환경 변수를 사용하여 다운로드할 특정 파일을 사용자 정의할 수 있도록 파일 위치에 대한 환경 변수를 사용할 수 있습니다.
다음과 같이 환경 변수를 정의하는 다양한 방법 중에서 선택할 수 있습니다.
-
.s2i/environment
파일 사용(Source
빌드 전략 전용) -
BuildConfig
오브젝트에서 변수 설정 -
oc start-build --env
명령을 사용하여 명시적으로 변수 제공(수동으로 트리거되는 빌드에만 해당)
3.8. 개인 레지스트리에 Docker 자격 증명 사용 링크 복사링크가 클립보드에 복사되었습니다!
개인 컨테이너 레지스트리에 유효한 자격 증명이 있는 docker/config.json
파일을 사용하여 빌드를 제공할 수 있습니다. 이 경우 출력 이미지를 개인 컨테이너 이미지 레지스트리로 내보내거나 인증이 필요한 개인 컨테이너 이미지 레지스트리에서 빌더 이미지를 가져올 수 있습니다.
동일한 레지스트리 내에서 여러 리포지토리에 대한 인증 정보를 제공할 수 있으며, 각각 해당 레지스트리 경로에 해당하는 인증 정보를 제공할 수 있습니다.
OpenShift Container Platform 컨테이너 이미지 레지스트리의 경우 OpenShift Container Platform에서 보안이 자동으로 생성되므로 필요하지 않습니다.
.docker/config.json
파일은 기본적으로 홈 디렉터리에 있으며 다음과 같은 형식을 취합니다.
여러 컨테이너 이미지 레지스트리를 정의하거나 동일한 레지스트리에 여러 리포지토리를 정의할 수 있습니다. 또는 docker login
명령을 실행하여 이 파일에 인증 항목을 추가할 수도 있습니다. 파일이 없는 경우 생성됩니다.
Kubernetes는 구성 및 암호를 저장하는 데 사용할 수 있는 Secret
오브젝트를 제공합니다.
사전 요구 사항
-
.docker/config.json
파일이 있어야 합니다.
프로세스
다음 명령을 입력하여 로컬
.docker/config.json
파일에서 보안을 생성합니다.oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
$ oc create secret generic dockerhub \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은
dockerhub
라는 보안의 JSON 사양을 생성한 후 오브젝트를 생성합니다.BuildConfig
의output
섹션에pushSecret
필드를 추가하고 생성한secret
이름(위 예의 경우dockerhub
)으로 설정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc set build-secret
명령을 사용하여 빌드 구성에 내보내기 보안을 설정할 수 있습니다.oc set build-secret --push bc/sample-build dockerhub
$ oc set build-secret --push bc/sample-build dockerhub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pushSecret
필드를 지정하는 대신 빌드에서 사용하는 서비스 계정에 내보내기 보안을 연결할 수도 있습니다. 기본적으로 빌드에서는builder
서비스 계정을 사용합니다. 보안에 빌드의 출력 이미지를 호스팅하는 리포지토리와 일치하는 자격 증명이 포함된 경우 내보내기 보안이 빌드에 자동으로 추가됩니다.oc secrets link builder dockerhub
$ oc secrets link builder dockerhub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드 전략 정의의 일부인
pullSecret
필드를 지정하여 개인 컨테이너 이미지 레지스트리에서 빌더 컨테이너 이미지를 가져옵니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc set build-secret
명령을 사용하여 빌드 구성에 가져오기 보안을 설정할 수 있습니다.oc set build-secret --pull bc/sample-build dockerhub
$ oc set build-secret --pull bc/sample-build dockerhub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고이 예제에서는 소스 빌드에
pullSecret
을 사용하지만 Docker 및 Custom 빌드에도 적용할 수 있습니다.pullSecret
필드를 지정하는 대신 빌드에서 사용하는 서비스 계정에 가져오기 보안을 연결할 수도 있습니다. 기본적으로 빌드에서는builder
서비스 계정을 사용합니다. 보안에 빌드의 입력 이미지를 호스팅하는 리포지토리와 일치하는 자격 증명이 포함된 경우 가져오기 보안이 빌드에 자동으로 추가됩니다.pullSecret
필드를 지정하는 대신 빌드에서 사용하는 서비스 계정에 가져오기 보안을 연결하려면 다음 명령을 입력합니다.oc secrets link builder dockerhub
$ oc secrets link builder dockerhub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고이 기능을 사용하려면
BuildConfig
사양에from
이미지를 지정해야 합니다.oc new-build
또는oc new-app
으로 생성한 Docker 전략 빌드는 특정 상황에서 이러한 작업을 수행하지 못할 수 있습니다.
3.9. 빌드 환경 링크 복사링크가 클립보드에 복사되었습니다!
Pod 환경 변수와 마찬가지로 빌드 환경 변수는 다른 리소스 또는 변수에 대한 참조 측면에서 Downward API를 사용하여 정의할 수 있습니다. 여기에는 잘 알려진 몇 가지 예외가 있습니다.
oc set env
명령을 사용하면 BuildConfig
에 정의된 환경 변수도 관리할 수 있습니다.
빌드 환경 변수에서 valueFrom
을 사용하여 컨테이너 리소스를 참조하는 기능은 컨테이너를 생성하기 전에 참조를 확인하기 때문에 지원되지 않습니다.
3.9.1. 빌드 필드를 환경 변수로 사용 링크 복사링크가 클립보드에 복사되었습니다!
값을 가져올 필드의 JsonPath
에 fieldPath
환경 변수 소스를 설정하면 빌드 오브젝트에 대한 정보를 삽입할 수 있습니다.
Jenkins Pipeline 전략에서는 환경 변수에 valueFrom
구문을 지원하지 않습니다.
프로세스
fieldPath
환경 변수 소스를 값을 가져올 필드의JsonPath
로 설정합니다.env: - name: FIELDREF_ENV valueFrom: fieldRef: fieldPath: metadata.name
env: - name: FIELDREF_ENV valueFrom: fieldRef: fieldPath: metadata.name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.9.2. 보안을 환경 변수로 사용 링크 복사링크가 클립보드에 복사되었습니다!
valueFrom
구문을 사용하여 보안의 키 값을 환경 변수로 사용하도록 설정할 수 있습니다.
이 방법은 빌드 Pod 콘솔의 출력에서 시크릿을 일반 텍스트로 표시합니다. 이를 방지하려면 입력 보안 및 구성 맵을 대신 사용합니다.
프로세스
보안을 환경 변수로 사용하려면
valueFrom
구문을 설정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.10. 서비스 제공 인증서 보안 링크 복사링크가 클립보드에 복사되었습니다!
서비스 제공 인증서 보안은 즉시 사용 가능한 인증서가 필요한 복잡한 미들웨어 애플리케이션을 지원하기 위한 것입니다. 해당 설정은 관리자 툴에서 노드 및 마스터에 대해 생성하는 서버 인증서와 동일합니다.
프로세스
서비스와의 통신을 보호하려면 클러스터에서 서명된 제공 인증서/키 쌍을 네임스페이스의 보안에 생성하도록 합니다.
보안에 사용할 이름으로 설정된 값을 사용하여 서비스에
service.beta.openshift.io/serving-cert-secret-name
주석을 설정합니다.그러면
PodSpec
에서 해당 보안을 마운트할 수 있습니다. 사용 가능한 경우 Pod가 실행됩니다. 인증서는 내부 서비스 DNS 이름인<service.name>.<service.namespace>.svc
에 적합합니다.인증서 및 키는 PEM 형식이며 각각
tls.crt
및tls.key
에 저장됩니다. 인증서/키 쌍은 만료 시기가 다가오면 자동으로 교체됩니다. 시크릿의service.beta.openshift.io/expiry
주석에서 RFC3339 형식으로 된 만료 날짜를 확인합니다.
대부분의 경우 서비스 DNS 이름 <service.name>.<service.namespace>.svc
는 외부에서 라우팅할 수 없습니다. <service.name>.<service.namespace>.svc
는 주로 클러스터 내 또는 서비스 내 통신과 경로 재암호화에 사용됩니다.
기타 Pod는 해당 Pod에 자동으로 마운트되는 /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
파일의 CA(인증 기관) 번들을 사용하여 내부 DNS 이름에만 서명되는 클러스터 생성 인증서를 신뢰할 수 있습니다.
이 기능의 서명 알고리즘은 x509.SHA256WithRSA
입니다. 직접 교대하려면 생성된 보안을 삭제합니다. 새 인증서가 생성됩니다.
3.11. 보안 제한 사항 링크 복사링크가 클립보드에 복사되었습니다!
보안을 사용하려면 Pod에서 보안을 참조해야 합니다. 보안은 다음 세 가지 방법으로 Pod에서 사용할 수 있습니다.
- 컨테이너에 환경 변수를 채우기 위해 사용.
- 하나 이상의 컨테이너에 마운트된 볼륨에서 파일로 사용.
- Pod에 대한 이미지를 가져올 때 kubelet으로 사용.
볼륨 유형 보안은 볼륨 메커니즘을 사용하여 데이터를 컨테이너에 파일로 작성합니다. imagePullSecrets
는 서비스 계정을 사용하여 네임스페이스의 모든 Pod에 보안을 자동으로 주입합니다.
템플릿에 보안 정의가 포함된 경우 템플릿에 제공된 보안을 사용할 수 있는 유일한 방법은 보안 볼륨 소스를 검증하고 지정된 오브젝트 참조가 유형이 Secret
인 오브젝트를 실제로 가리키는 것입니다. 따라서 보안을 생성한 후 해당 보안을 사용하는 Pod를 생성해야 합니다. 가장 효과적인 방법은 서비스 계정을 사용하여 자동으로 삽입되도록 하는 것입니다.
Secret API 오브젝트는 네임스페이스에 있습니다. 동일한 네임스페이스에 있는 Pod만 참조할 수 있습니다.
개별 보안은 1MB로 제한됩니다. 이는 대규모 보안이 생성되어 apiserver 및 kubelet 메모리가 소진되는 것을 막기 위한 것입니다. 그러나 작은 보안을 많이 생성해도 메모리가 소진될 수 있습니다.
4장. 빌드 출력 관리 링크 복사링크가 클립보드에 복사되었습니다!
빌드 출력 관리에 대한 개요 및 지침은 다음 섹션에서 확인하십시오.
4.1. 빌드 출력 링크 복사링크가 클립보드에 복사되었습니다!
Docker 또는 S2I(source-to-image) 전략을 사용하는 빌드에서는 새 컨테이너 이미지를 생성합니다. 그런 다음 이미지를 Build
사양의 output
섹션에 지정된 컨테이너 이미지 레지스트리로 푸시됩니다.
출력 종류가 ImageStreamTag
인 경우 이미지를 통합 OpenShift 이미지 레지스트리로 푸시하고 지정된 이미지 스트림에 태그를 지정합니다. 출력 유형이 DockerImage
인 경우에는 출력 참조 이름이 Docker 내보내기 사양으로 사용됩니다. 사양은 레지스트리를 포함할 수 있으며 레지스트리가 지정되지 않은 경우 기본적으로 DockerHub로 설정됩니다. 빌드 사양의 출력 섹션이 비어 있으면 빌드 종료 시 이미지를 푸시하지 않습니다.
ImageStreamTag로 출력
spec: output: to: kind: "ImageStreamTag" name: "sample-image:latest"
spec:
output:
to:
kind: "ImageStreamTag"
name: "sample-image:latest"
Docker 내보내기 사양으로 출력
spec: output: to: kind: "DockerImage" name: "my-registry.mycompany.com:5000/myimages/myimage:tag"
spec:
output:
to:
kind: "DockerImage"
name: "my-registry.mycompany.com:5000/myimages/myimage:tag"
4.2. 이미지 환경 변수 출력 링크 복사링크가 클립보드에 복사되었습니다!
Docker 및 S2I(Source-to-Image) 전략 빌드에서는 출력 이미지에 다음 환경 변수를 설정합니다.
변수 | 설명 |
---|---|
| 빌드 이름 |
| 빌드의 네임스페이스 |
| 빌드의 소스 URL |
| 빌드에 사용된 Git 참조 |
| 빌드에 사용된 소스 커밋 |
또한 모든 사용자 정의 환경 변수(예: S2I 또는 docker 전략 옵션으로 구성된 환경 변수)도 출력 이미지 환경 변수 목록의 일부입니다.
4.3. 출력 이미지 라벨 링크 복사링크가 클립보드에 복사되었습니다!
Docker 및 S2I(Source-to-Image) 빌드에서는 출력 이미지에 다음 라벨을 설정합니다.
레이블 | 설명 |
---|---|
| 빌드에 사용된 소스 커밋 작성자 |
| 빌드에 사용된 소스 커밋의 날짜 |
| 빌드에 사용된 소스 커밋의 해시 |
| 빌드에 사용된 소스 커밋의 메시지 |
| 소스에 지정된 분기 또는 참조 |
| 빌드의 소스 URL |
BuildConfig.spec.output.imageLabels
필드를 사용하여 빌드 구성에서 빌드하는 각 이미지에 적용할 사용자 정의 라벨 목록을 지정할 수도 있습니다.
빌드된 이미지의 사용자 정의 레이블
5장. 빌드 전략 사용 링크 복사링크가 클립보드에 복사되었습니다!
다음 섹션에서는 지원되는 주요 빌드 전략과 이러한 전략을 사용하는 방법을 정의합니다.
5.1. Docker 빌드 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform은 Buildah를 사용하여 Dockerfile에서 컨테이너 이미지를 빌드합니다. Dockerfile을 사용하여 컨테이너 이미지를 빌드하는 방법에 대한 자세한 내용은 Dockerfile 참조 문서를 참조하십시오.
buildArgs
배열을 사용하여 Docker 빌드 인수를 설정하는 경우 Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.
5.1.1. Dockerfile FROM 이미지 교체 링크 복사링크가 클립보드에 복사되었습니다!
Dockerfile의 FROM
명령을 BuildConfig
오브젝트의 from
매개변수로 교체할 수 있습니다. Dockerfile에서 다중 단계 빌드를 사용하는 경우 마지막 FROM
명령의 이미지가 교체됩니다.
프로세스
Dockerfile의
FROM
명령을BuildConfig
오브젝트의from
매개변수로 교체하려면BuildConfig
오브젝트에 다음 설정을 추가합니다.strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2. Dockerfile 경로 사용 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Docker 빌드는 BuildConfig.spec.source.contextDir
필드에 지정된 컨텍스트의 루트에 있는 Dockerfile을 사용합니다.
dockerfilePath
필드를 사용하면 BuildConfig.spec.source.contextDir
필드와 상대되는 다른 경로를 사용하여 Dockerfile을 찾을 수 있습니다. 파일 이름은 기본 Dockerfile(예: MyDockerfile
) 또는 하위 디렉터리의 Dockerfile 경로(예: dockerfiles/app1/Dockerfile
)와 다를 수 있습니다.
프로세스
빌드에서 다른 경로를 사용하여 Dockerfile을 찾도록
dockerfilePath
필드를 설정합니다.strategy: dockerStrategy: dockerfilePath: dockerfiles/app1/Dockerfile
strategy: dockerStrategy: dockerfilePath: dockerfiles/app1/Dockerfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3. Docker 환경 변수 사용 링크 복사링크가 클립보드에 복사되었습니다!
Docker 빌드 프로세스 및 생성된 이미지에 환경 변수를 사용할 수 있도록 빌드 구성의 dockerStrategy
정의에 환경 변수를 추가할 수 있습니다.
정의된 환경 변수는 FROM
명령 직후 단일 ENV
Dockerfile 명령으로 삽입되어 나중에 Dockerfile 내에서 참조할 수 있습니다.
변수는 빌드 중 정의되고 출력 이미지에 유지되므로 해당 이미지를 실행하는 모든 컨테이너에도 존재합니다.
예를 들어 다음은 빌드 및 런타임 중 사용할 사용자 정의 HTTP 프록시를 정의합니다.
dockerStrategy: ... env: - name: "HTTP_PROXY" value: "http://myproxy.net:5187/"
dockerStrategy:
...
env:
- name: "HTTP_PROXY"
value: "http://myproxy.net:5187/"
oc set env
명령을 사용하면 빌드 구성에 정의된 환경 변수도 관리할 수 있습니다.
5.1.4. Docker 빌드 인수 추가 링크 복사링크가 클립보드에 복사되었습니다!
buildArgs
배열을 사용하여 Docker 빌드 인수를 설정할 수 있습니다. 빌드 인수는 빌드가 시작될 때 Docker에 전달됩니다.
Dockerfile 참조 문서에서 ARG 및 FROM이 상호 작용하는 방법 이해를 참조하십시오.
프로세스
Docker 빌드 인수를 설정하려면
BuildConfig
오브젝트의dockerStrategy
정의에 있는buildArgs
배열에 항목을 추가합니다. 예를 들면 다음과 같습니다.dockerStrategy: ... buildArgs: - name: "version" value: "latest"
dockerStrategy: ... buildArgs: - name: "version" value: "latest"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고name
및value
필드만 지원됩니다.valueFrom
필드의 설정은 모두 무시됩니다.
5.1.5. Docker 빌드를 사용하여 계층 스쿼싱 링크 복사링크가 클립보드에 복사되었습니다!
Docker 빌드는 일반적으로 Dockerfile의 각 명령을 나타내는 계층을 생성합니다. imageOptimizationPolicy
를 SkipLayers
로 설정하면 모든 명령을 기본 이미지 상단의 단일 계층으로 병합합니다.
프로세스
imageOptimizationPolicy
를SkipLayers
로 설정합니다.strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.6. 빌드 볼륨 사용 링크 복사링크가 클립보드에 복사되었습니다!
빌드 볼륨을 마운트하여 출력 컨테이너 이미지에 유지하려고 하지 않는 정보에 대한 액세스 권한을 실행 중인 빌드에 부여할 수 있습니다.
빌드 볼륨은 빌드 환경 또는 구성이 빌드 시에만 필요한 리포지토리 자격 증명과 같은 중요한 정보를 제공합니다. 빌드 볼륨은 출력 컨테이너 이미지에 데이터가 지속될 수 있는 빌드 입력과 다릅니다.
실행 중인 빌드 볼륨에서 데이터를 읽는 빌드 볼륨의 마운트 지점은 Pod 볼륨 마운트 와 기능적으로 유사합니다.
사전 요구 사항
- 입력 보안, 구성 맵 또는 둘 다를 BuildConfig 오브젝트에 추가했습니다.
프로세스
BuildConfig
오브젝트의dockerStrategy
정의에서volumes
배열에 빌드 볼륨을 추가합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 5 9
- 필수 항목입니다. 고유한 이름입니다.
- 2 6 10
- 필수 항목입니다. 마운트 지점의 절대 경로입니다.
..
또는:
을 포함하지 않아야 하며 빌더에서 생성한 대상 경로와 충돌하지 않아야 합니다./opt/app-root/src
는 많은 Red Hat S2I 지원 이미지의 기본 홈 디렉토리입니다. - 3 7 11
- 필수 항목입니다. 소스,
ConfigMap
,Secret
또는CSI
의 유형입니다. - 4 8
- 필수 항목입니다. 소스 이름입니다.
- 12
- 필수 항목입니다. 임시 CSI 볼륨을 제공하는 드라이버입니다.
- 13
- 필수 항목입니다. 이 값은
true
로 설정해야 합니다. 읽기 전용 볼륨을 제공합니다. - 14
- 선택 사항: 임시 CSI 볼륨의 볼륨 속성입니다. 지원되는 속성 키와 값은 CSI 드라이버의 설명서를 참조하십시오.
중요공유 리소스 CSI 드라이버는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
공유 리소스 CSI 드라이버는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
5.2. S2I(Source-to-Image) 빌드 링크 복사링크가 클립보드에 복사되었습니다!
S2I(Source-to-Image)는 재현 가능한 컨테이너 이미지를 빌드하는 툴입니다. 컨테이너 이미지에 애플리케이션 소스를 삽입하고 새 이미지를 어셈블하여 실행할 수 있는 이미지를 생성합니다. 새 이미지는 기본 이미지, 빌더, 빌드 소스를 통합하고 buildah run
명령과 함께 사용할 수 있습니다. S2I는 이전에 다운로드한 종속 항목, 이전에 빌드한 아티팩트 등을 다시 사용하는 증분 빌드를 지원합니다.
5.2.1. S2I(Source-to-Image) 증분 빌드 수행 링크 복사링크가 클립보드에 복사되었습니다!
S2I(Source-to-Image)는 증분 빌드를 수행할 수 있으므로 이전에 빌드한 이미지의 아티팩트를 재사용할 수 있습니다.
5.2.2. S2I(Source-to-Image) 빌더 이미지 스크립트 덮어쓰기 링크 복사링크가 클립보드에 복사되었습니다!
빌더 이미지에서 제공하는 assemble
, run
, save-artifacts
S2I(Source-to-Image) 스크립트를 덮어쓸 수 있습니다.
프로세스
빌더 이미지에서 제공하는
assemble
,run
,save-artifacts
S2I 스크립트를 덮어쓰려면 다음 중 하나를 수행합니다.-
애플리케이션 소스 리포지토리의
.s2i/bin
디렉터리에assemble
,run
, 또는save-artifacts
스크립트를 제공합니다. BuildConfig
오브젝트의 전략 정의의 일부로 스크립트가 포함된 디렉터리의 URL을 제공합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 빌드 프로세스는
run
,assemble
,save-artifacts
를 경로에 추가합니다. 이러한 이름이 있는 스크립트 또는 모든 스크립트가 있는 경우 빌드 프로세스에서 이미지에 제공된 이름이 동일한 스크립트 대신 이러한 스크립트를 사용합니다.
참고scripts
URL에 있는 파일은 소스 리포지토리의.s2i/bin
에 있는 파일보다 우선합니다.
-
애플리케이션 소스 리포지토리의
5.2.3. S2I(Source-to-Image) 환경 변수 링크 복사링크가 클립보드에 복사되었습니다!
소스 빌드 프로세스와 결과 이미지에서 환경 변수를 사용할 수 있도록 하는 방법은 환경 파일과 BuildConfig
환경 값입니다. 두 방법 중 하나를 사용하여 제공하는 변수는 빌드 프로세스 중 출력 이미지에 제공됩니다.
5.2.3.1. S2I(Source-to-Image) 환경 파일 사용 링크 복사링크가 클립보드에 복사되었습니다!
소스 빌드를 사용하면 소스 리포지토리의 .s2i/environment
파일에 지정하는 방식으로 애플리케이션 내에서 행당 하나씩 환경 값을 설정할 수 있습니다. 이 파일에 지정된 환경 변수는 빌드 프로세스 중 출력 이미지에 제공됩니다.
소스 리포지토리에 .s2i/environment
파일을 제공하는 경우 빌드 중 S2I(Source-to-Image)에서 이 파일을 읽습니다. 그러면 assemble
스크립트에서 이러한 변수를 사용할 수 있으므로 빌드 동작을 사용자 정의할 수 있습니다.
프로세스
예를 들어 빌드 중 Rails 애플리케이션의 자산 컴파일을 비활성화하려면 다음을 수행합니다.
-
.s2i/environment
파일에DISABLE_ASSET_COMPILATION=true
를 추가합니다.
빌드 외에 지정된 환경 변수도 실행 중인 애플리케이션 자체에서 사용할 수 있습니다. 예를 들어 Rails 애플리케이션이 production
대신 development
모드에서 시작되도록 하려면 다음을 수행합니다.
-
RAILS_ENV=development
를.s2i/environment
파일에 추가합니다.
지원되는 환경 변수의 전체 목록은 각 이미지의 이미지 사용 섹션에서 확인할 수 있습니다.
5.2.3.2. S2I(Source-to-Image) 빌드 구성 환경 사용 링크 복사링크가 클립보드에 복사되었습니다!
빌드 구성의 sourceStrategy
정의에 환경 변수를 추가할 수 있습니다. 여기에 정의된 환경 변수는 assemble
스크립트를 실행하는 동안 표시되고 출력 이미지에 정의되어 run
스크립트 및 애플리케이션 코드에서도 사용할 수 있습니다.
프로세스
예를 들어 Rails 애플리케이션의 자산 컴파일을 비활성화하려면 다음을 수행합니다.
sourceStrategy: ... env: - name: "DISABLE_ASSET_COMPILATION" value: "true"
sourceStrategy: ... env: - name: "DISABLE_ASSET_COMPILATION" value: "true"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.4. S2I(Source-to-Image) 소스 파일 무시 링크 복사링크가 클립보드에 복사되었습니다!
S2I(Source-to-Image)는 무시해야 하는 파일 패턴 목록이 포함된 .s2iignore
파일을 지원합니다. .s2iignore
파일에 있는 패턴과 일치하고 다양한 입력 소스에서 제공하는 빌드 작업 디렉터리의 파일은 assemble
스크립트에서 사용할 수 없습니다.
5.2.5. S2I(Source-to-Image)를 사용하여 소스 코드에서 이미지 생성 링크 복사링크가 클립보드에 복사되었습니다!
S2I(Source-to-Image)는 애플리케이션 소스 코드를 입력으로 사용하고 어셈블된 애플리케이션을 실행하는 새 이미지를 출력으로 생성하는 이미지를 쉽게 작성할 수 있는 프레임워크입니다.
재현 가능한 컨테이너 이미지를 빌드하는 데 S2I를 사용하는 주요 장점은 개발자가 쉽게 사용할 수 있다는 점입니다. 빌더 이미지 작성자는 이미지에서 최상의 S2I 성능, 빌드 프로세스, S2I 스크립트를 제공하도록 두 가지 기본 개념을 이해해야 합니다.
5.2.5.1. S2I(Source-to-Image) 빌드 프로세스 이해 링크 복사링크가 클립보드에 복사되었습니다!
빌드 프로세스는 최종 컨테이너 이미지로 통합되는 다음 세 가지 기본 요소로 구성됩니다.
- 소스
- S2I(Source-to-Image) 스크립트
- 빌더 이미지
S2I는 첫 번째 FROM
명령으로 빌더 이미지가 포함된 Dockerfile을 생성합니다. 그런 다음 S2I에서 생성된 Dockerfile은 Buildah로 전달됩니다.
5.2.5.2. S2I(Source-to-Image) 스크립트를 작성하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
스크립트를 빌더 이미지 내에서 실행할 수 있는 경우 모든 프로그래밍 언어로 S2I(Source-to-Image) 스크립트를 작성할 수 있습니다. S2I는 assemble
/run
/save-artifacts
스크립트를 제공하는 다양한 옵션을 지원합니다. 이러한 위치는 모두 다음 순서에 따라 각 빌드에서 확인합니다.
- 빌드 구성에 지정된 스크립트입니다.
-
애플리케이션 소스
.s2i/bin
디렉터리에 있는 스크립트입니다. -
라벨이
io.openshift.s2i.scripts-url
인 기본 이미지 URL에 있는 스크립트입니다.
이미지에 지정된 io.openshift.s2i.scripts-url
라벨과 빌드 구성에 지정된 스크립트 모두 다음 양식 중 하나를 취할 수 있습니다.
-
image:///path_to_scripts_dir
: S2I 스크립트가 있는 디렉터리에 대한 이미지 내부의 절대 경로입니다. -
file:///path_to_scripts_dir
: S2I 스크립트가 있는 호스트의 디렉터리에 대한 상대 또는 절대 경로입니다. -
http(s)://path_to_scripts_dir
: S2I 스크립트가 있는 디렉터리에 대한 URL입니다.
스크립트 | 설명 |
---|---|
|
|
|
|
|
이러한 종속 항목은 |
|
|
|
참고
|
S2I 스크립트의 예
다음 예제 S2I 스크립트는 Bash로 작성됩니다. 각 예에서는 tar
콘텐츠가 /tmp/s2i
디렉터리에 압축 해제되어 있다고 가정합니다.
assemble
스크립트:
run
스크립트:
run the application
#!/bin/bash
# run the application
/opt/application/run.sh
save-artifacts
스크립트:
usage
스크립트:
5.2.6. 빌드 볼륨 사용 링크 복사링크가 클립보드에 복사되었습니다!
빌드 볼륨을 마운트하여 출력 컨테이너 이미지에 유지하려고 하지 않는 정보에 대한 액세스 권한을 실행 중인 빌드에 부여할 수 있습니다.
빌드 볼륨은 빌드 환경 또는 구성이 빌드 시에만 필요한 리포지토리 자격 증명과 같은 중요한 정보를 제공합니다. 빌드 볼륨은 출력 컨테이너 이미지에 데이터가 지속될 수 있는 빌드 입력과 다릅니다.
실행 중인 빌드 볼륨에서 데이터를 읽는 빌드 볼륨의 마운트 지점은 Pod 볼륨 마운트 와 기능적으로 유사합니다.
사전 요구 사항
- 입력 보안, 구성 맵 또는 둘 다를 BuildConfig 오브젝트에 추가했습니다.
프로세스
BuildConfig
오브젝트의sourceStrategy
정의에서volumes
배열에 빌드 볼륨을 추가합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 5 9
- 필수 항목입니다. 고유한 이름입니다.
- 2 6 10
- 필수 항목입니다. 마운트 지점의 절대 경로입니다.
..
또는:
을 포함하지 않아야 하며 빌더에서 생성한 대상 경로와 충돌하지 않아야 합니다./opt/app-root/src
는 많은 Red Hat S2I 지원 이미지의 기본 홈 디렉토리입니다. - 3 7 11
- 필수 항목입니다. 소스,
ConfigMap
,Secret
또는CSI
의 유형입니다. - 4 8
- 필수 항목입니다. 소스 이름입니다.
- 12
- 필수 항목입니다. 임시 CSI 볼륨을 제공하는 드라이버입니다.
- 13
- 필수 항목입니다. 이 값은
true
로 설정해야 합니다. 읽기 전용 볼륨을 제공합니다. - 14
- 선택 사항: 임시 CSI 볼륨의 볼륨 속성입니다. 지원되는 속성 키와 값은 CSI 드라이버의 설명서를 참조하십시오.
공유 리소스 CSI 드라이버는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
5.3. 사용자 정의 빌드 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 빌드 전략을 사용하면 개발자가 전체 빌드 프로세스를 담당하는 특정 빌더 이미지를 정의할 수 있습니다. 자체 빌더 이미지를 사용하면 빌드 프로세스를 사용자 정의할 수 있습니다.
사용자 정의 빌더 이미지는 빌드 프로세스 논리가 포함된 일반 컨테이너 이미지입니다(예: RPM 또는 기본 이미지 빌드).
사용자 정의 빌드는 높은 권한으로 실행되며 기본적으로 사용자에게 제공되지 않습니다. 클러스터 관리 권한이 있는 신뢰할 수 있는 사용자에게만 사용자 정의 빌드를 실행할 수 있는 권한을 부여해야 합니다.
5.3.1. 사용자 정의 빌드에 FROM 이미지 사용 링크 복사링크가 클립보드에 복사되었습니다!
customStrategy.from
섹션을 사용하여 사용자 정의 빌드에 사용할 이미지를 표시할 수 있습니다.
프로세스
customStrategy.from
섹션을 설정합니다.strategy: customStrategy: from: kind: "DockerImage" name: "openshift/sti-image-builder"
strategy: customStrategy: from: kind: "DockerImage" name: "openshift/sti-image-builder"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.2. 사용자 정의 빌드에서 보안 사용 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 전략에서는 모든 빌드 유형에 추가할 수 있는 소스 및 이미지 보안 외에 임의의 보안 목록을 빌더 Pod에 추가할 수 있습니다.
5.3.3. 사용자 정의 빌드에 환경 변수 사용 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 빌드 프로세스에서 환경 변수를 사용할 수 있도록 하려면 빌드 구성의 customStrategy
정의에 환경 변수를 추가하면 됩니다.
여기에서 정의한 환경 변수는 사용자 정의 빌드를 실행하는 Pod로 전달됩니다.
프로세스
빌드 중 사용할 사용자 정의 HTTP 프록시를 정의합니다.
customStrategy: ... env: - name: "HTTP_PROXY" value: "http://myproxy.net:5187/"
customStrategy: ... env: - name: "HTTP_PROXY" value: "http://myproxy.net:5187/"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드 구성에 정의된 환경 변수를 관리하려면 다음 명령을 입력합니다.
oc set env <enter_variables>
$ oc set env <enter_variables>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.4. 사용자 정의 빌더 이미지 사용 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform의 사용자 정의 빌드 전략을 사용하면 전체 빌드 프로세스를 담당하는 특정 빌더 이미지를 정의할 수 있습니다. 패키지, JAR, WAR, 설치 가능한 ZIP 또는 기본 이미지와 같은 개별 아티팩트를 생성하는 빌드가 필요한 경우 사용자 정의 빌드 전략을 사용하는 사용자 정의 빌더 이미지를 사용합니다.
사용자 정의 빌더 이미지는 RPM 또는 기본 컨테이너 이미지와 같은 아티팩트를 구축하는 데 사용되는 빌드 프로세스 논리에 내장된 일반 컨테이너 이미지입니다.
또한 사용자 정의 빌더를 사용하면 단위 테스트 또는 통합 테스트를 실행하는 CI/CD 흐름과 같이 확장된 빌드 프로세스를 구현할 수 있습니다.
5.3.4.1. 사용자 정의 빌더 이미지 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 빌더 이미지는 호출 시 빌드를 진행하는 데 필요한 정보와 함께 다음 환경 변수를 수신합니다.
변수 이름 | 설명 |
---|---|
|
|
| 빌드할 소스가 있는 Git 리포지토리의 URL입니다. |
|
|
| 빌드할 때 사용할 Git 리포지토리의 하위 디렉터리를 지정합니다. 정의한 경우에만 존재합니다. |
| 빌드할 Git 참조입니다. |
| 이 빌드 오브젝트를 생성한 OpenShift Container Platform 마스터의 버전입니다. |
| 이미지를 내보낼 컨테이너 이미지 레지스트리입니다. |
| 빌드 중인 이미지의 컨테이너 이미지 태그 이름입니다. |
|
|
5.3.4.2. 사용자 정의 빌더 워크플로 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 빌더 이미지 작성자는 빌드 프로세스를 정의하는 데 유연성이 있지만 빌더 이미지는 OpenShift Container Platform 내에서 빌드를 실행하는 데 필요한 다음 단계를 준수해야 합니다.
-
Build
오브젝트 정의에는 빌드의 입력 매개변수에 대한 모든 필수 정보가 포함되어 있습니다. - 빌드 프로세스를 실행합니다.
- 빌드에서 이미지를 생성하면 빌드의 출력 위치가 정의된 경우 해당 위치로 내보냅니다. 다른 출력 위치는 환경 변수를 통해 전달할 수 있습니다.
5.4. 파이프라인 빌드 링크 복사링크가 클립보드에 복사되었습니다!
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
파이프라인 빌드 전략을 사용하면 개발자가 Jenkins 파이프라인 플러그인에서 사용할 Jenkins 파이프라인을 정의할 수 있습니다. 다른 빌드 유형과 동일한 방식으로 OpenShift Container Platform에서 빌드를 시작, 모니터링, 관리할 수 있습니다.
파이프라인 워크플로는 빌드 구성에 직접 포함하거나 Git 리포지토리에 제공하는 방식으로 jenkinsfile
에 정의하고 빌드 구성에서 참조합니다.
5.4.1. OpenShift Container Platform 파이프라인 이해 링크 복사링크가 클립보드에 복사되었습니다!
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
파이프라인을 사용하면 OpenShift Container Platform에서 애플리케이션의 빌드, 배포, 승격을 제어할 수 있습니다. Jenkins Pipeline 빌드 전략 jenkinsfiles
와 Jenkins 클라이언트 플러그인에서 제공하는 OpenShift Container Platform DSL(Domain Specific Language)을 조합하면 모든 시나리오에 맞는 고급 빌드, 테스트, 배포, 승격 파이프라인을 생성할 수 있습니다.
OpenShift Container Platform Jenkins 동기화 플러그인
OpenShift Container Platform Jenkins 동기화 플러그인은 Jenkins 작업 및 빌드와 동기화된 빌드 구성 및 빌드 오브젝트를 유지하고 다음 기능을 제공합니다.
- Jenkins에서 동적 작업 및 실행 생성
- 이미지 스트림, 이미지 스트림 태그 또는 구성 맵에서 에이전트 Pod 템플릿 동적 생성
- 환경 변수 삽입
- OpenShift Container Platform 웹 콘솔의 파이프라인 시각화
- Jenkins Git 플러그인과의 통합으로 OpenShift Container Platform 빌드의 커밋 정보를 Jenkins Git 플러그인에 전달
- Jenkins 인증 정보 항목에 대한 시크릿 동기화입니다.
OpenShift Container Platform Jenkins 클라이언트 플러그인
OpenShift Container Platform Jenkins 클라이언트 플러그인은 Jenkins 플러그인 중 하나로, OpenShift Container Platform API 서버와의 다양한 상호 작용을 위해 읽기 쉽고 간결하고 포괄적이며 유창한 Jenkins Pipeline 구문을 제공하기 위한 것입니다. 플러그인은 스크립트를 실행하는 노드에서 사용할 수 있어야 하는 OpenShift Container Platform 명령줄 툴인 oc
를 사용합니다.
Jenkins 클라이언트 플러그인은 애플리케이션의 jenkinsfile
내에서 OpenShift Container Platform DSL을 사용할 수 있도록 Jenkins 마스터에 설치해야 합니다. 이 플러그인은 OpenShift Container Platform Jenkins 이미지를 사용할 때 기본적으로 설치 및 활성화됩니다.
프로젝트 내 OpenShift Container Platform Pipeline의 경우 Jenkins Pipeline 빌드 전략을 사용해야 합니다. 이 전략에서는 기본적으로 소스 리포지토리의 루트에서 jenkinsfile
을 사용하지만 다음과 같은 구성 옵션을 제공합니다.
-
빌드 구성 내의 인라인
jenkinsfile
필드 -
소스
contextDir
에 상대적으로 사용할jenkinsfile
의 위치를 참조하는, 빌드 구성 내의jenkinsfilePath
필드
선택적 jenkinsfilePath
필드는 소스 contextDir
에 상대적으로 사용할 파일의 이름을 지정합니다. contextDir
이 생략된 경우 기본값은 리포지토리의 루트입니다. jenkinsfilePath
가 생략된 경우 기본값은 jenkinsfile
입니다.
5.4.2. 파이프라인 빌드를 위한 Jenkins 파일 제공 링크 복사링크가 클립보드에 복사되었습니다!
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
jenkinsfile
에서는 표준 Groovy 언어 구문을 사용하여 애플리케이션의 구성, 빌드, 배포를 세부적으로 제어할 수 있습니다.
다음 방법 중 하나로 jenkinsfile
을 제공할 수 있습니다.
- 소스 코드 리포지토리에 있는 파일
-
jenkinsfile
필드를 사용하여 빌드 구성의 일부로 포함
첫 번째 옵션을 사용하는 경우 다음 위치 중 하나의 애플리케이션 소스 코드 리포지토리에 jenkinsfile
을 포함해야 합니다.
-
리포지토리 루트에 있는
jenkinsfile
이라는 파일 -
리포지토리의 소스
contextDir
루트에 있는jenkinsfile
이라는 파일 -
BuildConfig의
JenkinsPipelineStrategy
섹션에 있는jenkinsfilePath
필드를 통해 지정되는 파일 이름(제공되는 경우 소스contextDir
에 상대적이고 제공되지 않는 경우 기본값은 리포지토리의 루트임)
jenkinsfile
은 Jenkins 에이전트 Pod에서 실행됩니다. OpenShift Container Platform DSL을 사용하려면 해당 Pod에 사용 가능한 OpenShift Container Platform 클라이언트 바이너리가 있어야 합니다.
프로세스
다음 중 하나를 수행하여 Jenkins 파일을 제공할 수 있습니다.
- 빌드 구성에 Jenkins 파일 포함
- 빌드 구성에 Jenkins 파일이 포함된 Git 리포지토리에 대한 참조 포함
포함된 정의
Git 리포지토리에 대한 참조
- 1
- 선택적
jenkinsfilePath
필드는 소스contextDir
에 상대적으로 사용할 파일의 이름을 지정합니다.contextDir
이 생략된 경우 기본값은 리포지토리의 루트입니다.jenkinsfilePath
가 생략된 경우 기본값은jenkinsfile
입니다.
5.4.3. 파이프라인 빌드에 환경 변수 사용 링크 복사링크가 클립보드에 복사되었습니다!
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
파이프라인 빌드 프로세스에서 환경 변수를 사용할 수 있도록 하려면 빌드 구성의 jenkinsPipelineStrategy
정의에 환경 변수를 추가하면 됩니다.
정의된 환경 변수는 빌드 구성과 관련된 모든 Jenkins 작업의 매개변수로 설정됩니다.
프로세스
빌드 중 사용할 환경 변수를 정의하려면 YAML 파일을 다음과 같이 편집합니다.
jenkinsPipelineStrategy: ... env: - name: "FOO" value: "BAR"
jenkinsPipelineStrategy: ... env: - name: "FOO" value: "BAR"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
oc set env
명령을 사용하면 빌드 구성에 정의된 환경 변수도 관리할 수 있습니다.
5.4.3.1. BuildConfig 환경 변수 및 Jenkins 작업 매개변수 간 매핑 링크 복사링크가 클립보드에 복사되었습니다!
파이프라인 전략 빌드 구성의 변경 사항에 따라 Jenkins 작업이 생성되거나 업데이트되면 빌드 구성의 모든 환경 변수가 Jenkins 작업 매개 변수 정의에 매핑됩니다. 여기서 Jenkins 작업 매개변수 정의의 기본값은 연결된 환경 변수의 현재 값입니다.
Jenkins 작업의 초기 생성 후에도 Jenkins 콘솔에서 작업에 매개변수를 추가할 수 있습니다. 매개변수 이름은 빌드 구성의 환경 변수 이름과 다릅니다. 매개변수는 해당 Jenkins 작업에 대한 빌드가 시작될 때 적용됩니다.
Jenkins 작업의 빌드를 시작하는 방법에 따라 매개변수 설정 방법이 결정됩니다.
-
oc start-build
로 시작하는 경우 빌드 구성의 환경 변수 값은 해당 작업 인스턴스에 설정된 매개변수입니다. Jenkins 콘솔에서 매개변수 기본값을 변경하면 해당 변경 사항이 무시됩니다. 빌드 구성 값이 우선합니다. oc start-build -e
로 시작하는 경우-e
옵션에 지정된 환경 변수의 값이 우선합니다.- 빌드 구성에 나열되지 않은 환경 변수를 지정하면 Jenkins 작업 매개변수 정의로 추가됩니다.
-
Jenkins 콘솔에서 환경 변수에 해당하는 매개변수를 변경하면 해당 변경 사항이 무시됩니다. 빌드 구성 및
oc start-build -e
로 지정하는 항목이 우선합니다.
- Jenkins 콘솔에서 Jenkins 작업을 시작하면 작업의 빌드를 시작하는 과정의 일부로 Jenkins 콘솔을 사용하여 매개변수 설정을 제어할 수 있습니다.
빌드 구성에서 작업 매개변수와 연결할 수 있는 모든 환경 변수를 지정하는 것이 좋습니다. 이렇게 하면 디스크 I/O가 줄어들고 Jenkins 처리 중 성능이 향상됩니다.
5.4.4. 파이프라인 빌드 튜토리얼 링크 복사링크가 클립보드에 복사되었습니다!
파이프라인 빌드 전략은 OpenShift Container Platform 4에서 더 이상 사용되지 않습니다. 동등하고 향상된 기능은 Tekton 기반 OpenShift Container Platform Pipelines에 있습니다.
OpenShift Container Platform의 Jenkins 이미지는 완전히 지원되며 사용자는 Jenkins 사용 설명서를 따라 작업에 jenkinsfile
을 정의하거나 소스 제어 관리 시스템에 저장해야 합니다.
이 예제에서는 nodejs-mongodb.json
템플릿을 사용하여 Node.js/MongoDB
애플리케이션을 빌드, 배포, 확인할 OpenShift Container Platform Pipeline을 생성하는 방법을 보여줍니다.
프로세스
Jenkins 마스터를 생성합니다.
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용할 프로젝트를 선택하거나
oc new-project <project_name>
을 사용하여 새 프로젝트를 생성합니다.oc new-app jenkins-ephemeral
$ oc new-app jenkins-ephemeral
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 영구 스토리지를 사용하려면 대신
jenkins-persistent
를 사용합니다.다음 콘텐츠를 사용하여
nodejs-sample-pipeline.yaml
이라는 파일을 생성합니다.참고이 과정에서 Jenkins Pipeline 전략을 사용하여
Node.js/MongoDB
예제 애플리케이션을 빌드, 배포, 스케일링하는BuildConfig
오브젝트가 생성됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow jenkinsPipelineStrategy
를 사용하여BuildConfig
오브젝트를 생성한 후에는 인라인jenkinsfile
을 사용하여 파이프라인에 수행할 작업을 지시합니다.참고이 예에서는 애플리케이션에 대한 Git 리포지토리를 설정하지 않습니다.
다음
jenkinsfile
콘텐츠는 OpenShift Container Platform DSL을 사용하여 Groovy로 작성됩니다. 소스 리포지토리에jenkinsfile
을 포함하는 것이 기본 방법이지만 이 예제에서는 YAML 리터럴 스타일을 사용하여BuildConfig
오브젝트에 인라인 콘텐츠를 포함합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 사용할 템플릿의 경로입니다.
- 1 2
- 생성할 템플릿의 이름입니다.
- 3
- 이 빌드를 실행할
node.js
에이전트 Pod를 구동합니다. - 4
- 이 파이프라인에 타임아웃을 20분으로 설정합니다.
- 5
- 이 템플릿 라벨이 있는 모든 항목을 삭제합니다.
- 6
- 이 템플릿 라벨을 사용하여 모든 보안을 삭제합니다.
- 7
templatePath
에서 새 애플리케이션을 생성합니다.- 8
- 빌드가 완료될 때까지 최대 5분 동안 기다립니다.
- 9
- 배포가 완료될 때까지 최대 5분 정도 기다립니다.
- 10
- 다른 모든 과정이 성공하면
$ {templateName}:latest
이미지에$ {templateName}-staging:latest
태그를 지정합니다. 스테이징 환경에 대한 파이프라인 빌드 구성에서는$ {templateName}-staging:latest
이미지가 변경될 때까지 기다린 다음 해당 이미지를 스테이징 환경에 배포할 수 있습니다.
참고위 예제는 선언적 파이프라인 스타일로 작성되었지만 기존에 스크립팅된 파이프라인 스타일도 지원됩니다.
OpenShift Container Platform 클러스터에서 파이프라인
BuildConfig
를 생성합니다.oc create -f nodejs-sample-pipeline.yaml
$ oc create -f nodejs-sample-pipeline.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 자체 파일을 생성하지 않으려면 다음을 실행하여 원래 리포지토리의 샘플을 사용하면 됩니다.
oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/jenkins/pipeline/nodejs-sample-pipeline.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/jenkins/pipeline/nodejs-sample-pipeline.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
파이프라인을 시작합니다.
oc start-build nodejs-sample-pipeline
$ oc start-build nodejs-sample-pipeline
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고또는 빌드 → 파이프라인 섹션으로 이동하여 파이프라인 시작을 클릭하거나 Jenkins 콘솔을 방문하여 생성한 파이프라인으로 이동한 다음 지금 빌드를 클릭하여 OpenShift Container Platform 웹 콘솔에서 파이프라인을 시작할 수 있습니다.
파이프라인이 시작되면 프로젝트 내에서 수행되는 다음 작업이 표시되어야 합니다.
- Jenkins 서버에서 작업 인스턴스가 생성됩니다.
- 파이프라인에 필요한 경우 에이전트 Pod가 시작됩니다.
파이프라인은 에이전트 Pod에서 실행되지만 에이전트가 필요하지 않은 경우에는 마스터에서 실행됩니다.
-
template=nodejs-mongodb-example
라벨을 사용하여 이전에 생성한 리소스는 삭제됩니다. -
새 애플리케이션 및 이 애플리케이션의 모든 관련 리소스는
nodejs-mongodb-example
템플릿에서 생성됩니다. nodejs-mongodb-example
BuildConfig
를 사용하여 빌드가 시작됩니다.- 파이프라인은 빌드가 완료될 때까지 기다린 후 다음 단계를 트리거합니다.
배포는
nodejs-mongodb-example
배포 구성을 사용하여 시작됩니다.- 파이프라인은 배포가 완료될 때까지 기다린 후 다음 단계를 트리거합니다.
-
빌드 및 배포가 성공하면
nodejs-mongodb-example:latest
이미지에nodejs-mongodb-example:stage
태그가 지정됩니다.
-
파이프라인에 필요한 경우 에이전트 pod가 삭제됩니다.
참고파이프라인 실행을 시각화하는 가장 좋은 방법은 OpenShift Container Platform 웹 콘솔에서 확인하는 것입니다. 웹 콘솔에 로그인하고 빌드 → 파이프라인으로 이동하여 파이프라인을 확인할 수 있습니다.
5.5. 웹 콘솔을 사용하여 보안 추가 링크 복사링크가 클립보드에 복사되었습니다!
개인 리포지토리에 액세스할 수 있도록 빌드 구성에 보안을 추가할 수 있습니다.
프로세스
OpenShift Container Platform 웹 콘솔에서 개인 리포지토리에 액세스할 수 있도록 빌드 구성에 보안을 추가하려면 다음을 수행합니다.
- 새 OpenShift Container Platform 프로젝트를 생성합니다.
- 개인 소스 코드 리포지토리에 액세스하는 데 필요한 자격 증명이 포함된 보안을 생성합니다.
- 빌드 구성을 생성합니다.
-
빌드 구성 편집기 페이지 또는 웹 콘솔의
빌더 이미지에서 앱 생성
페이지에서 소스 보안을 설정합니다. - 저장을 클릭합니다.
5.6. 가져오기 및 내보내기 활성화 링크 복사링크가 클립보드에 복사되었습니다!
빌드 구성에 가져오기 보안을 설정하여 프라이빗 레지스트리로 가져오고 내보내기 보안을 설정하여 내보낼 수 있습니다.
프로세스
프라이빗 레지스트리로 가져오기를 활성화하려면 다음을 수행합니다.
- 빌드 구성에 가져오기 보안을 설정합니다.
내보내기를 활성화하려면 다음을 수행합니다.
- 빌드 구성에 내보내기 보안을 설정합니다.
6장. Buildah를 사용한 사용자 정의 이미지 빌드 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 4.16에서는 호스트 노드에 Docker 소켓이 존재하지 않습니다. 즉 사용자 정의 빌드의 Docker 소켓 마운트 옵션에서 사용자 정의 빌드 이미지 내에서 사용하도록 액세스 가능한 Docker 소켓을 제공하지 않을 수 있습니다.
이미지를 빌드하고 내보내기 위해 이 기능이 필요한 경우 사용자 정의 빌드 이미지에 Buildah 툴을 추가한 후 이 툴을 사용하여 사용자 정의 빌드 논리 내에서 이미지를 빌드하고 내보내십시오. 다음은 Buildah를 사용하여 사용자 정의 빌드를 실행하는 방법의 예입니다.
사용자 정의 빌드 전략을 사용하려면 사용자가 클러스터에서 실행되는 권한 있는 컨테이너 내에서 임의의 코드를 실행할 수 있으므로 기본적으로 일반 사용자에게는 없는 권한이 필요합니다. 이 수준의 액세스 권한은 사용 시 클러스터를 손상시킬 수 있으므로 클러스터에 대한 관리 권한이 있는 신뢰할 수 있는 사용자에게만 부여해야 합니다.
6.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
- 사용자 정의 빌드 권한을 부여하는 방법을 검토합니다.
6.2. 사용자 정의 빌드 아티팩트 생성 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 빌드 이미지로 사용할 이미지를 생성해야 합니다.
프로세스
빈 디렉터리에서부터 다음 콘텐츠를 사용하여
Dockerfile
이라는 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 동일한 디렉터리에서
dockerfile.sample
이라는 파일을 생성합니다. 이 파일은 사용자 정의 빌드 이미지에 포함되어 있으며 사용자 정의 빌드에서 생성하는 이미지를 정의합니다.FROM registry.access.redhat.com/ubi9/ubi RUN touch /tmp/build
FROM registry.access.redhat.com/ubi9/ubi RUN touch /tmp/build
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 동일한 디렉터리에
build.sh
라는 파일을 생성합니다. 이 파일에는 사용자 정의 빌드가 실행될 때 실행되는 논리가 포함되어 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3. 사용자 정의 빌더 이미지 빌드 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform을 사용하여 사용자 정의 전략에서 사용할 사용자 정의 빌더 이미지를 빌드하고 내보낼 수 있습니다.
사전 요구 사항
- 새 사용자 정의 빌더 이미지를 생성하는 데 사용할 모든 입력을 정의합니다.
프로세스
사용자 정의 빌더 이미지를 빌드할
BuildConfig
오브젝트를 정의합니다.oc new-build --binary --strategy=docker --name custom-builder-image
$ oc new-build --binary --strategy=docker --name custom-builder-image
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 정의 빌드 이미지를 생성한 디렉터리에서 빌드를 실행합니다.
oc start-build custom-builder-image --from-dir . -F
$ oc start-build custom-builder-image --from-dir . -F
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드가 완료되면
custom-builder-image:latest
라는 이미지 스트림 태그의 프로젝트에서 새 사용자 정의 빌더 이미지를 사용할 수 있습니다.
6.4. 사용자 정의 빌더 이미지 사용 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 빌더 이미지와 함께 사용자 정의 전략을 사용하여 사용자 정의 빌드 논리를 실행하는 BuildConfig
오브젝트를 정의할 수 있습니다.
사전 요구 사항
- 새 사용자 정의 빌더 이미지에 필요한 모든 입력을 정의합니다.
- 사용자 정의 빌더 이미지를 빌드합니다.
프로세스
buildconfig.yaml
이라는 파일을 생성합니다. 이 파일은 프로젝트에서 생성되어 실행되는BuildConfig
오브젝트를 정의합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 프로젝트 이름을 지정합니다.
다음 명령을 입력하여
BuildConfig
오브젝트를 생성합니다.oc create -f buildconfig.yaml
$ oc create -f buildconfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow imagestream.yaml
이라는 파일을 생성합니다. 이 파일은 빌드에서 이미지를 내보낼 이미지 스트림을 정의합니다.kind: ImageStream apiVersion: image.openshift.io/v1 metadata: name: sample-custom spec: {}
kind: ImageStream apiVersion: image.openshift.io/v1 metadata: name: sample-custom spec: {}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 이미지 스트림을 생성합니다.
oc create -f imagestream.yaml
$ oc create -f imagestream.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 사용자 정의 빌드를 실행합니다.
oc start-build sample-custom-build -F
$ oc start-build sample-custom-build -F
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드를 실행하면 빌드에서 이전에 빌드한 사용자 정의 빌더 이미지를 실행하는 Pod를 시작합니다. Pod는 사용자 정의 빌더 이미지의 진입점으로 정의된
build.sh
논리를 실행합니다.build.sh
논리는 Buildah를 호출하여 사용자 정의 빌더 이미지에 포함된dockerfile.sample
을 빌드한 다음 Buildah를 사용하여 새 이미지를sample-custom image stream
으로 내보냅니다.
7장. 기본 빌드 수행 및 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 섹션에서는 빌드 시작 및 취소, BuildConfig
편집, BuildConfig
삭제, 빌드 세부 정보 보기, 빌드 로그 액세스 등 기본 빌드 작업에 대한 지침을 제공합니다.
7.1. 빌드 시작 링크 복사링크가 클립보드에 복사되었습니다!
현재 프로젝트의 기존 빌드 구성에서 새 빌드를 수동으로 시작할 수 있습니다.
프로세스
빌드를 수동으로 시작하려면 다음 명령을 입력합니다.
oc start-build <buildconfig_name>
$ oc start-build <buildconfig_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.1. 빌드 재실행 링크 복사링크가 클립보드에 복사되었습니다!
--from-build
플래그를 사용하여 빌드를 수동으로 다시 실행할 수 있습니다.
프로세스
빌드를 수동으로 다시 실행하려면 다음 명령을 입력합니다.
oc start-build --from-build=<build_name>
$ oc start-build --from-build=<build_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.2. 빌드 로그 스트리밍 링크 복사링크가 클립보드에 복사되었습니다!
--follow
플래그를 지정하여 빌드의 로그를 stdout
에서 스트리밍할 수 있습니다.
프로세스
stdout
에서 빌드 로그를 수동으로 스트리밍하려면 다음 명령을 입력합니다.oc start-build <buildconfig_name> --follow
$ oc start-build <buildconfig_name> --follow
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.3. 빌드 시작 시 환경 변수 설정 링크 복사링크가 클립보드에 복사되었습니다!
--env
플래그를 지정하여 빌드에 원하는 환경 변수를 설정할 수 있습니다.
프로세스
원하는 환경 변수를 지정하려면 다음 명령을 입력합니다.
oc start-build <buildconfig_name> --env=<key>=<value>
$ oc start-build <buildconfig_name> --env=<key>=<value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.4. 소스를 사용하여 빌드 시작 링크 복사링크가 클립보드에 복사되었습니다!
빌드에 Git 소스 가져오기 또는 Dockerfile을 사용하는 대신 소스를 직접 내보내 빌드를 시작할 수 있습니다. 소스는 Git 또는 SVN 작업 디렉터리, 배포하려는 사전 빌드된 바이너리 아티팩트 세트 또는 단일 파일의 콘텐츠일 수 있습니다. 이 작업은 start-build
명령에 다음 옵션 중 하나를 지정하여 수행할 수 있습니다.
옵션 | 설명 |
---|---|
| 보관하여 빌드에 바이너리 입력으로 사용할 디렉터리를 지정합니다. |
| 빌드 소스에서 유일한 파일이 될 단일 파일을 지정합니다. 이 파일은 제공된 원래 파일과 파일 이름이 동일한 빈 디렉터리의 루트에 배치됩니다. |
|
빌드에 바이너리 입력으로 사용할 로컬 리포지토리의 경로를 지정합니다. 빌드에 사용되는 분기, 태그 또는 커밋을 제어하는 |
이러한 옵션을 빌드에 직접 전달하면 해당 콘텐츠가 빌드로 스트리밍되어 현재 빌드 소스 설정을 덮어씁니다.
바이너리 입력에서 트리거된 빌드는 서버의 소스를 유지하지 않으므로 기본 이미지 변경에 의해 트리거된 리빌드는 빌드 구성에 지정된 소스를 사용합니다.
프로세스
소스 코드 리포지토리에서 빌드를 시작하고 로컬 Git 리포지토리의 내용을 태그
v2
에서 아카이브로 보내려면 다음 명령을 입력합니다.oc start-build hello-world --from-repo=../hello-world --commit=v2
$ oc start-build hello-world --from-repo=../hello-world --commit=v2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2. 빌드 취소 링크 복사링크가 클립보드에 복사되었습니다!
웹 콘솔을 사용하거나 다음 CLI 명령을 사용하여 빌드를 취소할 수 있습니다.
프로세스
빌드를 수동으로 취소하려면 다음 명령을 입력합니다.
oc cancel-build <build_name>
$ oc cancel-build <build_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.1. 여러 빌드 취소 링크 복사링크가 클립보드에 복사되었습니다!
다음 CLI 명령으로 여러 빌드를 취소할 수 있습니다.
프로세스
여러 빌드를 수동으로 취소하려면 다음 명령을 입력합니다.
oc cancel-build <build1_name> <build2_name> <build3_name>
$ oc cancel-build <build1_name> <build2_name> <build3_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.2. 모든 빌드 취소 링크 복사링크가 클립보드에 복사되었습니다!
다음 CLI 명령을 사용하여 빌드 구성에서 모든 빌드를 취소할 수 있습니다.
프로세스
모든 빌드를 취소하려면 다음 명령을 입력합니다.
oc cancel-build bc/<buildconfig_name>
$ oc cancel-build bc/<buildconfig_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.3. 지정된 상태의 모든 빌드 취소 링크 복사링크가 클립보드에 복사되었습니다!
지정된 상태(new
또는 pending
등)의 빌드는 모두 취소하고 다른 상태의 빌드는 무시할 수 있습니다.
프로세스
지정된 상태의 빌드를 모두 취소하려면 다음 명령을 입력합니다.
oc cancel-build bc/<buildconfig_name>
$ oc cancel-build bc/<buildconfig_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3. BuildConfig 편집 링크 복사링크가 클립보드에 복사되었습니다!
빌드 구성을 편집하려면 개발자 화면의 빌드 보기에서 빌드 구성 편집 옵션을 사용합니다.
다음 보기 중 하나를 사용하여 BuildConfig
를 편집할 수 있습니다.
-
양식 보기를 사용하면 표준 양식 필드 및 확인란을 사용하여
BuildConfig
를 편집할 수 있습니다. -
YAML 보기를 사용하면 작업을 완전히 제어하여
BuildConfig
를 편집할 수 있습니다.
데이터를 손실하지 않고 양식 보기 와 YAML 보기를 전환할 수 있습니다. 양식 보기의 데이터는 YAML 보기로 전송되며 그 반대의 경우도 마찬가지입니다.
프로세스
-
개발자 화면의 빌드 보기에서
메뉴를 클릭하여 BuildConfig 편집 옵션을 확인합니다.
- BuildConfig 편집 을 클릭하여 양식 보기 옵션을 확인합니다.
Git 섹션에서 애플리케이션을 생성하는 데 사용할 코드베이스의 Git 리포지토리 URL을 입력합니다. 그런 다음 URL을 검증합니다.
선택 사항: 고급 Git 옵션 표시를 클릭하여 다음과 같은 세부 정보를 추가합니다.
- 애플리케이션을 빌드하는 데 사용할 코드가 포함된 분기, 태그 또는 커밋을 지정하는 Git 참조 입니다.
- 컨텍스트 디렉터리: 애플리케이션을 빌드하는 데 사용할 코드가 포함된 하위 디렉터리를 지정합니다.
- 소스 시크릿: 프라이빗 리포지토리에서 소스 코드를 가져올 수 있는 자격 증명이 포함된 시크릿 이름을 생성합니다.
빌드 대상 섹션에서 빌드하려는 옵션을 선택합니다. 다음 옵션을 사용할 수 있습니다.
- 이미지 스트림 태그 는 지정된 이미지 스트림 및 태그의 이미지를 참조합니다. 빌드하려는 위치의 프로젝트, 이미지 스트림, 태그를 입력하고 내보냅니다.
- 이미지 스트림 이미지는 지정된 이미지 스트림 및 이미지 이름의 이미지를 참조합니다. 빌드하려는 이미지 스트림 이미지를 입력합니다. 또한 내보낼 프로젝트, 이미지 스트림 및 태그도 입력합니다.
- Docker 이미지: Docker 이미지 리포지터리를 통해 Docker 이미지를 참조합니다. 또한 프로젝트, 이미지 스트림 및 태그를 입력하여 푸시할 위치를 참조해야 합니다.
- 선택 사항: 환경 변수 섹션에서 이름 및 값 필드를 사용하여 프로젝트와 관련된 환경 변수를 추가합니다. 환경 변수를 추가하려면 값 추가, 또는 ConfigMap에서 추가 및 시크릿을 사용합니다.
선택 사항: 애플리케이션을 추가로 사용자 지정하려면 다음 고급 옵션을 사용합니다.
- 트리거
- 빌더 이미지가 변경되면 새 이미지 빌드를 트리거합니다. 트리거 추가를 클릭하고 유형 및 시크릿을 선택하여 트리거를 추가합니다.
- 보안
- 애플리케이션에 대한 시크릿을 추가합니다. 시크릿 추가를 클릭하고 시크릿 및 마운트 지점 을 선택하여 더 많은 시크릿을 추가합니다.
- 정책
- 정책 실행을 클릭하여 빌드 실행 정책을 선택합니다. 선택한 정책에 따라 빌드 구성에서 생성한 빌드가 실행되어야 하는 순서가 결정됩니다.
- 후크
- 이미지 빌드 후 빌드 후크 실행을 선택하여 빌드 끝에 명령을 실행하고 이미지를 확인합니다. 명령에 추가할 후크 유형,명령, 인수를 추가합니다.
-
저장을 클릭하여
BuildConfig
를 저장합니다.
7.4. BuildConfig 삭제 링크 복사링크가 클립보드에 복사되었습니다!
다음 명령을 사용하여 BuildConfig
를 삭제할 수 있습니다.
프로세스
BuildConfig
를 삭제하려면 다음 명령을 입력합니다.oc delete bc <BuildConfigName>
$ oc delete bc <BuildConfigName>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 이
BuildConfig
에서 인스턴스화한 빌드도 모두 삭제합니다.BuildConfig
는 삭제하고BuildConfig
에서 인스턴스화한 빌드는 유지하려면 다음 명령을 입력할 때--cascade=false
플래그를 지정하십시오.oc delete --cascade=false bc <BuildConfigName>
$ oc delete --cascade=false bc <BuildConfigName>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5. 빌드 세부 정보 보기 링크 복사링크가 클립보드에 복사되었습니다!
웹 콘솔을 사용하거나 oc describe
CLI 명령을 사용하여 빌드 세부 정보를 볼 수 있습니다.
다음을 포함한 정보가 표시됩니다.
- 빌드 소스입니다.
- 빌드 전략입니다.
- 출력 대상입니다.
- 대상 레지스트리의 이미지 다이제스트입니다.
- 빌드를 생성한 방법입니다.
빌드에서 Docker
또는 Source
전략을 사용하는 경우 oc describe
출력에 커밋 ID, 작성자, 커밋, 메시지 등 해당 빌드에 사용된 소스 리버전 정보도 포함됩니다.
프로세스
빌드 세부 정보를 보려면 다음 명령을 입력합니다.
oc describe build <build_name>
$ oc describe build <build_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6. 빌드 로그에 액세스 링크 복사링크가 클립보드에 복사되었습니다!
웹 콘솔 또는 CLI를 사용하여 빌드 로그에 액세스할 수 있습니다.
프로세스
빌드를 직접 사용하여 로그를 스트리밍하려면 다음 명령을 입력합니다.
oc describe build <build_name>
$ oc describe build <build_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6.1. BuildConfig 로그에 액세스 링크 복사링크가 클립보드에 복사되었습니다!
웹 콘솔 또는 CLI를 사용하여 BuildConfig
로그에 액세스할 수 있습니다.
프로세스
BuildConfig
의 최신 빌드 로그를 스트리밍하려면 다음 명령을 입력합니다.oc logs -f bc/<buildconfig_name>
$ oc logs -f bc/<buildconfig_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6.2. 특정 버전 빌드의 BuildConfig 로그에 액세스 링크 복사링크가 클립보드에 복사되었습니다!
웹 콘솔 또는 CLI를 사용하여 특정 버전 빌드의 BuildConfig
로그에 액세스할 수 있습니다.
프로세스
특정 버전 빌드의
BuildConfig
로그를 스트리밍하려면 다음 명령을 입력합니다.oc logs --version=<number> bc/<buildconfig_name>
$ oc logs --version=<number> bc/<buildconfig_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6.3. 로그 세부 정보 표시 활성화 링크 복사링크가 클립보드에 복사되었습니다!
BuildConfig
에서 sourceStrategy
또는 dockerStrategy
의 일부로 BUILD_LOGLEVEL
환경 변수를 전달하여 더 세부적인 출력을 제공할 수 있습니다.
관리자는 env/BUILD_LOGLEVEL
을 구성하여 전체 OpenShift Container Platform 인스턴스에 대한 기본 빌드 세부 정보 표시 수준을 설정할 수 있습니다. 이 기본값은 지정된 BuildConfig
에 BUILD_LOGLEVEL
을 지정하여 덮어쓸 수 있습니다. 명령줄에서 --build-loglevel
을 oc start-build
로 전달하여 바이너리가 아닌 빌드에 더 높은 우선순위를 지정할 수 있습니다.
소스 빌드에 사용 가능한 로그 수준은 다음과 같습니다.
수준 0 |
|
수준 1 | 실행된 프로세스에 대한 기본 정보를 생성합니다. |
수준 2 | 실행된 프로세스에 대한 매우 자세한 정보를 생성합니다. |
수준 3 | 실행된 프로세스에 대한 자세한 정보와 아카이브 콘텐츠 목록을 생성합니다. |
수준 4 | 현재는 수준 3과 동일한 정보를 제공합니다. |
수준 5 | 위 수준에서 언급한 모든 정보를 생성하고 Docker 내보내기 메시지도 제공합니다. |
프로세스
더 세부적인 출력을 제공하기 위해
BuildConfig
에서sourceStrategy
또는dockerStrategy
의 일부로BUILD_LOGLEVEL
환경 변수를 전달합니다.sourceStrategy: ... env: - name: "BUILD_LOGLEVEL" value: "2"
sourceStrategy: ... env: - name: "BUILD_LOGLEVEL" value: "2"
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이 값을 원하는 로그 수준으로 조정합니다.
8장. 빌드 트리거 및 수정 링크 복사링크가 클립보드에 복사되었습니다!
다음 섹션에서는 빌드 후크를 사용하여 빌드를 트리거하고 수정하는 방법을 간략하게 설명합니다.
8.1. 빌드 트리거 링크 복사링크가 클립보드에 복사되었습니다!
BuildConfig
를 정의할 때 BuildConfig
를 실행해야 하는 상황을 제어하기 위해 트리거를 정의할 수 있습니다. 다음과 같은 빌드 트리거를 사용할 수 있습니다.
- Webhook
- 이미지 변경
- 구성 변경
8.1.1. Webhook 트리거 링크 복사링크가 클립보드에 복사되었습니다!
Webhook 트리거를 사용하면 OpenShift Container Platform API 끝점에 요청을 전송하여 새 빌드를 트리거할 수 있습니다. 이러한 트리거는 GitHub, GitLab, Bitbucket 또는 Generic Webhook를 사용하여 정의할 수 있습니다.
현재는 OpenShift Container Platform Webhook에서 Git 기반 SCM(소스 코드 관리) 시스템 각각에 대해 유사한 버전의 내보내기 이벤트만 지원합니다. 기타 모든 이벤트 유형은 무시됩니다.
내보내기 이벤트가 처리되면 OpenShift Container Platform 컨트롤 플레인 호스트에서 이벤트 내부의 분기 참조가 해당 BuildConfig
의 분기 참조와 일치하는지 확인합니다. 일치하는 경우 OpenShift Container Platform 빌드의 Webhook 이벤트에 언급된 커밋 참조가 정확한지 확인합니다. 일치하지 않는 경우에는 빌드가 트리거되지 않습니다.
oc new-app
및 oc new-build
는 GitHub 및 Generic Webhook 트리거를 자동으로 생성하지만 필요한 다른 Webhook 트리거는 수동으로 추가해야 합니다. 트리거 설정을 통해 트리거를 수동으로 추가할 수 있습니다.
모든 Webhook에 대해 WebHookSecretKey
라는 키와 Webhook를 호출할 때 제공할 값이 되는 값을 사용하여 보안을 정의해야 합니다. 그런 다음 Webhook 정의에서 보안을 참조해야 합니다. 보안을 사용하면 URL의 고유성이 보장되어 다른 사용자가 빌드를 트리거할 수 없습니다. 키 값은 Webhook 호출 중 제공되는 보안과 비교됩니다.
예를 들면 아래 예제에는 mysecret
이라는 보안에 대한 참조가 포함된 GitHub Webhook가 있습니다.
type: "GitHub" github: secretReference: name: "mysecret"
type: "GitHub"
github:
secretReference:
name: "mysecret"
그런 다음 보안이 다음과 같이 정의됩니다. 보안 값은 Secret
오브젝트의 data
필드에 필요하므로 base64로 인코딩됩니다.
8.1.1.1. system:webhook 역할 바인딩에 인증되지 않은 사용자 추가 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 특정 네임스페이스의 OpenShift Container Platform에서 인증되지 않은 사용자를 system:webhook
역할 바인딩에 추가할 수 있습니다. system:webhook
역할 바인딩을 사용하면 OpenShift Container Platform 인증 메커니즘을 사용하지 않는 외부 시스템에서 빌드를 트리거할 수 있습니다. 인증되지 않은 사용자는 기본적으로 비공용 역할 바인딩에 액세스할 수 없습니다. 이는 4.16 이전 버전의 OpenShift Container Platform에서 변경되었습니다.
GitHub, GitLab, Bitbucket에서 빌드를 성공적으로 트리거하려면 인증되지 않은 사용자를 system:webhook
역할 바인딩에 추가해야 합니다.
인증되지 않은 사용자가 클러스터에 액세스할 수 있도록 허용해야 하는 경우 각 필수 네임스페이스에서 인증되지 않은 사용자를 system:webhook
역할 바인딩에 추가하여 수행할 수 있습니다. 이 방법은 인증되지 않은 사용자를 system:webhook
클러스터 역할 바인딩에 추가하는 것보다 더 안전합니다. 그러나 네임스페이스가 많은 경우 인증되지 않은 사용자를 system:webhook
클러스터 역할 바인딩에 추가하여 모든 네임스페이스에 변경 사항을 적용할 수 있습니다.
인증되지 않은 액세스를 수정할 때 항상 조직의 보안 표준을 준수하는지 확인하십시오.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
프로세스
add-webhooks-unauth.yaml
이라는 YAML 파일을 생성하고 다음 콘텐츠를 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
BuildConfig
의 네임스페이스입니다.
다음 명령을 실행하여 구성을 적용합니다.
oc apply -f add-webhooks-unauth.yaml
$ oc apply -f add-webhooks-unauth.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.1.1.2. GitHub Webhook 사용 링크 복사링크가 클립보드에 복사되었습니다!
GitHub Webhook는 리포지토리를 업데이트할 때 GitHub에서 생성하는 호출을 처리합니다. 트리거를 정의할 때는 보안을 지정해야 하는데, 보안은 Webhook를 구성할 때 GitHub에 제공하는 URL의 일부입니다.
GitHub Webhook 정의의 예:
type: "GitHub" github: secretReference: name: "mysecret"
type: "GitHub"
github:
secretReference:
name: "mysecret"
Webhook 트리거 구성에 사용되는 보안은 GitHub UI에서 Webhook를 구성할 때 표시되는 secret
필드와 동일하지 않습니다. Webhook 트리거 구성의 시크릿으로 인해 Webhook URL을 고유하고 예측하기가 어렵습니다. GitHub UI에 구성된 시크릿은 X-Hub-Signature
헤더로 전송되는 본문의 HMAC 16x 다이제스트를 생성하는 데 사용되는 선택적 문자열 필드입니다.
페이로드 URL은 oc describe
명령에 의해 GitHub Webhook URL로 반환되고(Webhook URL 표시 참조) 다음과 같이 구성됩니다.
출력 예
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
사전 요구 사항
-
GitHub 리포지토리에서
BuildConfig
를 생성합니다. -
system:unauthenticated
는 필수 네임스페이스의system:webhook
역할에 액세스할 수 있습니다. 또는system:unauthenticated
에서system:webhook
클러스터 역할에 액세스할 수 있습니다.
프로세스
GitHub Webhook를 구성합니다.
GitHub 리포지토리에서
BuildConfig
오브젝트를 생성한 후 다음 명령을 실행합니다.oc describe bc/<name_of_your_BuildConfig>
$ oc describe bc/<name_of_your_BuildConfig>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 Webhook GitHub URL을 생성합니다.
출력 예
https://api.starter-us-east-1.openshift.com:443/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
https://api.starter-us-east-1.openshift.com:443/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - GitHub 웹 콘솔에서 이 URL을 잘라내어 GitHub에 붙여넣습니다.
- GitHub 리포지토리의 설정 → Webhook에서 Webhook 추가를 선택합니다.
- URL 출력을 페이로드 URL 필드에 붙여넣습니다.
-
GitHub의 기본
application/x-www-form-urlencoded
에서 콘텐츠 유형을application/json
으로 변경합니다. Webhook 추가를 클릭합니다.
GitHub에서 Webhook가 성공적으로 구성되었음을 알리는 메시지가 표시됩니다.
이제 GitHub 리포지토리에 변경 사항을 내보내면 새 빌드가 자동으로 시작되고 빌드가 성공하면 새 배포가 시작됩니다.
참고Gogs는 GitHub와 동일한 Webhook 페이로드 형식을 지원합니다. 따라서 Gogs 서버를 사용하는 경우
BuildConfig
에 GitHub Webhook 트리거를 정의하고 Gogs 서버에서도 트리거할 수 있습니다.
payload.json
과 같은 유효한 JSON 페이로드가 포함된 파일이 있는 경우 다음curl
명령을 사용하여 Webhook를 수동으로 트리거할 수 있습니다.curl -H "X-GitHub-Event: push" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
$ curl -H "X-GitHub-Event: push" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -k
인수는 API 서버에 올바르게 서명된 인증서가 없는 경우에만 필요합니다.
GitHub Webhook 이벤트의 ref
값이 BuildConfig
리소스의 source.git
필드에 지정된 ref
값과 일치하는 경우에만 빌드가 트리거됩니다.
8.1.1.3. GitLab Webhook 사용 링크 복사링크가 클립보드에 복사되었습니다!
GitLab Webhook는 리포지토리를 업데이트할 때 GitLab에서 생성하는 호출을 처리합니다. GitHub 트리거와 마찬가지로 보안을 지정해야 합니다. 다음 예제는 BuildConfig
내의 트리거 정의 YAML입니다.
type: "GitLab" gitlab: secretReference: name: "mysecret"
type: "GitLab"
gitlab:
secretReference:
name: "mysecret"
페이로드 URL은 oc describe
명령을 통해 GitLab Webhook URL로 반환되고 다음과 같이 구조화됩니다.
출력 예
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
사전 요구 사항
-
system:unauthenticated
는 필수 네임스페이스의system:webhook
역할에 액세스할 수 있습니다. 또는system:unauthenticated
에서system:webhook
클러스터 역할에 액세스할 수 있습니다.
프로세스
GitLab Webhook를 구성합니다.
다음 명령을 입력하여 Webhook URL을 가져옵니다.
oc describe bc <name>
$ oc describe bc <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Webhook URL을 복사하여
<secret>
을 보안 값으로 교체합니다. - GitLab 설정 지침에 따라 Webhook URL을 GitLab 리포지토리 설정에 붙여넣습니다.
payload.json
과 같은 유효한 JSON 페이로드가 포함된 파일이 있는 경우 다음curl
명령을 사용하여 Webhook를 수동으로 트리거할 수 있습니다.curl -H "X-GitLab-Event: Push Hook" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
$ curl -H "X-GitLab-Event: Push Hook" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -k
인수는 API 서버에 올바르게 서명된 인증서가 없는 경우에만 필요합니다.
8.1.1.4. Bitbucket Webhook 사용 링크 복사링크가 클립보드에 복사되었습니다!
Bitbucket Webhook는 리포지토리가 업데이트될 때 Bitbucket에서 만든 호출을 처리합니다. GitHub 및 GitLab 트리거와 유사하게 보안을 지정해야 합니다. 다음 예제는 BuildConfig
내의 트리거 정의 YAML입니다.
type: "Bitbucket" bitbucket: secretReference: name: "mysecret"
type: "Bitbucket"
bitbucket:
secretReference:
name: "mysecret"
페이로드 URL은 oc describe
명령을 통해 Bitbucket Webhook URL로 반환되고 다음과 같이 구조화됩니다.
출력 예
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
사전 요구 사항
-
system:unauthenticated
는 필수 네임스페이스의system:webhook
역할에 액세스할 수 있습니다. 또는system:unauthenticated
에서system:webhook
클러스터 역할에 액세스할 수 있습니다.
프로세스
Bitbucket Webhook를 구성합니다.
다음 명령을 입력하여 Webhook URL을 가져옵니다.
oc describe bc <name>
$ oc describe bc <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Webhook URL을 복사하여
<secret>
을 보안 값으로 교체합니다. - Bitbucket 설정 지침에 따라 Webhook URL을 Bitbucket 리포지토리 설정에 붙여넣습니다.
payload.json
과 같은 유효한 JSON 페이로드가 포함된 파일이 있는 경우 다음curl
명령을 입력하여 Webhook를 수동으로 트리거할 수 있습니다.curl -H "X-Event-Key: repo:push" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
$ curl -H "X-Event-Key: repo:push" -H "Content-Type: application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -k
인수는 API 서버에 올바르게 서명된 인증서가 없는 경우에만 필요합니다.
8.1.1.5. 일반 Webhook 사용 링크 복사링크가 클립보드에 복사되었습니다!
일반 Webhook는 웹 요청을 수행할 수 있는 모든 시스템에서 호출됩니다. 다른 Webhook와 마찬가지로 보안을 지정해야 하는데 보안은 호출자가 빌드를 트리거하는 데 사용해야 하는 URL의 일부입니다. 보안을 사용하면 URL의 고유성이 보장되어 다른 사용자가 빌드를 트리거할 수 없습니다. 다음은 BuildConfig
내 트리거 정의 YAML의 예입니다.
type: "Generic" generic: secretReference: name: "mysecret" allowEnv: true
type: "Generic"
generic:
secretReference:
name: "mysecret"
allowEnv: true
- 1
- 일반 Webhook에서 환경 변수를 전달하도록 허용하려면
true
로 설정합니다.
프로세스
호출자를 설정하려면 빌드에 대한 일반 웹 후크 끝점의 URL을 호출 시스템에 제공합니다.
일반 Webhook 끝점 URL의 예
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 호출자는 Webhook를
POST
작업으로 호출해야 합니다.Webhook를 수동으로 호출하려면 다음
curl
명령을 입력합니다.curl -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
$ curl -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP 동사를
POST
로 설정해야 합니다. 비보안-k
플래그는 인증서 검증을 무시하도록 지정됩니다. 클러스터에 올바르게 서명된 인증서가 있는 경우 이 두 번째 플래그는 필요하지 않습니다.끝점은 다음 형식을 사용하여 선택적 페이로드를 허용할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
BuildConfig
환경 변수와 유사하게 여기에 정의된 환경 변수도 빌드에 사용할 수 있습니다. 이러한 변수가BuildConfig
환경 변수와 충돌하는 경우 해당 변수가 우선합니다. 기본적으로 Webhook에서 전달하는 환경 변수는 무시됩니다. 이 동작을 활성화하려면 Webhook 정의에서allowEnv
필드를true
로 설정합니다.
curl
을 사용하여 이 페이로드를 전달하려면payload_file.yaml
이라는 파일에 정의하고 다음 명령을 실행합니다.curl -H "Content-Type: application/yaml" --data-binary @payload_file.yaml -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
$ curl -H "Content-Type: application/yaml" --data-binary @payload_file.yaml -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인수는 위 예제와 동일하고 헤더와 페이로드가 추가되었습니다.
-H
인수는 페이로드 형식에 따라Content-Type
헤더를application/yaml
또는application/json
으로 설정합니다.--data-binary
인수는POST
요청을 사용하여 온전한 새 줄로 바이너리 페이로드를 보내는 데 사용됩니다.
OpenShift Container Platform에서는 유효하지 않은 요청 페이로드(예: 유효하지 않은 콘텐츠 유형, 구문 분석할 수 없거나 유효하지 않은 콘텐츠 등)가 제공되는 경우에도 일반 Webhook에서 빌드를 트리거할 수 있습니다. 이 동작은 이전 버전과의 호환성을 위해 유지됩니다. 유효하지 않은 요청 페이로드가 제공되면 OpenShift Container Platform에서 HTTP 200 OK
응답의 일부로 JSON 형식의 알림을 반환합니다.
8.1.1.6. Webhook URL 표시 링크 복사링크가 클립보드에 복사되었습니다!
oc describe
명령을 사용하여 빌드 구성과 관련된 Webhook URL을 표시할 수 있습니다. 명령에서 Webhook URL을 표시하지 않으면 현재 해당 빌드 구성에 Webhook 트리거가 정의되지 않습니다.
프로세스
-
BuildConfig
와 관련된 Webhook URL을 표시하려면 다음 명령을 실행합니다.
oc describe bc <name>
$ oc describe bc <name>
8.1.2. 이미지 변경 트리거 사용 링크 복사링크가 클립보드에 복사되었습니다!
개발자는 기본 이미지가 변경될 때마다 자동으로 실행되도록 빌드를 구성할 수 있습니다.
이미지 변경 트리거를 사용하여 업스트림 이미지의 새 버전을 사용할 수 있을 때 빌드를 자동으로 호출할 수 있습니다. 예를 들어 빌드가 RHEL 이미지를 기반으로 하는 경우 해당 빌드를 트리거하여 RHEL 이미지를 변경할 때마다 실행할 수 있습니다. 결과적으로 애플리케이션 이미지는 항상 최신 RHEL 기본 이미지에서 실행됩니다.
v1 컨테이너 레지스트리의 컨테이너 이미지를 가리키는 이미지 스트림은 이미지 스트림 태그를 사용할 수 있을 때 빌드를 한 번만 트리거하고 후속 이미지 업데이트에서는 빌드를 트리거하지 않습니다. 이는 v1 컨테이너 레지스트리에서 고유하게 확인할 수 있는 이미지가 없기 때문입니다.
프로세스
트리거로 사용하려는 업스트림 이미지를 가리키는
ImageStream
을 정의합니다.kind: "ImageStream" apiVersion: "v1" metadata: name: "ruby-20-centos7"
kind: "ImageStream" apiVersion: "v1" metadata: name: "ruby-20-centos7"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이는
<system-registry>/<namespace>/ruby-20-centos7
에 있는 컨테이너 이미지 리포지토리에 연결된 이미지 스트림을 정의합니다.<system-registry>
는 OpenShift Container Platform에서 실행 중인docker-registry
라는 이름을 사용하여 서비스로 정의됩니다.이미지 스트림이 빌드의 기본 이미지인 경우 빌드 전략의
from
필드를ImageStream
을 가리키도록 설정합니다.strategy: sourceStrategy: from: kind: "ImageStreamTag" name: "ruby-20-centos7:latest"
strategy: sourceStrategy: from: kind: "ImageStreamTag" name: "ruby-20-centos7:latest"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 경우
sourceStrategy
정의에서는 이 네임스페이스 내에 있는ruby-20-centos7
이라는 이미지 스트림의latest
태그를 사용합니다.ImageStreams
를 가리키는 하나 이상의 트리거를 사용하여 빌드를 정의합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
전략 이미지 스트림에 이미지 변경 트리거를 사용하는 경우 생성된 빌드에 해당 태그와 일치하는 최신 이미지를 가리키는 변경 불가능한 Docker 태그가 제공됩니다. 이 새 이미지 참조는 빌드에 대해 실행할 때 전략에서 사용합니다.
전략 이미지 스트림을 참조하지 않는 다른 이미지 변경 트리거의 경우 새 빌드가 시작되지만 빌드 전략은 고유 이미지 참조로 업데이트되지 않습니다.
이 예제에는 전략에 대한 이미지 변경 트리거가 있으므로 결과 빌드는 다음과 같습니다.
strategy: sourceStrategy: from: kind: "DockerImage" name: "172.30.17.3:5001/mynamespace/ruby-20-centos7:<immutableid>"
strategy:
sourceStrategy:
from:
kind: "DockerImage"
name: "172.30.17.3:5001/mynamespace/ruby-20-centos7:<immutableid>"
그 결과 트리거된 빌드는 리포지토리로 방금 푸시된 새 이미지를 사용하고 동일한 입력을 사용하여 빌드를 다시 실행할 수 있습니다.
이미지 변경 트리거를 일시 정지하여 빌드를 시작하기 전에 참조 이미지 스트림에 대한 다양한 변경 사항을 허용할 수 있습니다. 처음에 ImageChangeTrigger
를 BuildConfig
에 추가할 때 빌드가 즉시 트리거되지 않도록 paused
특성을 true로 설정할 수도 있습니다.
모든 Strategy
유형의 이미지 필드를 설정하는 것 외에 사용자 지정 빌드의 경우 OPENSHIFT_CUSTOM_BUILD_BASE_IMAGE
환경 변수도 확인합니다. 존재하지 않는 경우 변경 불가능한 이미지 참조를 사용하여 생성됩니다. 존재하는 경우 변경 불가능한 이미지 참조를 사용하여 업데이트됩니다.
Webhook 트리거 또는 수동 요청으로 인해 빌드가 트리거되는 경우 생성된 빌드는 Strategy
에서 참조한 ImageStream
의 확인된 <immutableid>
를 사용합니다. 그러면 쉽게 재현할 수 있도록 일관된 이미지 태그를 사용하여 빌드를 수행할 수 있습니다.
8.1.3. 빌드의 이미지 변경 트리거 확인 링크 복사링크가 클립보드에 복사되었습니다!
개발자는 이미지 변경 트리거가 있는 경우 마지막 빌드를 시작한 이미지 변경 사항을 확인할 수 있습니다. 이는 빌드를 디버깅하거나 문제 해결하는 데 유용할 수 있습니다.
BuildConfig
예
이 예제에서는 이미지 변경 트리거와 관련이 없는 요소를 생략합니다.
사전 요구 사항
- 여러 이미지 변경 트리거를 구성했습니다. 이러한 트리거는 하나 이상의 빌드를 트리거했습니다.
프로세스
BuildConfig
CR의status.imageChangeTriggers
에서는 최신 타임 스탬프가 있는lastTriggerTime
을 식별합니다.ImageChangeTriggerStatus
Then you use the `name` and `namespace` from that build to find the corresponding image change trigger in `buildConfig.spec.triggers`.
Then you use the `name` and `namespace` from that build to find the corresponding image change trigger in `buildConfig.spec.triggers`.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
imageChangeTriggers에서
타임스탬프를 비교하여 최신 정보를 식별합니다.
이미지 변경 트리거
빌드 구성에서 buildConfig.spec.triggers
는 빌드 트리거 정책인 BuildTriggerPolicy
의 배열입니다.
각 BuildTriggerPolicy
에는 type
필드와 포인터 필드 세트가 있습니다. 각 포인터 필드는 type
필드에 허용된 값 중 하나에 해당합니다. 따라서 BuildTriggerPolicy
를 하나의 포인터 필드로만 설정할 수 있습니다.
이미지 변경 트리거의 경우 type
값은 ImageChange
입니다. 그런 다음 imageChange
필드는 다음 필드가 있는 ImageChangeTrigger
오브젝트의 포인터입니다.
-
lastTriggeredImageID
: 예제에 표시되지 않는 이 필드는 OpenShift Container Platform 4.8에서 더 이상 사용되지 않으며 향후 릴리스에서 무시됩니다. 이BuildConfig
에서 마지막 빌드가 트리거된 경우ImageStreamTag
에 대한 확인된 이미지 참조가 포함됩니다. -
paused
: 예제에 표시되지 않는 이 필드를 사용하여 이 특정 이미지 변경 트리거를 일시적으로 비활성화할 수 있습니다. -
from
: 이 필드를 사용하여 이 이미지 변경 트리거를 구동하는ImageStreamTag
를 참조합니다. 유형은 핵심 Kubernetes 유형인OwnerReference
입니다.
from
필드에는 다음과 같은 참고 필드가 있습니다.
-
kind
: 이미지 변경 트리거의 경우 지원되는 유일한 값은ImageStreamTag
입니다. -
namespace
: 이 필드를 사용하여ImageStreamTag
의 네임스페이스를 지정합니다. -
name
: 이 필드를 사용하여ImageStreamTag
를 지정합니다.
이미지 변경 트리거 상태
빌드 구성에서 buildConfig.status.imageChangeTriggers
는 ImageChangeTriggerStatus
요소의 배열입니다. 각 ImageChangeTriggerStatus
요소에는 앞의 예에서 표시된 from
요소가 포함됩니다.
,
lastTriggeredImageID
및 lastTriggerTime
가장 최근의 lastTriggerTime
이 있는 ImageChangeTriggerStatus
가 가장 최근 빌드를 트리거했습니다. 해당 name
및 namespace
를 사용하여 빌드를 트리거한 buildConfig.spec.triggers
에서 이미지 변경 트리거를 식별합니다.
가장 최근 타임스탬프를 사용하는 lastTriggerTime
은 마지막 빌드의 ImageChangeTriggerStatus
를 나타냅니다. 이 ImageChangeTriggerStatus
에는 빌드를 트리거한 buildConfig.spec.triggers
의 이미지 변경 트리거와 동일한 name
과 namespace
가 있습니다.
8.1.4. 구성 변경 트리거 링크 복사링크가 클립보드에 복사되었습니다!
구성 변경 트리거를 사용하면 새 BuildConfig
가 생성되는 즉시 빌드가 자동으로 호출됩니다.
다음은 BuildConfig
내 트리거 정의 YAML의 예입니다.
type: "ConfigChange"
type: "ConfigChange"
구성 변경 트리거는 현재 새 BuildConfig
를 생성할 때만 작동합니다. 향후 릴리스에서는 BuildConfig
가 업데이트될 때마다 구성 변경 트리거도 빌드를 시작할 수 있습니다.
8.1.4.1. 트리거 수동 설정 링크 복사링크가 클립보드에 복사되었습니다!
oc set triggers
를 사용하여 빌드 구성에서 트리거를 추가 및 제거할 수 있습니다.
프로세스
빌드 구성에 GitHub Webhook 트리거를 설정하려면 다음 명령을 입력합니다.
oc set triggers bc <name> --from-github
$ oc set triggers bc <name> --from-github
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이미지 변경 트리거를 설정하려면 다음 명령을 입력합니다.
oc set triggers bc <name> --from-image='<image>'
$ oc set triggers bc <name> --from-image='<image>'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 트리거를 제거하려면 다음 명령을 입력합니다.
oc set triggers bc <name> --from-bitbucket --remove
$ oc set triggers bc <name> --from-bitbucket --remove
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Webhook 트리거가 이미 있는 경우 해당 트리거를 다시 추가하면 Webhook 보안이 다시 생성됩니다.
자세한 내용은 다음 명령을 입력하여 도움말 설명서를 참조하십시오.
oc set triggers --help
$ oc set triggers --help
8.2. 빌드 후크 링크 복사링크가 클립보드에 복사되었습니다!
빌드 후크를 사용하면 빌드 프로세스에 동작을 삽입할 수 있습니다.
BuildConfig
오브젝트의 postCommit
필드는 빌드 출력 이미지를 실행하는 임시 컨테이너 내에서 명령을 실행합니다. 후크는 이미지의 마지막 계층을 커밋한 직후 그리고 이미지를 레지스트리로 푸시되기 전에 실행됩니다.
현재 작업 디렉터리는 이미지의 WORKDIR
로 설정되어 있으며 이는 컨테이너 이미지의 기본 작업 디렉터리입니다. 대부분의 이미지에서 이 디렉터리는 소스 코드가 있는 위치입니다.
스크립트 또는 명령에서 0이 아닌 종료 코드를 반환하거나 임시 컨테이너를 시작하지 못하는 경우 후크가 실패합니다. 후크가 실패하면 빌드가 실패로 표시되고 이미지를 레지스트리로 푸쉬하지 않습니다. 실패 이유는 빌드 로그를 확인하여 검사할 수 있습니다.
빌드 후크를 사용하면 빌드를 완료로 표시하고 레지스트리에 이미지를 제공하기 전에 단위 테스트를 실행하여 이미지를 확인할 수 있습니다. 모든 테스트를 통과하고 테스트 실행기에서 종료 코드 0
을 반환하면 빌드가 성공으로 표시됩니다. 실패한 테스트가 있는 경우 빌드가 실패로 표시됩니다. 어떠한 경우든 빌드 로그에는 테스트 실행기의 출력이 포함되므로 실패한 테스트를 확인할 수 있습니다.
postCommit
후크는 테스트 실행뿐만 아니라 다른 명령에도 사용할 수 있습니다. 이 후크는 임시 컨테이너에서 실행되기 때문에 후크에 의한 변경 사항은 지속되지 않습니다. 즉 후크를 실행해도 최종 이미지에는 영향을 미치지 않습니다. 이러한 동작으로 인해 특히 자동으로 삭제되어 최종 이미지에 존재하지 않는 테스트 종속 항목을 설치하고 사용할 수 있습니다.
8.2.1. post-commit 빌드 후크 구성 링크 복사링크가 클립보드에 복사되었습니다!
빌드 후 후크를 구성하는 방법은 다양합니다. 다음 예제에서 모든 양식은 동일하고 bundle exec rake test --verbose
를 실행합니다.
프로세스
다음 옵션 중 하나를 사용하여 빌드 후 후크를 구성합니다.
Expand 옵션 설명 쉘 스크립트
postCommit: script: "bundle exec rake test --verbose"
postCommit: script: "bundle exec rake test --verbose"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow script
값은/bin/sh -ic
를 사용하여 실행할 쉘 스크립트입니다. 쉘 스크립트가 빌드 후크를 실행하는 데 적합한 경우 이 옵션을 사용합니다. 예를 들면 위와 같이 단위 테스트를 실행하는 경우입니다. 이미지 항목 지점을 제어하거나 이미지에/bin/sh
가 없는 경우command
또는args
또는 둘 다를 사용합니다.참고추가
-i
플래그는 CentOS 및 RHEL 이미지 작업 환경을 개선하기 위해 도입되었으며 향후 릴리스에서 제거될 수 있습니다.이미지 진입점으로의 명령
postCommit: command: ["/bin/bash", "-c", "bundle exec rake test --verbose"]
postCommit: command: ["/bin/bash", "-c", "bundle exec rake test --verbose"]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 양식에서
command
는 실행할 명령에 해당하며 Dockerfile 참조에 설명된 exec 형식의 이미지 진입점을 덮어씁니다. 이 명령은 이미지에/bin/sh
가 없거나 쉘을 사용하지 않는 경우 필요합니다. 다른 모든 경우에는script
를 사용하는 것이 더 편리할 수 있습니다.인수가 있는 명령
postCommit: command: ["bundle", "exec", "rake", "test"] args: ["--verbose"]
postCommit: command: ["bundle", "exec", "rake", "test"] args: ["--verbose"]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 형식은
command
에 인수를 추가하는 것과 동일합니다.
script
와 command
를 동시에 제공하면 유효하지 않은 빌드 후크가 생성됩니다.
8.2.2. CLI를 사용하여 post-commit 빌드 후크 설정 링크 복사링크가 클립보드에 복사되었습니다!
oc set build-hook
명령은 빌드 설정에 빌드 후크를 설정하는 데 사용할 수 있습니다.
프로세스
다음 작업 중 하나를 완료합니다.
명령을 post-commit 빌드 후크로 설정하려면 다음 명령을 입력합니다.
oc set build-hook bc/mybc \ --post-commit \ --command \ -- bundle exec rake test --verbose
$ oc set build-hook bc/mybc \ --post-commit \ --command \ -- bundle exec rake test --verbose
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 스크립트를 post-commit 빌드 후크로 설정하려면 다음 명령을 입력합니다.
oc set build-hook bc/mybc --post-commit --script="bundle exec rake test --verbose"
$ oc set build-hook bc/mybc --post-commit --script="bundle exec rake test --verbose"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9장. 고급 빌드 수행 링크 복사링크가 클립보드에 복사되었습니다!
빌드 리소스 및 최대 기간을 설정하고, 노드에 빌드를 할당, 빌드 연결, 빌드 정리, 빌드 실행 정책을 구성할 수 있습니다.
9.1. 빌드 리소스 설정 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 빌드는 Pod에서 메모리 및 CPU와 같이 바인딩되지 않은 리소스를 사용하여 완료합니다. 이러한 리소스는 제한될 수 있습니다.
프로세스
다음 두 가지 방법으로 리소스 사용을 제한할 수 있습니다.
- 프로젝트의 기본 컨테이너 제한에 리소스 제한을 지정하여 리소스 사용 제한을 제한합니다.
리소스 제한을 빌드 구성의 일부로 지정하여 리소스 사용을 제한합니다.
다음 예에서 각
resources
,cpu
및memory
매개변수는 선택 사항입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러나 프로젝트에 할당량을 정의한 경우 다음 두 항목 중 하나가 필요합니다.
requests
가 명시적으로 설정된resources
섹션:resources: requests: cpu: "100m" memory: "256Mi"
resources: requests:
1 cpu: "100m" memory: "256Mi"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
requests
오브젝트에 할당량의 리소스 목록에 해당하는 리소스 목록이 포함되어 있습니다.
프로젝트에 정의된 제한 범위:
LimitRange
오브젝트의 기본값은 빌드 프로세스 중 생성된 Pod에 적용됩니다.그러지 않으면 할당량을 충족하지 못하여 빌드 Pod 생성이 실패합니다.
9.2. 최대 기간 설정 링크 복사링크가 클립보드에 복사되었습니다!
BuildConfig
오브젝트를 정의할 때는 completionDeadlineSeconds
필드를 설정하여 최대 기간을 정의할 수 있습니다. 이는 초 단위로 지정되며 기본적으로 설정되어 있지 않습니다. 설정하지 않으면 최대 기간이 적용되지 않습니다.
최대 기간은 시스템에서 빌드 Pod를 예약하는 시점부터 계산되며 빌더 이미지를 가져오는 데 필요한 시간을 포함하여 활성화할 수 있는 기간을 정의합니다. 지정된 타임아웃에 도달하면 OpenShift Container Platform에서 빌드를 종료합니다.
프로세스
최대 기간을 설정하려면
BuildConfig
에서completionDeadlineSeconds
를 지정합니다. 다음 예제에서는completionDeadlineSeconds
필드를 30분으로 지정하는BuildConfig
의 일부를 보여줍니다.spec: completionDeadlineSeconds: 1800
spec: completionDeadlineSeconds: 1800
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
파이프라인 전략 옵션에서는 이 설정이 지원되지 않습니다.
9.3. 특정 노드에 빌드 할당 링크 복사링크가 클립보드에 복사되었습니다!
빌드 구성의 nodeSelector
필드에 라벨을 지정하면 빌드가 특정 노드에서 실행되도록 타겟을 지정할 수 있습니다. nodeSelector
값은 빌드 Pod를 예약할 때 Node
라벨과 일치하는 일련의 키-값 쌍입니다.
nodeSelector
값은 클러스터 전체 기본값 및 덮어쓰기 값으로도 제어할 수 있습니다. 기본값은 빌드 구성에서 nodeSelector
에 키-값 쌍을 정의하지 않고 명시적으로 비어 있는 맵 값(nodeSelector:{}
)도 정의하지 않는 경우에만 적용됩니다. 덮어쓰기 값은 키에 따라 빌드 구성의 값을 대체합니다.
지정된 NodeSelector
가 해당 라벨이 있는 노드와 일치하지 않는 경우 빌드는 계속 Pending
상태로 무기한 유지됩니다.
프로세스
BuildConfig
의nodeSelector
필드에 라벨을 할당하여 특정 노드에서 실행할 빌드를 할당합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이 빌드 구성과 관련된 빌드는
key1=value2
및key2=value2
라벨이 있는 노드에서만 실행됩니다.
9.4. 연결된 빌드 링크 복사링크가 클립보드에 복사되었습니다!
Go, C, C++, Java와 같이 컴파일된 언어의 경우 애플리케이션 이미지에서 컴파일하는 데 필요한 종속 항목을 포함하면 이미지 크기가 늘어나거나 악용될 수 있는 취약점이 발생할 수 있습니다.
이러한 문제를 방지하기 위해 두 개의 빌드를 함께 연결할 수 있습니다. 하나는 컴파일된 아티팩트를 생성하는 빌드이고 다른 하나는 해당 아티팩트를 실행하는 별도의 이미지에 아티팩트를 배치하는 빌드입니다.
다음 예제에서는 S2I(source-to-image) 빌드가 Docker 빌드와 결합되어 아티팩트를 컴파일하고 해당 아티팩트는 별도의 런타임 이미지에 배치됩니다.
이 예제에서는 S2I 빌드와 Docker 빌드를 연결하지만 첫 번째 빌드에서는 원하는 아티팩트를 포함하는 이미지를 생성하는 모든 전략을 사용할 수 있고, 두 번째 빌드에서는 이미지의 입력 콘텐츠를 소비하는 모든 전략을 사용할 수 있습니다.
첫 번째 빌드에서는 애플리케이션 소스를 가져와서 WAR
파일이 포함된 이미지를 생성합니다. 이미지는 artifact-image
이미지 스트림으로 푸쉬합니다. 출력 아티팩트의 경로는 사용된 S2I 빌더의 assemble
스크립트에 따라 달라집니다. 다음 예제의 경우 /wildfly/standalone/deployments/ROOT.war
로 출력됩니다.
두 번째 빌드에서는 이미지 소스와 첫 번째 빌드의 출력 이미지 내부에 있는 WAR 파일에 대한 경로를 사용합니다. 인라인 dockerfile
은 해당 WAR
파일을 런타임 이미지에 복사합니다.
이 설정으로 인해 두 번째 빌드의 출력 이미지에 WAR
파일을 생성하는 데 필요한 빌드 툴을 포함하지 않아도 됩니다. 또한 두 번째 빌드에는 이미지 변경 트리거가 포함되어 있기 때문에 첫 번째 빌드가 실행되어 바이너리 아티팩트가 포함된 새 이미지를 생성할 때마다 두 번째 빌드가 자동으로 트리거되어 해당 아티팩트가 포함된 런타임 이미지를 생성합니다. 따라서 두 빌드 모두 두 단계가 있는 단일 빌드로 작동합니다.
9.5. 빌드 정리 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 라이프사이클이 완료된 빌드는 무기한 유지됩니다. 유지되는 이전 빌드의 수를 제한할 수 있습니다.
프로세스
BuildConfig
의successfulBuildsHistoryLimit
또는failedBuildsHistoryLimit
에 양의 정수 값을 제공하여 유지되는 이전 빌드의 수를 제한합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 작업 중 하나로 빌드 정리를 트리거합니다.
- 빌드 구성 업데이트
- 빌드가 라이프사이클을 완료할 때까지 대기
빌드는 생성 타임스탬프에 따라 정렬되고 가장 오래된 빌드가 가장 먼저 정리됩니다.
관리자는 'oc adm' 오브젝트 정리 명령을 사용하여 수동으로 빌드를 정리할 수 있습니다.
9.6. 빌드 정책 실행 링크 복사링크가 클립보드에 복사되었습니다!
빌드 실행 정책은 빌드 구성에서 생성한 빌드를 실행할 순서를 지정합니다. 이 작업은 Build
사양의 spec
섹션에서 runPolicy
필드 값을 변경하여 수행할 수 있습니다.
다음과 같이 기존 빌드 구성의 runPolicy
값을 변경할 수도 있습니다.
-
Parallel
을Serial
또는SerialLatestOnly
로 변경하고 이 구성에서 새 빌드를 트리거하면 직렬 빌드는 단독으로만 실행할 수 있으므로 모든 병렬 빌드가 완료될 때까지 새 빌드가 대기합니다. -
Serial
을SerialLatestOnly
로 변경하고 새 빌드를 트리거하면 현재 실행 중인 빌드와 최근 생성된 빌드를 제외하고 대기열에 있는 기존 빌드가 모두 취소됩니다. 최신 빌드는 다음에 실행됩니다.
10장. 빌드에서 Red Hat 서브스크립션 사용 링크 복사링크가 클립보드에 복사되었습니다!
다음 섹션을 사용하여 OpenShift Container Platform 빌드에 Red Hat 서브스크립션 콘텐츠를 설치합니다.
10.1. Red Hat Universal Base Image에 대한 이미지 스트림 태그 생성 링크 복사링크가 클립보드에 복사되었습니다!
빌드에 RHEL(Red Hat Enterprise Linux) 패키지를 설치하려면 이미지 스트림 태그를 생성하여 Red Hat UBI(Universal Base Image)를 참조할 수 있습니다.
클러스터의 모든 프로젝트에서 UBI를 사용할 수 있도록 하려면 openshift
네임스페이스에 이미지 스트림 태그를 추가합니다. 또는 특정 프로젝트에서 사용할 수 있도록 하려면 해당 프로젝트에 이미지 스트림 태그를 추가합니다.
이미지 스트림 태그는 다른 사용자에게 가져오기 보안을 노출하지 않고 설치 풀 시크릿에 있는 registry.redhat.io
인증 정보를 사용하여 UBI에 대한 액세스 권한을 부여합니다. 이 방법은 각 개발자가 각 프로젝트에서 registry.redhat.io
인증 정보를 사용하여 풀 시크릿을 설치하도록 요구하는 것보다 편리합니다.
프로세스
openshift
네임스페이스에ImageStreamTag
리소스를 생성하려면 모든 프로젝트의 개발자가 다음 명령을 입력합니다.oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi9:latest -n openshift
$ oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi9:latest -n openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 작은 정보다음 YAML을 적용하여
openshift
네임스페이스에ImageStreamTag
리소스를 생성할 수도 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 단일 프로젝트에서
ImageStreamTag
리소스를 생성하려면 다음 명령을 입력합니다.oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi:latest
$ oc tag --source=docker registry.redhat.io/ubi9/ubi:latest ubi:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 작은 정보다음 YAML을 적용하여 단일 프로젝트에서
ImageStreamTag
리소스를 생성할 수도 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2. 서브스크립션 자격을 빌드 보안으로 추가 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat 서브스크립션을 사용하여 콘텐츠를 설치하는 빌드에는 자격 키가 빌드 보안으로 포함되어야 합니다.
사전 요구 사항
- 서브스크립션을 통해 RHEL(Red Hat Enterprise Linux) 패키지 리포지토리에 액세스할 수 있어야 합니다. 클러스터가 서브스크립션될 때 이러한 리포지토리에 액세스할 수 있는 인타이틀먼트 시크릿은 Insights Operator에 의해 자동으로 생성됩니다.
-
cluster-admin
역할의 사용자로 클러스터에 액세스하거나openshift-config-managed
프로젝트의 시크릿에 액세스할 수 있는 권한이 있어야 합니다.
프로세스
다음 명령을 입력하여
openshift-config-managed
네임스페이스에서 빌드의 네임스페이스로 인타이틀먼트 시크릿을 복사합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드 구성의 Docker 전략에 etc-pki-entitlement 보안을 빌드 볼륨으로 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.3. 서브스크립션 관리자를 사용한 빌드 실행 링크 복사링크가 클립보드에 복사되었습니다!
10.3.1. 서브스크립션 관리자를 사용하는 Docker 빌드 링크 복사링크가 클립보드에 복사되었습니다!
Docker 전략 빌드에서는 yum
또는 dnf
를 사용하여 추가 RHEL(Red Hat Enterprise Linux) 패키지를 설치할 수 있습니다.
사전 요구 사항
- 인타이틀먼트 키를 빌드 전략 볼륨으로 추가해야 합니다.
프로세스
다음을 예제 Dockerfile로 사용하여 서브스크립션 관리자를 통해 콘텐츠를 설치합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
yum
또는dnf
명령을 실행하기 전에/etc/rhsm-host
디렉토리와 Dockerfile의 모든 콘텐츠를 제거하려면 명령을 포함해야 합니다.- 2
- Red Hat Package Browser 를 사용하여 설치된 패키지에 대한 올바른 리포지토리를 찾습니다.
- 3
- 다른 Red Hat 컨테이너 이미지와 호환되는 이미지를 유지하려면
/etc/rhsm-host
심볼릭 링크를 복원해야 합니다.
10.4. Red Hat Satellite 서브스크립션을 사용하여 빌드 실행 링크 복사링크가 클립보드에 복사되었습니다!
10.4.1. 빌드에 Red Hat Satellite 구성 추가 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Satellite를 사용하여 콘텐츠를 설치하는 빌드에서는 Satellite 리포지토리에서 콘텐츠를 가져오기 위해 적절한 구성을 제공해야 합니다.
사전 요구 사항
Satellite 인스턴스에서 콘텐츠를 다운로드하는
yum
호환 리포지토리 구성 파일을 제공하거나 생성해야 합니다.리포지토리 구성 샘플
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
다음 명령을 입력하여 Satellite 리포지토리 구성 파일이 포함된
ConfigMap
오브젝트를 생성합니다.oc create configmap yum-repos-d --from-file /path/to/satellite.repo
$ oc create configmap yum-repos-d --from-file /path/to/satellite.repo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Satellite 리포지토리 구성 및 인타이틀먼트 키를 빌드 볼륨으로 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.4.2. Red Hat Satellite 서브스크립션을 사용하는 Docker 빌드 링크 복사링크가 클립보드에 복사되었습니다!
Docker 전략 빌드에서는 Red Hat Satellite 리포지토리를 사용하여 서브스크립션 콘텐츠를 설치할 수 있습니다.
사전 요구 사항
- 인타이틀먼트 키와 Satellite 리포지토리 구성을 빌드 볼륨으로 추가했습니다.
프로세스
다음 예제를 사용하여 Satellite로 콘텐츠를 설치하기 위한
Dockerfile
을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11장. 전략에 따른 빌드 보안 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform의 빌드는 권한이 있는 컨테이너에서 실행됩니다. 권한이 있는 경우 사용한 빌드 전략에 따라 빌드를 실행하여 클러스터 및 호스트 노드에 대한 권한을 에스컬레이션할 수 있습니다. 그리고 일종의 보안 조치로 빌드 및 해당 빌드에 사용하는 전략을 실행할 수 있는 사람을 제한합니다. 사용자 정의 빌드는 권한 있는 컨테이너 내의 모든 코드를 실행할 수 있기 때문에 본질적으로 소스 빌드보다 안전하지 않으며, 기본적으로 비활성화되어 있습니다. Dockerfile 처리 논리의 취약성으로 인해 호스트 노드에 권한이 부여될 수 있으므로 Docker 빌드 권한을 주의하여 부여하십시오.
기본적으로 빌드를 생성할 수 있는 모든 사용자에게 Docker 및 S2I(Source-to-image) 빌드 전략을 사용할 수 있는 권한이 부여됩니다. 클러스터 관리자 권한이 있는 사용자는 ‘전역적으로 빌드 전략을 사용자로 제한’ 섹션에 언급된 대로 사용자 정의 빌드 전략을 활성화할 수 있습니다.
권한 부여 정책을 사용하여 빌드할 수 있는 사용자와 이들이 사용할 수 있는 빌드 전략을 제어할 수 있습니다. 각 빌드 전략에는 해당 빌드의 하위 소스가 있습니다. 사용자는 빌드를 생성할 수 있는 권한과 해당 전략을 사용하여 빌드를 생성하기 위해 빌드 전략 하위 리소스에서 생성할 수 있는 권한이 있어야 합니다. 빌드 전략 하위 리소스에 생성 권한을 부여하는 기본 역할이 제공됩니다.
전략 | 하위 리소스 | 역할 |
---|---|---|
Docker | 빌드/Docker | system:build-strategy-docker |
S2I(Source-to-Image) | 빌드/소스 | system:build-strategy-source |
사용자 정의 | 빌드/사용자 정의 | system:build-strategy-custom |
JenkinsPipeline | builds/jenkinspipeline | system:build-strategy-jenkinspipeline |
11.1. 전역적으로 빌드 전략에 대한 액세스 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
특정 빌드 전략에 대한 액세스를 전역적으로 방지하려면 클러스터 관리자 권한이 있는 사용자로 로그인하여 system:authenticated
그룹에서 해당 역할을 제거한 후 주석 rbac.authorization.kubernetes.io/autoupdate: "false"
를 적용하여 API를 재시작할 때마다 변경되지 않도록 보호하십시오. 다음 예제에서는 Docker 빌드 전략을 비활성화하는 방법을 보여줍니다.
프로세스
다음 명령을 입력하여
rbac.authorization.kubernetes.io/autoupdate
주석을 적용합니다.oc annotate clusterrolebinding.rbac system:build-strategy-docker-binding 'rbac.authorization.kubernetes.io/autoupdate=false' --overwrite
$ oc annotate clusterrolebinding.rbac system:build-strategy-docker-binding 'rbac.authorization.kubernetes.io/autoupdate=false' --overwrite
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 역할을 제거합니다.
oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated
$ oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드 전략 하위 리소스도
admin
에서 제거되고 사용자 역할을편집합니다
.oc get clusterrole admin -o yaml | grep "builds/docker"
$ oc get clusterrole admin -o yaml | grep "builds/docker"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get clusterrole edit -o yaml | grep "builds/docker"
$ oc get clusterrole edit -o yaml | grep "builds/docker"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.2. 전역적으로 빌드 전략을 사용자로 제한 링크 복사링크가 클립보드에 복사되었습니다!
특정 사용자 집합이 특정 전략을 사용하여 빌드를 생성하도록 허용할 수 있습니다.
사전 요구 사항
- 빌드 전략에 대한 글로벌 액세스 권한을 비활성화합니다.
프로세스
빌드 전략에 해당하는 역할을 특정 사용자에게 할당합니다. 예를 들어
system:build-strategy-docker
클러스터 역할을 사용자devuser
에 추가하려면 다음을 수행합니다.oc adm policy add-cluster-role-to-user system:build-strategy-docker devuser
$ oc adm policy add-cluster-role-to-user system:build-strategy-docker devuser
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 주의클러스터 수준의 사용자 액세스 권한을
builds/docker
하위 리소스에 부여하면 사용자가 빌드를 생성할 수 있는 모든 프로젝트에서 Docker 전략을 사용하여 빌드를 생성할 수 있습니다.
11.3. 프로젝트 내 사용자로 빌드 전략 제한 링크 복사링크가 클립보드에 복사되었습니다!
전역적으로 사용자에게 빌드 전략 역할을 부여하는 것과 유사하게 프로젝트 내의 특정 사용자 집합이 특정 전략을 사용하여 빌드를 생성하도록 허용할 수 있습니다.
프로세스
빌드 전략에 해당하는 역할을 특정 프로젝트 내 사용자에게 할당합니다. 예를 들어 프로젝트
devproject
내에서system:build-strategy-docker
역할을 사용자devuser
에 추가하려면 다음을 실행합니다.oc adm policy add-role-to-user system:build-strategy-docker devuser -n devproject
$ oc adm policy add-role-to-user system:build-strategy-docker devuser -n devproject
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12장. 빌드 구성 리소스 링크 복사링크가 클립보드에 복사되었습니다!
빌드 설정을 구성하려면 다음 절차를 사용합니다.
12.1. 빌드 컨트롤러 구성 매개변수 링크 복사링크가 클립보드에 복사되었습니다!
build.config.openshift.io/cluster
리소스에서는 다음과 같은 구성 매개변수를 제공합니다.
매개변수 | 설명 |
---|---|
|
빌드 처리 방법에 대한 클러스터 전체 정보가 들어 있습니다. 유일하게 유효한 정식 이름은
|
| 빌드의 기본 정보를 제어합니다.
여기에 설정되지 않은 값은 DefaultProxy에서 상속됩니다.
|
|
|
| 빌드에 대한 덮어쓰기 설정을 제어합니다.
|
|
|
12.2. 빌드 설정 구성 링크 복사링크가 클립보드에 복사되었습니다!
build.config.openshift.io/cluster
리소스를 편집하여 빌드 설정을 구성할 수 있습니다.
프로세스
다음 명령을 입력하여
build.config.openshift.io/cluster
리소스를 편집합니다.oc edit build.config.openshift.io/cluster
$ oc edit build.config.openshift.io/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음은
build.config.openshift.io/cluster
리소스의 예입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Build
: 빌드 처리 방법에 대한 클러스터 전체 정보가 들어 있습니다. 유일하게 유효한 정식 이름은cluster
입니다.- 2
buildDefaults
: 빌드의 기본 정보를 제어합니다.- 3
defaultProxy
: 이미지 가져오기 또는 내보내기 및 소스 다운로드를 포함하여 모든 빌드 작업에 대한 기본 프록시 설정이 포함됩니다.- 4
env
: 지정된 변수가 빌드에 존재하지 않는 경우 빌드에 적용되는 기본 환경 변수 집합입니다.- 5
gitProxy
: Git 작업에 대한 프록시 설정만 포함됩니다. 설정하는 경우git clone
과 같은 모든 Git 명령의 모든 프록시 설정을 덮어씁니다.- 6
imageLabels
: 결과 이미지에 적용되는 라벨 목록입니다.BuildConfig
에 동일한 이름의 라벨을 제공하여 기본 라벨을 덮어쓸 수 있습니다.- 7
resources
: 빌드를 실행하는 데 필요한 리소스 요구 사항을 정의합니다.- 8
buildOverrides
: 빌드에 대한 덮어쓰기 설정을 제어합니다.- 9
imageLabels
: 결과 이미지에 적용되는 라벨 목록입니다. 이 표에 있는 것과 같은 이름이 있는BuildConfig
에 라벨을 제공한 경우 해당 라벨을 덮어씁니다.- 10
nodeSelector
: 빌드 Pod가 노드에 맞으려면 이 선택기가 true여야 합니다.- 11
tolerations
: 빌드 Pod에 설정된 기존 허용 오차를 덮어쓰는 허용 오차 목록입니다.
13장. 빌드 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
다음을 사용하여 빌드 문제를 해결합니다.
13.1. 리소스에 대한 액세스 거부 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
리소스에 대한 액세스 요청이 거부되는 경우:
- 문제
- 다음과 같은 메시지가 표시되고 빌드가 실패합니다.
requested access to the resource is denied
requested access to the resource is denied
- 해결
- 프로젝트에 설정된 이미지 할당량 중 하나를 초과했습니다. 현재 할당량을 확인하고 적용되는 제한과 사용 중인 스토리지를 확인합니다.
oc describe quota
$ oc describe quota
13.2. 서비스 인증서 생성 실패 링크 복사링크가 클립보드에 복사되었습니다!
리소스에 대한 액세스 요청이 거부되는 경우:
- 문제
-
서비스 인증서 생성에 실패하는 경우 (서비스의
service.beta.openshift.io/serving-cert-generation-error
주석에는 다음이 포함됩니다).
출력 예
secret/ssl-key references serviceUID 62ad25ca-d703-11e6-9d6f-0e9c0057b608, which does not match 77b6dd80-d716-11e6-9d6f-0e9c0057b60
secret/ssl-key references serviceUID 62ad25ca-d703-11e6-9d6f-0e9c0057b608, which does not match 77b6dd80-d716-11e6-9d6f-0e9c0057b60
- 해결
인증서를 생성한 서비스가 더 이상 존재하지 않거나
serviceUID
가 다릅니다. 이전 보안을 제거하고 서비스에서service.beta.openshift.io/serving-cert-generation-error
및service.beta.openshift.io/serving-cert-generation-error-num
주석을 지워 인증서를 강제로 다시 생성해야 합니다. 주석을 지우려면 다음 명령을 입력합니다.oc delete secret <secret_name>
$ oc delete secret <secret_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-
$ oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-num-
$ oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-num-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고주석을 제거하는 명령에는 제거할 주석 이름 뒤에
-
가 있습니다.
14장. 빌드에 대해 신뢰할 수 있는 추가 인증 기관 설정 링크 복사링크가 클립보드에 복사되었습니다!
이미지 레지스트리에서 이미지를 가져올 때 빌드에서 신뢰할 추가 CA(인증 기관)를 설정하려면 다음 섹션을 사용합니다.
이 절차를 수행하려면 클러스터 관리자가 ConfigMap
을 생성하고 ConfigMap
에 추가 CA를 키로 추가해야 합니다.
-
ConfigMap
은openshift-config
네임스페이스에 생성해야 합니다. domain
은ConfigMap
의 키이고value
는 PEM 형식으로 인코딩한 인증서입니다.-
각 CA는 도메인과 연결되어 있어야 합니다. 도메인 형식은
hostname[..port]
입니다.
-
각 CA는 도메인과 연결되어 있어야 합니다. 도메인 형식은
-
ConfigMap
이름은image.config.openshift.io/cluster
클러스터 범위 구성 리소스의spec.additionalTrustedCA
필드에 설정해야 합니다.
14.1. 클러스터에 인증 기관 추가 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에 따라 이미지를 내보내고 가져올 때 사용할 클러스터에 인증서 CA(인증 기관)를 추가할 수 있습니다.
사전 요구 사항
-
레지스트리의 공용 인증서(일반적으로
/etc/docker/certs.d/
디렉터리에 있는hostname/ca.crt
파일)에 액세스할 수 있어야 합니다.
절차
자체 서명 인증서를 사용하는 레지스트리의 경우 신뢰할 수 있는 인증서가 있는
openshift-config
네임스페이스에ConfigMap
을 생성합니다. 각 CA 파일에 대해ConfigMap
의 키가hostname[..port]
형식의 레지스트리 호스트 이름인지 확인하십시오.oc create configmap registry-cas -n openshift-config \ --from-file=myregistry.corp.com..5000=/etc/docker/certs.d/myregistry.corp.com:5000/ca.crt \ --from-file=otherregistry.com=/etc/docker/certs.d/otherregistry.com/ca.crt
$ oc create configmap registry-cas -n openshift-config \ --from-file=myregistry.corp.com..5000=/etc/docker/certs.d/myregistry.corp.com:5000/ca.crt \ --from-file=otherregistry.com=/etc/docker/certs.d/otherregistry.com/ca.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클러스터 이미지 구성을 업데이트합니다.
oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-cas"}}}' --type=merge
$ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-cas"}}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Legal Notice
링크 복사링크가 클립보드에 복사되었습니다!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.