서빙
Knative Serving 시작하기 및 서비스 구성
초록
1장. Knative Serving 시작하기 링크 복사링크가 클립보드에 복사되었습니다!
1.1. 서버리스 애플리케이션 생성 링크 복사링크가 클립보드에 복사되었습니다!
서버리스 애플리케이션은 경로 및 구성으로 정의되고 YAML 파일에 포함된 Kubernetes 서비스로 생성 및 배포됩니다. OpenShift Serverless를 사용하여 서버리스 애플리케이션을 배포하려면 Knative Service 오브젝트를 생성해야 합니다.
Knative Service 오브젝트 YAML 파일의 예
다음 방법 중 하나를 사용하여 서버리스 애플리케이션을 생성합니다.
OpenShift Container Platform 웹 콘솔에서 Knative 서비스를 생성합니다.
OpenShift Container Platform의 경우 자세한 내용은 애플리케이션 생성 을 참조하십시오.
-
Knative(
kn) CLI를 사용하여 Knative 서비스를 생성합니다. -
ocCLI를 사용하여 KnativeService오브젝트를 YAML 파일로 생성하고 적용합니다.
1.1.1. Knative CLI를 사용하여 서버리스 애플리케이션 생성 링크 복사링크가 클립보드에 복사되었습니다!
Knative(kn) CLI를 사용하여 서버리스 애플리케이션을 생성하면 YAML 파일을 직접 수정하는 것보다 간소화되고 직관적인 사용자 인터페이스가 제공됩니다. kn service create 명령을 사용하여 기본 서버리스 애플리케이션을 생성할 수 있습니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn) CLI가 설치되어 있습니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
프로세스
Knative 서비스를 생성합니다.
kn service create <service-name> --image <image> --tag <tag-value>
$ kn service create <service-name> --image <image> --tag <tag-value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
-
--image는 애플리케이션의 이미지 URI입니다. --tag는 서비스와 함께 생성된 초기 버전에 태그를 추가하는 데 사용할 수 있는 선택적 플래그입니다.명령 예
kn service create showcase \ --image quay.io/openshift-knative/showcase$ kn service create showcase \ --image quay.io/openshift-knative/showcaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
1.1.2. YAML을 사용하여 서버리스 애플리케이션 생성 링크 복사링크가 클립보드에 복사되었습니다!
YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 API를 사용하므로 선언적 및 재현 가능한 방식으로 애플리케이션을 설명할 수 있습니다. YAML을 사용하여 서버리스 애플리케이션을 생성하려면 Knative Service 오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply 를 사용하여 적용해야 합니다.
서비스가 생성되고 애플리케이션이 배포되면 Knative에서 이 버전의 애플리케이션에 대해 변경할 수 없는 버전을 생성합니다. Knative는 네트워크 프로그래밍을 수행하여 애플리케이션의 경로, 수신, 서비스 및 로드 밸런서를 생성하고 트래픽에 따라 Pod를 자동으로 확장합니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
- 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
-
OpenShift CLI(
oc)를 설치합니다.
프로세스
다음 샘플 코드를 포함하는 YAML 파일을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow YAML 파일이 포함된 디렉터리로 이동한 후 YAML 파일을 적용하여 애플리케이션을 배포합니다.
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.1.3. 오프라인 모드를 사용하여 서비스 생성 링크 복사링크가 클립보드에 복사되었습니다!
클러스터에서 변경 사항이 발생하지 않도록 kn service 명령을 오프라인 모드에서 실행할 수 있으며 대신 로컬 시스템에 서비스 설명자 파일이 생성됩니다. 설명자 파일이 생성되면 파일을 수정한 후 클러스터의 변경 사항을 전파할 수 있습니다.
Knative CLI의 오프라인 모드는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn) CLI가 설치되어 있습니다.
프로세스
오프라인 모드에서 로컬 Knative 서비스 설명자 파일을 생성합니다.
kn service create showcase \ --image quay.io/openshift-knative/showcase \ --target ./ \ --namespace test$ kn service create showcase \ --image quay.io/openshift-knative/showcase \ --target ./ \ --namespace testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Service 'showcase' created in namespace 'test'.
Service 'showcase' created in namespace 'test'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow --target ./플래그는 오프라인 모드를 활성화하고 새 디렉터리 트리를 저장하는 디렉토리로./를 지정합니다.기존 디렉터리를 지정하지 않고
--target my-service.yaml과 같은 파일 이름을 사용하면 디렉터리 트리가 생성되지 않습니다. 대신 서비스 설명자 파일my-service.yaml만 현재 디렉터리에 생성됩니다.파일 이름에는.
.yaml,.yml, 또는.json확장을 사용할 수 있습니다..json을 선택하면 JSON 형식으로 서비스 설명자 파일을 생성합니다.--namespace test옵션은 새 서비스를test네임스페이스에 배치합니다.--namespace를사용하지 않고 OpenShift Container Platform 클러스터에 로그인한 경우 현재 네임스페이스에 설명자 파일이 생성됩니다. 그렇지 않으면 설명자 파일이default네임스페이스에 생성됩니다.
생성된 디렉터리 구조를 확인합니다.
tree ./
$ tree ./Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--target에서 지정된 현재./디렉터리에는 지정된 네임스페이스를 바탕으로 이름이 지정된test/디렉터리가 포함되어 있습니다. -
test/디렉터리에는 리소스 유형의 이름에 따라 이름이 지정된ksvc디렉터리가 포함되어 있습니다. -
ksvc디렉터리에는 지정된 서비스 이름에 따라 이름이 지정된 설명자 파일showcase.yaml이 포함되어 있습니다.
-
생성된 서비스 기술자 파일을 확인합니다.
cat test/ksvc/showcase.yaml
$ cat test/ksvc/showcase.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새 서비스에 대한 정보를 나열합니다.
kn service describe showcase --target ./ --namespace test
$ kn service describe showcase --target ./ --namespace testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow target ./옵션은 네임스페이스 하위 디렉터리를 포함하는 디렉터리 구조의 루트 디렉터리를 지정합니다.또는
--target옵션을 사용하여 YAML 또는 JSON 파일 이름을 직접 지정할 수 있습니다. 허용된 파일 확장자는.yaml,.yml,.json입니다.--namespace옵션은 필요한 서비스 기술자 파일을 포함하는 하위 디렉터리를kn와 통신하는 네임스페이스를 지정합니다.--namespace를 사용하지 않고 OpenShift Container Platform 클러스터에 로그인한 경우kn은 현재 네임스페이스를 바탕으로 이름이 지정된 하위 디렉터리에서 서비스를 검색합니다. 그렇지 않으면kn은default/하위 디렉터리에서 검색합니다.
서비스 설명자 파일을 사용하여 클러스터에 서비스를 생성합니다.
kn service create -f test/ksvc/showcase.yaml
$ kn service create -f test/ksvc/showcase.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.1.4. 서버리스 애플리케이션 배포 확인 링크 복사링크가 클립보드에 복사되었습니다!
서버리스 애플리케이션이 성공적으로 배포되었는지 확인하려면 Knative에서 생성한 애플리케이션 URL을 가져와서 해당 URL로 요청을 보낸 후 출력을 관찰해야 합니다. OpenShift Serverless에서는 HTTP 및 HTTPS URL을 모두 사용하지만 oc get ksvc 의 출력은 항상 http:// 형식을 사용하여 URL을 출력합니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
ocCLI를 설치했습니다. - Knative 서비스를 생성했습니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다.
프로세스
애플리케이션 URL을 찾습니다.
oc get ksvc <service_name>
$ oc get ksvc <service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME URL LATESTCREATED LATESTREADY READY REASON showcase http://showcase-default.example.com showcase-00001 showcase-00001 True
NAME URL LATESTCREATED LATESTREADY READY REASON showcase http://showcase-default.example.com showcase-00001 showcase-00001 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 클러스터에 요청한 후 출력을 확인합니다.
HTTP 요청의 예(HTTPie 툴 사용)
http showcase-default.example.com
$ http showcase-default.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow HTTPS 요청의 예
https showcase-default.example.com
$ https showcase-default.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항입니다. 시스템에 HTTPie 툴이 설치되어 있지 않은 경우 대신 curl 툴을 사용할 수 있습니다.
HTTPS 요청의 예
curl http://showcase-default.example.com
$ curl http://showcase-default.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
{"artifact":"knative-showcase","greeting":"Ciao"}{"artifact":"knative-showcase","greeting":"Ciao"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항입니다. 인증서 체인에서 자체 서명된 인증서와 관련된 오류가 발생하면 HTTPie 명령에
--verify=no플래그를 추가하여 오류를 무시할 수 있습니다.https --verify=no showcase-default.example.com
$ https --verify=no showcase-default.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요프로덕션 배포에는 자체 서명된 인증서를 사용해서는 안 됩니다. 이 방법은 테스트 목적으로만 사용됩니다.
선택 사항입니다. OpenShift Container Platform 클러스터가 CA(인증 기관)에서 서명한 인증서로 구성되어 있지만 아직 시스템에 전역적으로 구성되지 않은 경우
curl명령으로 이 인증서를 지정할 수 있습니다. 인증서 경로는--cacert플래그를 사용하여 curl 명령에 전달할 수 있습니다.curl https://showcase-default.example.com --cacert <file>
$ curl https://showcase-default.example.com --cacert <file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
{"artifact":"knative-showcase","greeting":"Ciao"}{"artifact":"knative-showcase","greeting":"Ciao"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2장. OpenShift Serverless Serving의 확장성 및 성능 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless는 리소스 요구 사항과 스케일링 동작이 다른 여러 구성 요소로 구성됩니다. 이러한 구성 요소는 수평 및 수직으로 확장되지만 리소스 요구 사항과 구성은 실제 사용 사례에 따라 크게 달라집니다.
- Control-plane 구성 요소
- 이러한 구성 요소는 사용자 정의 리소스를 관찰 및 대응하고 시스템을 지속적으로 재구성합니다(예: 컨트롤러 Pod).
- 데이터 플레인 구성 요소
- 이러한 구성 요소는 요청 및 응답 처리(예: Knative Servings 활성화 구성 요소)에 직접 연결됩니다.
다음 테스트 설정을 사용하여 다음 메트릭 및 결과가 기록되었습니다.
- OpenShift Container Platform 4.13을 실행하는 클러스터
- 시스템 유형 m6.xlarge를 사용하여 AWS에서 4개의 컴퓨팅 노드를 실행하는 클러스터
- OpenShift Serverless 1.30
2.1. OpenShift Serverless Serving 오버헤드 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless Serving의 구성 요소는 데이터 플레인의 일부이므로 클라이언트의 요청이 다음을 통해 라우팅됩니다.
- ingress-gateway(Kourier 또는 Service Mesh)
- 활성화기 구성 요소
- 각 Knative 서비스의 queue-proxy 사이드카 컨테이너
이러한 구성 요소는 네트워킹에 추가 홉을 도입하고 추가 작업을 수행합니다(예: 관찰 기능 및 요청 대기열 추가). 다음은 측정된 대기 시간 오버헤드입니다.
- 각 추가 네트워크 홉은 요청에 0.5ms ~ 1ms 대기 시간을 추가합니다. Knative 서비스의 현재 로드에 따라 Knative 서비스가 요청 전에 0으로 스케일링된 경우 활성화기 구성 요소는 항상 데이터 플레인의 일부가 아닙니다.
- 페이로드 크기에 따라 각 구성 요소는 초당 2500개의 요청을 처리하기 위해 최대 1개의 CPU vCPU를 사용합니다.
2.2. OpenShift Serverless Serving의 알려진 제한 사항 링크 복사링크가 클립보드에 복사되었습니다!
생성할 수 있는 최대 Knative 서비스 수는 3000입니다. 1개의 Knative 서비스에서 3개의 Kubernetes 서비스를 생성하기 때문에 OpenShift Container Platform Kubernetes 서비스 제한 10,000에 해당합니다.
2.3. OpenShift Serverless Serving의 확장 및 성능 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless Serving은 다음 매개변수를 기반으로 확장 및 구성해야 합니다.
- Knative 서비스 수
- 버전 수
- 시스템의 동시 요청 수
- 요청 페이로드 크기
- 사용자의 웹 애플리케이션에서 추가한 Knative 서비스의 startup-latency 및 응답 대기 시간
- 시간 경과에 따른 KnativeService CR(사용자 정의 리소스) 변경 횟수
2.3.1. KnativeServing 기본 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 OpenShift Serverless Serving은 고가용성 및 중간 크기의 CPU 및 메모리 요청 및 제한으로 모든 구성 요소를 실행하도록 구성됩니다. 즉 KnativeServing CR의 high-available 필드가 자동으로 2 값으로 설정되고 모든 시스템 구성 요소는 두 개의 복제본으로 확장됩니다. 이 구성은 중간 워크로드 시나리오에 적합하며 다음을 사용하여 테스트되었습니다.
- 170 Knative 서비스
- Knative 서비스당 1-2 버전
- 89 테스트 시나리오는 주로 컨트롤 플레인 테스트에 중점을 두고 있습니다.
- 48 Knative 서비스가 삭제되고 다시 생성되는 시나리오
- 41 안정적인 시나리오: 요청이 느리지만 지속적으로 시스템으로 전송됨
이러한 테스트 사례에서는 시스템 구성 요소가 효과적으로 소비됩니다.
| Component | 측정 리소스 |
|---|---|
|
프로젝트 | 1GB 메모리, 0.2 코어의 CPU |
|
프로젝트 | 5GB 메모리, 2.5 코어의 CPU |
2.3.2. OpenShift Serverless Serving의 최소 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
기본 설정은 중간 규모의 워크로드에 적합하지만 더 작은 설정이나 높은 워크로드 시나리오의 경우 크기가 초과될 수 있습니다. 최소 워크로드 시나리오를 위해 OpenShift Serverless Serving을 구성하려면 시스템 구성 요소의 유휴 사용량을 알아야 합니다.
2.3.2.1. 유휴 사용 링크 복사링크가 클립보드에 복사되었습니다!
유휴 사용은 Knative 서비스 수에 따라 다릅니다. knative-serving 및 OpenShift Container Platform 프로젝트의 구성 요소에 대해 다음 메모리 사용량이 측정되었습니다.
knative-serving -ingress
| Component | 0 서비스 | 100개의 서비스 | 500개의 서비스 | 1000개의 서비스 |
|---|---|---|---|---|
|
| 55Mi | 86Mi | 300Mi | 450Mi |
|
| 52Mi | 102Mi | 225Mi | 350Mi |
|
| 100Mi | 135Mi | 310Mi | 500Mi |
|
| 60Mi | 60Mi | 60Mi | 60Mi |
|
| 20Mi | 60Mi | 190Mi | 330Mi |
|
| 90Mi | 170Mi | 340Mi | 430Mi |
3scale-kourier-gateway 및 net-kourier-controller 구성 요소 또는 istio-ingressgateway 및 net-istio-controller 구성 요소가 설치됩니다.
net-istio 의 메모리 사용은 메시 내의 총 Pod 수를 기반으로 합니다.
2.3.3. 최소 워크로드에 대한 Serving 구성 링크 복사링크가 클립보드에 복사되었습니다!
프로세스
KnativeServing 사용자 정의 리소스(CR)를 사용하여 최소 워크로드에 대해
Knative Serving을 구성할 수 있습니다.KnativeServing CR의 최소 워크로드 구성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이 값을
1로 설정하면 모든 시스템 구성 요소가 하나의 복제본으로 확장됩니다. - 2
- 다운타임을 방지하려면 활성기를 항상 최소
2개의 인스턴스로 스케일링해야 합니다. - 3
HorizontalPodAutoscaler는 이를 확장 및 축소하기 위한 참조로 사용하므로 활성화기 CPU 요청을250m미만으로 설정해야 합니다.- 4
- 이전 표의 유휴 값으로 메모리 요청을 조정합니다. 또한 예상 로드에 따라 메모리 제한을 조정합니다(최고의 값을 찾으려면 사용자 지정 테스트가 필요할 수 있음).
- 5
- 하나의 Webhook와 하나의 컨트롤러가 최소 워크로드 시나리오에 충분합니다.
- 6
- 이러한 제한은 최소 워크로드 시나리오에는 충분하지만 구체적인 워크로드에 따라 조정이 필요할 수 있습니다.
- 7
- HorizontalPodAutoscaler는 이를 확장 및 축소하기 위한 참조로 사용하므로 Webhook CPU 요청을
100m미만으로 설정하지 않아야 합니다. - 8
- 노드 유지보수 중 문제를 방지하기 위해
PodDistruptionBudgets를복제본보다 낮은 값으로 조정합니다.
2.3.4. 높은 워크로드에 대한 Serving 구성 링크 복사링크가 클립보드에 복사되었습니다!
KnativeServing 사용자 정의 리소스(CR)를 사용하여 높은 워크로드에 대해 Knative Serving 을 구성할 수 있습니다. 다음 결과는 높은 워크로드에 대해 Knative Serving을 구성하는 것과 관련이 있습니다.
이러한 결과는 페이로드 크기가 0-32 kb인 요청으로 테스트되었습니다. 해당 테스트에 사용되는 Knative 서비스 백엔드에는 0~10초 간 시작 대기 시간과 0~5초의 응답 시간이 있었습니다.
- 모든 데이터 플레인 구성 요소는 높은 요청 및 페이로드 시나리오에서 CPU 사용량이 크게 증가하므로 CPU 요청 및 제한을 테스트해야 하며 잠재적으로 증가할 수 있습니다.
- 또한 활성화 구성 요소에 더 많은 요청 페이로드를 버퍼링해야 하는 경우 더 많은 메모리가 필요할 수 있으므로 메모리 요청 및 제한도 늘려야 할 수 있습니다.
- 하나의 activator Pod는 대기 시간을 늘리기 전에 초당 약 2500 건의 요청을 처리할 수 있으며 어느 시점에서 오류가 발생합니다.
-
1개의
3scale-kourier-gateway또는istio-ingressgatewayPod는 대기 시간을 늘리기 전에 초당 약 2500개의 요청을 처리할 수 있으며 어느 시점에서 오류가 발생할 수도 있습니다. - 각 데이터 플레인 구성 요소는 초당 2500개의 요청을 처리하기 위해 최대 1개의 CPU vCPU를 사용합니다. 이는 Knative 서비스 백엔드의 페이로드 크기 및 응답 시간에 따라 달라집니다.
Knative 서비스 사용자 워크로드의 빠른 시작 및 빠른 응답 시간은 전체 시스템의 우수한 성능을 위해 중요합니다. Knative Serving 구성 요소는 Knative 서비스 사용자 백엔드가 확장되거나 요청 동시성이 용량에 도달했을 때 들어오는 요청을 버퍼링하고 있습니다. Knative 서비스 사용자 워크로드에서 긴 시작 또는 요청 대기 시간이 발생하는 경우 활성화 구성 요소(CPU 및 메모리 구성이 너무 낮은 경우)를 오버로드하거나 호출 클라이언트에 오류가 발생합니다.
프로세스
설치를 미세 조정하려면 자체 테스트 결과와 결합된 이전 결과를 사용하여
KnativeServing사용자 정의 리소스를 구성합니다.KnativeServing CR의 높은 워크로드 구성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이 매개변수를 최소
2개로 설정하여 모든 구성 요소의 인스턴스가 항상 두 개 이상 실행되고 있는지 확인합니다.워크로드를사용하여 특정 구성 요소의 복제본을 덮어쓸 수도 있습니다. - 2
워크로드목록을 사용하여 특정 구성 요소를 구성합니다. 구성 요소의배포이름을 사용하고replicas필드를 설정합니다.- 3
- HPA(수평 Pod 자동 스케일러)를 사용하는
activator,webhook,3scale-kourier-gateway구성 요소의 경우replicas필드는 최소 복제본 수를 설정합니다. 실제 복제본 수는 HPA에서 수행하는 CPU 로드 및 스케일링에 따라 다릅니다. - 4
- 이전 결과 및 자체 테스트 결과를 고려하여 최소한 유휴 사용량에 따라 요청된 CPU 및 메모리를 설정합니다.
- 5
- 노드 유지보수 중 문제를 방지하려면
PodDistruptionBudgets를복제본보다 낮은 값으로 조정합니다. 기본minAvailable은1로 설정되어 있으므로 필요한 복제본을 늘리는 경우minAvailable도 늘려야 합니다.
각 환경은 매우 구체적이므로 고유한 이상적인 구성을 테스트하고 찾아야 합니다. OpenShift Container Platform의 모니터링 및 경고 기능을 사용하여 실제 리소스 사용을 지속적으로 모니터링하고 필요한 경우 조정합니다.
OpenShift Serverless 및 Service Mesh 통합을 사용하는 경우 istio-proxy 사이드카 컨테이너에 의해 추가 CPU 처리가 추가됩니다. 이에 대한 자세한 내용은 Service Mesh 설명서를 참조하십시오.
3장. 자동 확장 링크 복사링크가 클립보드에 복사되었습니다!
3.1. 자동 확장 링크 복사링크가 클립보드에 복사되었습니다!
Knative Serving은 들어오는 수요와 일치하도록 애플리케이션의 자동 스케일링 또는 자동 스케일링을 제공합니다. 예를 들어 애플리케이션에 트래픽이 수신되지 않고 scale-to-zero가 활성화된 경우 Knative Serving은 애플리케이션을 복제본 0으로 축소합니다. 스케일 투 0이 비활성화된 경우 애플리케이션은 클러스터의 애플리케이션에 대해 구성된 최소 복제본 수로 축소됩니다. 애플리케이션에 대한 트래픽이 증가하는 경우 필요에 따라 복제본을 확장할 수도 있습니다.
Knative 서비스의 자동 스케일링 설정은 클러스터 관리자(또는 AWS 및 OpenShift Dedicated의 Red Hat OpenShift Service 전용 관리자) 또는 개별 서비스에 대해 구성된 모니터링별 설정일 수 있습니다.
OpenShift Container Platform 웹 콘솔을 사용하거나 서비스의 YAML 파일을 수정하거나 Knative(kn) CLI를 사용하여 서비스에 대한 감독별 설정을 수정할 수 있습니다.
서비스에 설정한 제한 또는 대상은 애플리케이션의 단일 인스턴스에 대해 측정됩니다. 예를 들어 target 주석을 50 으로 설정하면 각 버전에서 50개의 요청을 처리할 수 있도록 애플리케이션을 스케일링하도록 자동 스케일러를 구성합니다.
3.2. 스케일링 경계 링크 복사링크가 클립보드에 복사되었습니다!
스케일 경계는 언제든지 애플리케이션을 제공할 수 있는 최소 및 최대 복제본 수를 결정합니다. 애플리케이션의 스케일 범위를 설정하여 콜드 시작 또는 컴퓨팅 비용을 제어할 수 있습니다.
3.2.1. 최소 스케일 경계 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션을 제공할 수 있는 최소 복제본 수는 min-scale 주석에 따라 결정됩니다. scale to zero가 활성화되지 않은 경우 min-scale 값은 기본적으로 1 입니다.
다음 조건이 충족되면 min-scale 값은 기본적으로 0 개의 복제본으로 설정됩니다.
-
min-scale주석이 설정되지 않음 - 0으로 스케일링이 활성화됨
-
KPA클래스 사용
min-scale 주석이 있는 서비스 사양의 예
3.2.1.1. Knative CLI를 사용하여 min-scale 주석 설정 링크 복사링크가 클립보드에 복사되었습니다!
Knative(kn) CLI를 사용하여 min-scale 주석을 설정하면 YAML 파일을 직접 수정하는 것보다 간소화되고 직관적인 사용자 인터페이스가 제공됩니다. kn service 명령을 --scale-min 플래그와 함께 사용하여 서비스의 min-scale 값을 생성하거나 수정할 수 있습니다.
사전 요구 사항
- Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn) CLI가 설치되어 있습니다.
프로세스
--scale-min플래그를 사용하여 서비스의 최소 복제본 수를 설정합니다.kn service create <service_name> --image <image_uri> --scale-min <integer>
$ kn service create <service_name> --image <image_uri> --scale-min <integer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
kn service create showcase --image quay.io/openshift-knative/showcase --scale-min 2
$ kn service create showcase --image quay.io/openshift-knative/showcase --scale-min 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2. 최대 스케일 경계 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션을 제공할 수 있는 최대 복제본 수는 max-scale 주석에 따라 결정됩니다. max-scale 주석이 설정되지 않은 경우 생성된 복제본 수에 대한 상한이 없습니다.
max-scale 주석이 있는 서비스 사양의 예
3.2.2.1. Knative CLI를 사용하여 max-scale 주석 설정 링크 복사링크가 클립보드에 복사되었습니다!
Knative(kn) CLI를 사용하여 max-scale 주석을 설정하면 YAML 파일을 직접 수정하는 것보다 간소화되고 직관적인 사용자 인터페이스가 제공됩니다. kn service 명령을 --scale-max 플래그와 함께 사용하여 서비스의 max-scale 값을 생성하거나 수정할 수 있습니다.
사전 요구 사항
- Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn) CLI가 설치되어 있습니다.
프로세스
--scale-max플래그를 사용하여 서비스의 최대 복제본 수를 설정합니다.kn service create <service_name> --image <image_uri> --scale-max <integer>
$ kn service create <service_name> --image <image_uri> --scale-max <integer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
kn service create showcase --image quay.io/openshift-knative/showcase --scale-max 10
$ kn service create showcase --image quay.io/openshift-knative/showcase --scale-max 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 동시성 링크 복사링크가 클립보드에 복사되었습니다!
동시성은 언제든지 애플리케이션의 각 복제본에서 처리할 수 있는 동시 요청 수를 결정합니다. 동시성은 소프트 제한 또는 하드 제한으로 구성할 수 있습니다.
- 소프트 제한은 엄격하게 적용된 바인딩이 아닌 대상 요청 제한입니다. 예를 들어, 트래픽이 갑자기 버스트되는 경우 소프트 제한 대상을 초과할 수 있습니다.
하드 제한은 엄격하게 적용되는 상한 요청 제한입니다. 동시성이 하드 제한에 도달하면 서+ 요청이 버퍼링되며 요청을 실행할 수 있는 사용 가능한 용량이 충분히 있을 때까지 기다려야 합니다.
중요하드 제한 구성을 사용하는 것은 애플리케이션에 명확한 사용 사례가 있는 경우에만 권장됩니다. 지정된 하드 제한이 낮으면 애플리케이션의 처리량 및 대기 시간에 부정적인 영향을 미칠 수 있으며 콜드 시작이 발생할 수 있습니다.
소프트 대상과 하드 제한을 추가하면 자동 스케일러가 동시 요청의 소프트 대상 수를 대상으로 하지만 최대 요청 수에 대한 하드 제한 값을 강제 적용합니다.
하드 제한 값이 소프트 제한 값보다 작으면 실제로 처리할 수 있는 수보다 더 많은 요청을 대상으로 할 필요가 없기 때문에 소프트 제한 값이 조정됩니다.
3.3.1. 소프트 동시성 대상 구성 링크 복사링크가 클립보드에 복사되었습니다!
소프트 제한은 엄격하게 적용된 바인딩이 아닌 대상 요청 제한입니다. 예를 들어, 트래픽이 갑자기 버스트되는 경우 소프트 제한 대상을 초과할 수 있습니다. 사양에서 autoscaling.knative.dev/target 주석을 설정하거나 올바른 플래그와 함께 kn service 명령을 사용하여 Knative 서비스의 소프트 동시성 대상을 지정할 수 있습니다.
프로세스
선택 사항:
Service사용자 정의 리소스의 사양에서 Knative 서비스에 대한autoscaling.knative.dev/target주석을 설정합니다.서비스 사양의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항:
kn service명령을 사용하여--concurrency-target플래그를 지정합니다.kn service create <service_name> --image <image_uri> --concurrency-target <integer>
$ kn service create <service_name> --image <image_uri> --concurrency-target <integer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 동시성 대상이 50개의 요청으로 서비스를 생성하는 명령 예
kn service create showcase --image quay.io/openshift-knative/showcase --concurrency-target 50
$ kn service create showcase --image quay.io/openshift-knative/showcase --concurrency-target 50Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.2. 하드 동시성 제한 구성 링크 복사링크가 클립보드에 복사되었습니다!
하드 동시성 제한은 엄격하게 적용되는 상한 요청 제한입니다. 동시성이 하드 제한에 도달하면 서+ 요청이 버퍼링되며 요청을 실행할 수 있는 사용 가능한 용량이 충분히 있을 때까지 기다려야 합니다. containerConcurrency 사양을 수정하거나 올바른 플래그와 함께 kn service 명령을 사용하여 Knative 서비스에 대한 하드 동시성 제한을 지정할 수 있습니다.
프로세스
선택 사항:
Service사용자 정의 리소스의 사양에 Knative 서비스의containerConcurrency사양을 설정합니다.서비스 사양의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본값은
0이며, 이는 한 번에 하나의 서비스 복제본으로 전달될 수 있는 동시 요청 수에 제한이 없음을 의미합니다.0보다 큰 값은 한 번에 하나의 서비스 복제본으로 전달될 수 있는 정확한 요청 수를 지정합니다. 이 예제에서는 하드 동시성 제한을 50개의 요청을 활성화합니다.선택 사항:
kn service명령을 사용하여--concurrency-limit플래그를 지정합니다.kn service create <service_name> --image <image_uri> --concurrency-limit <integer>
$ kn service create <service_name> --image <image_uri> --concurrency-limit <integer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 동시성 제한이 50개의 요청으로 서비스를 생성하는 명령 예
kn service create showcase --image quay.io/openshift-knative/showcase --concurrency-limit 50
$ kn service create showcase --image quay.io/openshift-knative/showcase --concurrency-limit 50Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.3. 동시성 대상 사용률 링크 복사링크가 클립보드에 복사되었습니다!
이 값은 자동 스케일러가 실제로 대상으로 하는 동시성 제한의 백분율을 지정합니다. 또한 복제본이 실행되는 hotness 를 지정하여 정의된 하드 제한에 도달하기 전에 자동 스케일러를 확장할 수 있습니다.
예를 들어 containerConcurrency 값이 10으로 설정되고 target-utilization-percentage 값이 70%로 설정된 경우, 자동 스케일러는 모든 기존 복제본의 평균 동시 요청 수가 7에 도달하면 새 복제본을 생성합니다. 7에서 10까지 번호가 매겨진 요청은 기존 복제본으로 계속 전송되지만 containerConcurrency 값에 도달한 후에도 추가 복제본이 필요할 것으로 예상됩니다.
target-utilization-percentage 주석을 사용하여 구성된 서비스의 예
3.4. Scale-to-zero 링크 복사링크가 클립보드에 복사되었습니다!
Knative Serving은 들어오는 수요와 일치하도록 애플리케이션의 자동 스케일링 또는 자동 스케일링을 제공합니다.
3.4.1. scale-to-zero 활성화 링크 복사링크가 클립보드에 복사되었습니다!
클러스터의 애플리케이션에 대해 enable-scale-to-zero 사양을 사용하여 전역적으로 스케일 투 0을 활성화하거나 비활성화할 수 있습니다.
사전 요구 사항
- 클러스터에 OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
- 기본 Knative Pod Autoscaler를 사용하고 있습니다. Kubernetes Horizontal Pod Autoscaler를 사용하는 경우 0으로 스케일링 기능을 사용할 수 없습니다.
프로세스
KnativeServing사용자 정의 리소스(CR)에서enable-scale-to-zero사양을 수정합니다.KnativeServing CR의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
enable-scale-to-zero사양은"true"또는"false"일 수 있습니다. true로 설정하면 scale-to-zero가 활성화됩니다. false로 설정하면 애플리케이션이 구성된 최소 스케일 바운드 로 축소됩니다. 기본값은"true"입니다.
3.4.2. scale-to-zero 유예 기간 구성 링크 복사링크가 클립보드에 복사되었습니다!
Knative Serving에서는 애플리케이션의 Pod가 0개로 자동 스케일링을 제공합니다. scale-to-zero-grace-period 사양을 사용하여 애플리케이션의 마지막 복제본이 제거되기 전에 Knative에서 0으로 스케일링할 때까지 대기하는 상한 시간 제한을 정의할 수 있습니다.
사전 요구 사항
- 클러스터에 OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
- 기본 Knative Pod Autoscaler를 사용하고 있습니다. Kubernetes Horizontal Pod Autoscaler를 사용하는 경우 scale-to-zero 기능을 사용할 수 없습니다.
프로세스
KnativeServingCR(사용자 정의 리소스)에서scale-to-zero-grace-period사양을 수정합니다.KnativeServing CR의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 유예 기간(초)입니다. 기본값은 30초입니다.
4장. OpenShift Serverless 애플리케이션 구성 링크 복사링크가 클립보드에 복사되었습니다!
4.1. Serving에 대한 멀티컨테이너 지원 링크 복사링크가 클립보드에 복사되었습니다!
단일 Knative 서비스를 사용하여 멀티컨테이너 Pod를 배포할 수 있습니다. 이 방법은 애플리케이션 책임을 작고 특수화된 부분으로 분리하는 데 유용합니다.
4.1.1. 멀티컨테이너 서비스 구성 링크 복사링크가 클립보드에 복사되었습니다!
멀티컨테이너 지원은 기본적으로 활성화되어 있습니다. 서비스에서 여러 컨테이너를 지정하여 멀티컨테이너 Pod를 생성할 수 있습니다.
4.1.2. 멀티컨테이너 서비스 검색 링크 복사링크가 클립보드에 복사되었습니다!
여러 컨테이너에 대한 준비 및 활성 프로브를 지정할 수 있습니다. 이 기능은 기본적으로 활성화되어 있지 않으며 KnativeServing CR(사용자 정의 리소스)을 사용하여 구성해야 합니다.
프로세스
KnativeServingCR에서multi-container-probing기능을 활성화하여 서비스에 대한 멀티 컨테이너 프로빙을 구성합니다.멀티컨테이너 검사 구성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Multi-container-probing 기능
업데이트된
KnativeServingCR을 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 지정된 프로브를 포함하도록 멀티컨테이너 서비스를 수정합니다.
멀티 컨테이너 검사
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.2.1. 추가 리소스 링크 복사링크가 클립보드에 복사되었습니다!
4.2. emptyDir 볼륨 링크 복사링크가 클립보드에 복사되었습니다!
emptyDir 볼륨은 Pod가 생성될 때 생성되는 빈 볼륨이며 임시 작업 디스크 공간을 제공하는 데 사용됩니다. emptyDir 볼륨은 생성된 Pod가 삭제될 때 삭제됩니다.
4.2.1. EmptyDir 확장 구성 링크 복사링크가 클립보드에 복사되었습니다!
kubernetes.podspec-volumes-emptydir 확장은 emptyDir 볼륨을 Knative Serving에서 사용할 수 있는지 여부를 제어합니다. emptyDir 볼륨을 사용하려면 다음 YAML을 포함하도록 KnativeServing CR(사용자 정의 리소스)을 수정해야 합니다.
KnativeServing CR의 예
4.3. Serving에 대한 영구 볼륨 클레임 링크 복사링크가 클립보드에 복사되었습니다!
일부 서버리스 애플리케이션에는 영구 데이터 스토리지가 필요합니다. 다양한 볼륨 유형을 구성하면 Knative 서비스에 데이터 스토리지를 제공할 수 있습니다. 서비스 제공에서는 보안,configMap,projected, emptyDir 과 같은 볼륨 유형 마운트를 지원합니다.
Knative 서비스에 대한 PVC(영구 볼륨 클레임)를 구성할 수 있습니다. 영구 볼륨 유형은 플러그인으로 구현됩니다. 사용 가능한 영구 볼륨 유형이 있는지 확인하려면 클러스터에 사용 가능한 스토리지 클래스 또는 설치된 스토리지 클래스를 확인할 수 있습니다. 영구 볼륨이 지원되지만 기능 플래그를 활성화해야 합니다.
대용량 볼륨을 마운트하면 애플리케이션 시작 시간이 상당히 지연될 수 있습니다.
4.3.1. PVC 지원 활성화 링크 복사링크가 클립보드에 복사되었습니다!
프로세스
Knative Serving에서 PVC를 사용하고 쓸 수 있도록 하려면 다음 YAML을 포함하도록
KnativeServingCR(사용자 정의 리소스)을 수정합니다.쓰기 액세스 권한이 있는 PVC 활성화
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
kubernetes.podspec-persistent-volume-claim확장은 Knative Serving에서 PV(영구 볼륨)를 사용할 수 있는지 여부를 제어합니다. -
kubernetes.podspec-persistent-volume-write확장은 쓰기 액세스 권한이 있는 Knative Serving에서 PV를 사용할 수 있는지 여부를 제어합니다.
-
PV를 클레임하려면 PV 구성을 포함하도록 서비스를 수정합니다. 예를 들어 다음 구성이 포함된 영구 볼륨 클레임이 있을 수 있습니다.
참고요청하는 액세스 모드를 지원하는 스토리지 클래스를 사용합니다. 예를 들어
ReadWriteMany액세스 모드에ocs-storagecluster-cephfs스토리지 클래스를 사용할 수 있습니다.ocs-storagecluster-cephfs스토리지 클래스가 지원되며 Red Hat OpenShift Data Foundation 에서 제공됩니다.PersistentVolumeClaim 구성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 경우 쓰기 액세스 권한이 있는 PV를 클레임하려면 다음과 같이 서비스를 수정합니다.
Knative 서비스 PVC 구성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고Knative 서비스에서 영구 스토리지를 성공적으로 사용하려면 Knative 컨테이너 사용자의 사용자 권한과 같은 추가 구성이 필요합니다.
4.4. init 컨테이너 링크 복사링크가 클립보드에 복사되었습니다!
Init 컨테이너 는 Pod의 애플리케이션 컨테이너보다 먼저 실행되는 특수 컨테이너입니다. 일반적으로 애플리케이션에 대한 초기화 논리를 구현하는 데 사용되며, 여기에는 설정 스크립트 실행 또는 필수 구성 다운로드가 포함될 수 있습니다. KnativeServing 사용자 정의 리소스(CR)를 수정하여 Knative 서비스에 init 컨테이너 사용을 활성화할 수 있습니다.
Init Container는 애플리케이션 시작 시간이 길어질 수 있으며 서버리스 애플리케이션에 주의하여 사용해야 합니다. 이 기능은 자주 확장 및 축소할 것으로 예상됩니다.
4.4.1. init 컨테이너 활성화 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- 클러스터에 OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
프로세스
kubernetes.podspec-init-containers플래그를KnativeServingCR에 추가하여 init 컨테이너 사용을 활성화합니다.KnativeServing CR의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 시작 프로브 링크 복사링크가 클립보드에 복사되었습니다!
시작 프로브는 서비스가 성공적으로 시작되었는지 여부를 확인하여 시작 프로세스가 느려지는 컨테이너의 콜드 시작 시간을 줄일 수 있습니다. 시작 프로브는 컨테이너의 초기화 단계에서만 실행되며 주기적으로 실행되지 않습니다. 시작 프로브가 실패하면 컨테이너가 정의된 restartPolicy 를 따릅니다.
4.5.1. 진행 기한 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 서비스에는 초기 시작을 완료하는 서비스의 시간 제한을 정의하는 진행 기한이 있습니다. 시작 프로브를 사용하는 경우 진행 기한이 시작 프로브에 필요한 최대 시간을 초과하도록 설정되어 있는지 확인합니다. 진행 기한이 너무 낮으면 시작 프로브가 데드라인에 도달하기 전에 완료되지 않아 서비스가 시작되지 않을 수 있습니다.
배포에 다음 조건이 발생하면 진행 기한을 늘리는 것이 좋습니다.
- 서비스 이미지는 크기 때문에 가져오는 데 시간이 오래 걸립니다.
-
초기 캐시 priming으로 인해 서비스가
준비되기까지 시간이 오래 걸립니다. - 클러스터는 자동 스케일링을 사용하여 새 Pod에 리소스를 할당합니다.
4.5.2. 시작 검사 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless Serving의 경우 시작 프로브가 기본적으로 정의되지 않습니다. 배포 구성에서 컨테이너에 대한 시작 프로브를 정의할 수 있습니다.
4.5.3. 진행률 데드 구성 링크 복사링크가 클립보드에 복사되었습니다!
진행 상황 기한 설정을 구성하여 시스템에서 Knative 버전에 대한 실패를 보고하기 전에 배포에 허용되는 최대 시간을 지정할 수 있습니다. 이 시간 제한은 초 또는 분 단위로 지정할 수 있습니다.
진행 기한을 효과적으로 구성하려면 다음 매개변수를 고려하십시오.
-
initialDelaySeconds -
failureThreshold -
periodSeconds -
timeoutSeconds
지정된 시간 제한 내에서 초기 스케일링을 달성하지 못하면 Knative Autoscaler 구성 요소가 버전을 0 으로 스케일링하고 Knative 서비스는 터미널 실패 상태가 됩니다.
기본적으로 진행 기한은 600초로 설정됩니다. 이 값은 Golang time.Duration 문자열로 지정되며 가장 가까운 초로 반올림해야 합니다.
프로세스
진행률 데드라인 설정을 구성하려면 배포 구성에서 주석을 사용합니다.
60초로 설정된 진행 상황 기한 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6. 다이제스트로 이미지 태그 확인 링크 복사링크가 클립보드에 복사되었습니다!
Knative Serving 컨트롤러가 컨테이너 레지스트리에 액세스할 수 있는 경우 서비스 버전을 생성할 때 Knative Serving에서 이미지 태그를 다이제스트로 확인합니다. 이를 tag-to-digest resolution 이라고 하며 배포에 대한 일관성을 제공하는 데 도움이 됩니다.
4.6.1. tag-to-digest 해결 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform의 컨테이너 레지스트리에 대한 컨트롤러 액세스 권한을 부여하려면 보안을 생성한 다음 컨트롤러 사용자 정의 인증서를 구성해야 합니다. KnativeServing CR(사용자 정의 리소스)에서 controller-custom-certs 사양을 수정하여 컨트롤러 사용자 정의 인증서를 구성할 수 있습니다. 보안은 KnativeServing CR과 동일한 네임스페이스에 있어야 합니다.
KnativeServing CR에 보안이 포함되어 있지 않은 경우 이 설정은 기본적으로 PKI(공개 키 인프라)를 사용합니다. PKI를 사용하면 클러스터 전체 인증서가 config-service-sa 구성 맵을 사용하여 Knative Serving 컨트롤러에 자동으로 삽입됩니다. OpenShift Serverless Operator는 config-service-sa 구성 맵을 클러스터 전체 인증서로 채우고 구성 맵을 컨트롤러의 볼륨으로 마운트합니다.
4.6.1.1. 시크릿을 사용하여 tag-to-digest 확인 구성 링크 복사링크가 클립보드에 복사되었습니다!
controller-custom-certs 사양에서 Secret 유형을 사용하는 경우 보안이 보안 볼륨으로 마운트됩니다. Knative 구성 요소는 보안에 필요한 인증서가 있다고 가정하면 시크릿을 직접 사용합니다.
사전 요구 사항
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
- OpenShift Serverless Operator 및 Knative Serving을 클러스터에 설치했습니다.
프로세스
보안을 생성합니다.
명령 예
$ oc -n knative-serving create secret generic custom-secret --from-file=<secret_name>.crt=<path_to_certificate>
$ oc -n knative-serving create secret generic custom-secret --from-file=<secret_name>.crt=<path_to_certificate>Copy to Clipboard Copied! Toggle word wrap Toggle overflow KnativeServingCR(사용자 정의 리소스)에서Secret유형을 사용하도록controller-custom-certs사양을 구성합니다.KnativeServing CR의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7. 배포 리소스 구성 링크 복사링크가 클립보드에 복사되었습니다!
Knative Serving에서 config-deployment 구성 맵에는 Knative 서비스에 대해 Kubernetes 배포 리소스가 구성된 방식을 결정하는 설정이 포함되어 있습니다. OpenShift Serverless Serving에서는 KnativeServing CR(사용자 정의 리소스)의 배포 섹션에서 이러한 설정을 구성할 수 있습니다.
deployment 섹션을 사용하여 다음을 구성할 수 있습니다.
- 태그 확인
- 런타임 환경
- 진행 기한
4.7.1. 태그 확인 건너뛰기 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless Serving에서 태그 확인을 건너뛰면 컨테이너 레지스트리에 대한 불필요한 쿼리를 피하여 배포 속도를 높일 수 있으므로 레지스트리 가용성에 대한 대기 시간과 종속성을 줄일 수 있습니다.
KnativeServing 사용자 정의 리소스(CR)의 registriesSkippingTag Re goal 설정을 수정하여 태그 확인을 건너뛰도록 Serving을 구성할 수 있습니다.
프로세스
KnativeServingCR에서 태그 resoution을 건너뛸 레지스트리 목록으로registriesSkippingTagRery 설정을 수정합니다.구성된 태그 확인 건너뛰기 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.2. 선택 가능한 RuntimeClassName 구성 링크 복사링크가 클립보드에 복사되었습니다!
KnativeServing 사용자 정의 리소스(CR)에서 runtime-class-name 설정을 업데이트하여 배포에 대한 특정 RuntimeClassName 리소스를 설정하도록 OpenShift Serverless Serving을 구성할 수 있습니다.
이 설정은 서비스 레이블과 상호 작용하여 기본 RuntimeClassName 또는 서비스와 연결된 가장 많은 레이블과 일치하는 항목을 적용합니다.
프로세스
KnativeServingCR에서runtime-class-name설정을 구성합니다.구성된
runtime-class-name설정의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.3. 진행 기한 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 서비스에는 초기 시작을 완료하는 서비스의 시간 제한을 정의하는 진행 기한이 있습니다.
배포에 다음 조건이 발생하면 진행 기한을 늘리는 것이 좋습니다.
- 서비스 이미지는 크기 때문에 가져오는 데 시간이 오래 걸립니다.
-
초기 캐시 priming으로 인해 서비스가
준비되기까지 시간이 오래 걸립니다. - 클러스터는 자동 스케일링을 사용하여 새 Pod에 리소스를 할당합니다.
지정된 시간 제한 내에서 초기 스케일링을 달성하지 못하면 Knative Autoscaler 구성 요소가 버전을 0 으로 스케일링하고 서비스는 터미널 실패 상태로 들어갑니다.
4.7.3.1. 진행률 데드 구성 링크 복사링크가 클립보드에 복사되었습니다!
시스템에서 Knative 버전 오류를 보고하기 전에 배포 진행 상황에 대해 허용되는 최대 시간(초) 또는 분을 설정하도록 진행 상황 기한 설정을 구성합니다.
기본적으로 진행 기한은 600초로 설정됩니다. 이 값은 Go time.Duration 문자열로 지정되며 가장 가까운 초로 반올림해야 합니다.
프로세스
KnativeServing 사용자 정의 리소스(CR)를 수정하여 진행 기한을 구성합니다.
KnativeServingCR에서progressDeadline값을 설정합니다.60초로 설정된 진행 상황 기한 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.8. Kourier 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kourier는 Knative Serving의 경량 Kubernetes 네이티브 Ingress입니다. Kourier는 Knative의 게이트웨이 역할을 하며 HTTP 트래픽을 Knative 서비스로 라우팅합니다.
4.8.1. 현재 Envoy 부트스트랩 구성에 액세스 링크 복사링크가 클립보드에 복사되었습니다!
Kourier의 Envoy 프록시 구성 요소는 Knative 서비스에 대한 인바운드 및 아웃바운드 HTTP 트래픽을 처리합니다. 기본적으로 Kourier에는 knative-serving-ingress 네임스페이스의 kourier-bootstrap 구성 맵에 Envoy 부트스트랩 구성이 포함되어 있습니다.
프로세스
현재 Envoy 부트스트랩 구성을 가져오려면 다음 명령을 실행합니다.
명령 예
oc get cm kourier-bootstrap -n knative-serving-ingress -o yaml
$ oc get cm kourier-bootstrap -n knative-serving-ingress -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 기본 구성을 사용하면 example 명령은 다음 발췌가 포함된 출력을 생성합니다.
출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터출력 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow BinaryData출력 예Events: <none>
Events: <none>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.8.2. Kourier getaways의 kourier-bootstrap 사용자 정의 링크 복사링크가 클립보드에 복사되었습니다!
Kourier의 Envoy 프록시 구성 요소는 Knative 서비스에 대한 인바운드 및 아웃바운드 HTTP 트래픽을 처리합니다. 기본적으로 Kourier에는 knative-serving-ingress 네임스페이스의 kourier-bootstrap 구성 맵에 Envoy 부트스트랩 구성이 포함되어 있습니다. 이 구성 맵을 사용자 정의 맵으로 변경할 수 있습니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
프로세스
KnativeServingCR(사용자 정의 리소스)에서spec.ingress.kourier.bootstrap-configmap필드를 변경하여 사용자 정의 부트스트랩 구성 맵을 지정합니다.KnativeServing CR의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.8.3. 관리자 인터페이스 액세스 활성화 링크 복사링크가 클립보드에 복사되었습니다!
envoy 부트스트랩 구성을 변경하여 관리자 인터페이스에 액세스할 수 있습니다.
이 절차에서는 envoy 부트스트랩 구성을 변경하면 Knative에 오류가 발생할 수 있으므로 Knative에 대한 충분한 지식이 있다고 가정합니다. Red Hat은 제품에 테스트되거나 제공되지 않는 사용자 정의 구성을 지원하지 않습니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
프로세스
관리자 인터페이스 액세스를 활성화하려면 부트스트랩 구성 맵에서 이 구성을 찾습니다.
pipe: path: /tmp/envoy.admin
pipe: path: /tmp/envoy.adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이를 다음 구성으로 대체합니다.
socket_address: address: 127.0.0.1 port_value: 9901
socket_address:1 address: 127.0.0.1 port_value: 9901Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이 구성을 사용하면 루프백 주소(127.0.0.1) 및 포트 9901에서 Envoy 관리자 인터페이스에 액세스할 수 있습니다.
service_stats클러스터 구성과admin구성에socket_address구성을 적용합니다.첫 번째는
service_stats클러스터 구성에 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 두 번째는
관리자구성에 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.9. 제한적인 네트워크 정책 링크 복사링크가 클립보드에 복사되었습니다!
4.9.1. 제한적인 네트워크 정책이 있는 클러스터 링크 복사링크가 클립보드에 복사되었습니다!
여러 사용자가 액세스할 수 있는 클러스터를 사용하는 경우 클러스터는 네트워크 정책을 사용하여 네트워크를 통해 서로 통신할 수 있는 pod, 서비스 및 네임스페이스를 제어할 수 있습니다. 클러스터에서 제한적인 네트워크 정책을 사용하는 경우 Knative 시스템 Pod가 Knative 애플리케이션에 액세스할 수 없습니다. 예를 들어 네임스페이스에 모든 요청을 거부하는 다음 네트워크 정책이 있는 경우 Knative 시스템 Pod가 Knative 애플리케이션에 액세스할 수 없습니다.
네임스페이스에 대한 모든 요청을 거부하는 NetworkPolicy 오브젝트의 예
4.9.2. 제한적인 네트워크 정책을 사용하여 클러스터에서 Knative 애플리케이션과의 통신 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Knative 시스템 Pod에서 애플리케이션에 액세스할 수 있도록 하려면 각 Knative 시스템 네임스페이스에 레이블을 추가한 다음 이 레이블이 있는 다른 네임스페이스의 네임스페이스에 액세스할 수 있는 애플리케이션 네임스페이스에 NetworkPolicy 오브젝트를 생성해야 합니다.
클러스터의 비Knative 서비스에 대한 요청을 거부하는 네트워크 정책은 이러한 서비스에 대한 액세스를 계속 차단합니다. 그러나 Knative 시스템 네임스페이스에서 Knative 애플리케이션으로의 액세스를 허용하면 클러스터의 모든 네임스페이스에서 Knative 애플리케이션에 액세스할 수 있습니다.
클러스터의 모든 네임스페이스에서 Knative 애플리케이션에 대한 액세스를 허용하지 않으려면 Knative 서비스에 JSON 웹 토큰 인증을 대신 사용할 수 있습니다. Knative 서비스에 대한 JSON 웹 토큰 인증에는 Service Mesh가 필요합니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. - OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
프로세스
애플리케이션에 액세스해야 하는 각 Knative 시스템 네임스페이스에
knative.openshift.io/system-namespace=true레이블을 추가합니다.knative-serving네임스페이스에 레이블을 지정합니다.oc label namespace knative-serving knative.openshift.io/system-namespace=true
$ oc label namespace knative-serving knative.openshift.io/system-namespace=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow knative-serving-ingress네임스페이스에 레이블을 지정합니다.oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true
$ oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow knative-eventing네임스페이스에 레이블을 지정합니다.oc label namespace knative-eventing knative.openshift.io/system-namespace=true
$ oc label namespace knative-eventing knative.openshift.io/system-namespace=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow knative-kafka네임스페이스에 레이블을 지정합니다.oc label namespace knative-kafka knative.openshift.io/system-namespace=true
$ oc label namespace knative-kafka knative.openshift.io/system-namespace=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
애플리케이션 네임스페이스에
NetworkPolicy오브젝트를 생성하여knative.openshift.io/system-namespace레이블이 있는 네임스페이스에서 액세스를 허용합니다.NetworkPolicy오브젝트 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.10. 버전 제한 시간 구성 링크 복사링크가 클립보드에 복사되었습니다!
버전에 대한 시간 초과 기간을 전역적으로 또는 개별적으로 구성하여 요청에 소요되는 시간을 제어할 수 있습니다.
4.10.1. 버전 제한 시간 구성 링크 복사링크가 클립보드에 복사되었습니다!
요청에 따라 버전 시간 초과에 대한 기본 시간(초)을 구성할 수 있습니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- OpenShift Container Platform에 대한 클러스터 관리자 권한 또는 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 관리자 권한이 있습니다.
프로세스
버전 시간 초과를 구성하는 적절한 방법을 선택합니다.
버전 시간 초과를 전역적으로 구성하려면
KnativeServing사용자 정의 리소스(CR)에서revision-timeout-seconds필드를 설정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스 정의에서
timeoutSeconds필드를 설정하여 버전당 시간 제한을 구성하려면 다음을 수행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.10.2. 최대 버전 제한 시간 구성 링크 복사링크가 클립보드에 복사되었습니다!
최대 버전 제한 시간을 설정하면 버전이 특정 제한을 초과할 수 없도록 할 수 있습니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- OpenShift Container Platform에 대한 클러스터 관리자 권한 또는 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 관리자 권한이 있습니다.
프로세스
최대 버전 시간 제한을 구성하려면
KnativeServingCR(사용자 정의 리소스)에서max-revision-timeout-seconds필드를 설정합니다.If this value is increased, the activator `terminationGracePeriodSeconds` should also be increased to prevent in-flight requests being disrupted.
If this value is increased, the activator `terminationGracePeriodSeconds` should also be increased to prevent in-flight requests being disrupted.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5장. 서버리스 애플리케이션 디버깅 링크 복사링크가 클립보드에 복사되었습니다!
다양한 방법을 사용하여 Serverless 애플리케이션의 문제를 해결할 수 있습니다.
5.1. 터미널 출력 확인 링크 복사링크가 클립보드에 복사되었습니다!
배포 명령 출력을 확인하여 배포 성공 여부를 확인할 수 있습니다. 배포 프로세스가 종료되면 배포에 실패한 이유를 설명하는 오류 메시지가 출력에 표시되어야 합니다. 이러한 유형의 오류는 매니페스트가 잘못 구성되었거나 잘못된 명령으로 인해 가장 많이 발생합니다.
프로세스
애플리케이션을 배포하고 관리하는 클라이언트에서 명령 출력을 엽니다. 다음 예제는 실패한
oc apply명령 뒤에 표시될 수 있는 오류입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 출력은 경로 트래픽 백분율을 100으로 구성해야 함을 나타냅니다.
5.2. Pod 상태 확인 링크 복사링크가 클립보드에 복사되었습니다!
Serverless 애플리케이션의 문제를 식별하려면 Pod 오브젝트의 상태를 확인해야 할 수 있습니다.
프로세스
다음 명령을 실행하여 배포의 모든 Pod를 나열합니다.
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME READY STATUS RESTARTS AGE configuration-example-00001-deployment-659747ff99-9bvr4 2/2 Running 0 3h configuration-example-00002-deployment-5f475b7849-gxcht 1/2 CrashLoopBackOff 2 36s
NAME READY STATUS RESTARTS AGE configuration-example-00001-deployment-659747ff99-9bvr4 2/2 Running 0 3h configuration-example-00002-deployment-5f475b7849-gxcht 1/2 CrashLoopBackOff 2 36sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에서 상태에 대한 선택한 데이터가 있는 모든 Pod를 볼 수 있습니다.
다음 명령을 실행하여 Pod 상태에 대한 자세한 정보를 확인합니다.
출력 예
oc get pod <pod_name> --output yaml
$ oc get pod <pod_name> --output yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에서
conditions및containerStatuses필드는 디버깅에 특히 유용할 수 있습니다.
5.3. 버전 상태 확인 링크 복사링크가 클립보드에 복사되었습니다!
Serverless 애플리케이션의 문제를 식별하려면 버전 상태를 확인해야 할 수 있습니다.
프로세스
Configuration오브젝트로 경로를 구성하는 경우 다음 명령을 실행하여 배포에 생성된Revision오브젝트의 이름을 가져옵니다.oc get configuration <configuration_name> --output jsonpath="{.status.latestCreatedRevisionName}"$ oc get configuration <configuration_name> --output jsonpath="{.status.latestCreatedRevisionName}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift
Route리소스를 정의하여 라우팅 설정을 지정하는Route.yaml파일에서 구성 이름을 찾을 수 있습니다.리버전으로 경로를 직접 구성하는 경우
Route.yaml파일에서 버전 이름을 조회합니다.다음 명령을 실행하여 버전 상태를 쿼리합니다.
oc get revision <revision-name> --output yaml
$ oc get revision <revision-name> --output yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 준비된 버전에는
ServiceReady,status: "True",type: Ready조건이 있어야 합니다. 이러한 조건이 있는 경우 Pod 상태 또는 Istio 라우팅을 확인할 수 있습니다. 그렇지 않으면 리소스 상태에 오류 메시지가 포함됩니다.
5.4. Ingress 상태 확인 링크 복사링크가 클립보드에 복사되었습니다!
Serverless 애플리케이션의 문제를 식별하려면 Ingress 상태를 확인해야 할 수 있습니다.
프로세스
다음 명령을 실행하여 Ingress의 IP 주소를 확인합니다.
oc get svc -n istio-system istio-ingressgateway
$ oc get svc -n istio-system istio-ingressgatewayCopy to Clipboard Copied! Toggle word wrap Toggle overflow istio-ingressgateway서비스는 Knative에서 사용하는LoadBalancer서비스입니다.외부 IP 주소가 없는 경우 다음 명령을 실행합니다.
oc describe svc istio-ingressgateway -n istio-system
$ oc describe svc istio-ingressgateway -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 IP 주소가 프로비저닝되지 않은 이유를 출력합니다. 대부분의 경우 할당량 문제로 인해 발생할 수 있습니다.
5.5. 경로 상태 확인 링크 복사링크가 클립보드에 복사되었습니다!
경우에 따라 Route 오브젝트에 문제가 있습니다. OpenShift CLI(oc)를 사용하여 해당 상태를 확인할 수 있습니다.
프로세스
다음 명령을 실행하여 애플리케이션을 배포한
Route오브젝트의 상태를 확인합니다.oc get route <route_name> --output yaml
$ oc get route <route_name> --output yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;route_name>을Route오브젝트의 이름으로 바꿉니다.status오브젝트의conditions오브젝트는 실패의 경우 이유를 표시합니다.
5.6. Ingress 및 Istio 라우팅 확인 링크 복사링크가 클립보드에 복사되었습니다!
Istio를 Ingress 계층으로 사용하면 Ingress 및 Istio 라우팅에 문제가 있습니다. OpenShift CLI(oc)를 사용하여 세부 정보를 확인할 수 있습니다.
프로세스
다음 명령을 실행하여 모든 Ingress 리소스 및 해당 레이블을 나열합니다.
oc get ingresses.networking.internal.knative.dev -o=custom-columns='NAME:.metadata.name,LABELS:.metadata.labels'
$ oc get ingresses.networking.internal.knative.dev -o=custom-columns='NAME:.metadata.name,LABELS:.metadata.labels'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME LABELS helloworld-go map[serving.knative.dev/route:helloworld-go serving.knative.dev/routeNamespace:default serving.knative.dev/service:helloworld-go]
NAME LABELS helloworld-go map[serving.knative.dev/route:helloworld-go serving.knative.dev/routeNamespace:default serving.knative.dev/service:helloworld-go]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 출력에서
serving.knative.dev/route및serving.knative.dev/routeNamespace는 Ingress 리소스가 있는 경로를 나타냅니다.경로및 Ingress가 나열되어야 합니다.Ingress가 없는 경우 경로 컨트롤러는
경로또는Service오브젝트에서 대상으로 하는Revision오브젝트가 준비되지 않은 것으로 가정합니다. 다른 디버깅 절차를 진행하여버전준비 상태를 진단합니다.Ingress가 나열된 경우 다음 명령을 실행하여 경로에 대해 생성된
ClusterIngress오브젝트를 검사합니다.oc get ingresses.networking.internal.knative.dev <ingress_name> --output yaml
$ oc get ingresses.networking.internal.knative.dev <ingress_name> --output yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력의 status 섹션에서
type=Ready조건이True인 경우 Ingress가 올바르게 작동합니다. 그렇지 않으면 출력에 오류 메시지가 포함됩니다.Ingress의 상태가
Ready이면 해당VirtualService오브젝트가 있습니다. 다음 명령을 실행하여VirtualService오브젝트의 구성을 확인합니다.oc get virtualservice -l networking.internal.knative.dev/ingress=<ingress_name> -n <ingress_namespace> --output yaml
$ oc get virtualservice -l networking.internal.knative.dev/ingress=<ingress_name> -n <ingress_namespace> --output yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow VirtualService오브젝트의 네트워크 구성이Ingress및Route오브젝트의 네트워크 구성과 일치해야 합니다.VirtualService오브젝트가Status필드를 노출하지 않기 때문에 설정이 전파될 때까지 기다려야 할 수 있습니다.
6장. Kourier 및 Istio 인그레스 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless에서는 다음 두 가지 수신 솔루션을 지원합니다.
- Kourier
- Red Hat OpenShift Service Mesh를 사용하는 Istio
기본값은 Kourier입니다.
6.1. Kourier 및 Istio 인그레스 솔루션 링크 복사링크가 클립보드에 복사되었습니다!
6.1.1. Kourier 링크 복사링크가 클립보드에 복사되었습니다!
Kourier는 OpenShift Serverless의 기본 수신 솔루션입니다. 다음과 같은 속성이 있습니다.
- envoy 프록시를 기반으로 합니다.
- 단순하고 가벼움이 있습니다.
- Serverless에서 기능 집합을 제공하는 데 필요한 기본 라우팅 기능을 제공합니다.
- 기본 관찰 기능 및 메트릭을 지원합니다.
- Knative 서비스 라우팅의 기본 TLS 종료를 지원합니다.
- 제한된 구성 및 확장 옵션만 제공합니다.
6.1.2. OpenShift Service Mesh를 사용하는 Istio 링크 복사링크가 클립보드에 복사되었습니다!
Istio를 OpenShift Serverless의 수신 솔루션으로 사용하면 Red Hat OpenShift Service Mesh가 제공하는 기능을 기반으로 하는 추가 기능 세트가 활성화됩니다.
- 모든 연결 간의 기본 mTLS
- 서버리스 구성 요소는 서비스 메시의 일부입니다.
- 추가 관찰 기능 및 메트릭
- 인증 및 인증 지원
- Red Hat OpenShift Service Mesh에서 지원하는 사용자 정의 규칙 및 구성
그러나 추가 기능은 더 높은 오버헤드와 리소스 소비를 제공합니다. 자세한 내용은 Red Hat OpenShift Service Mesh 설명서를 참조하십시오.
Istio 요구 사항 및 설치 지침은 Serverless 문서의 "OpenShift Serverless를 사용하여 서비스 메시 통합" 섹션을 참조하십시오.
6.1.3. 트래픽 구성 및 라우팅 링크 복사링크가 클립보드에 복사되었습니다!
Kourier 또는 Istio 사용 여부에 관계없이 Knative 서비스의 트래픽은 net-kourier-controller 또는 net-istio-controller 에 의해 knative-serving 네임스페이스에 구성됩니다.
컨트롤러는 KnativeService 및 해당 하위 사용자 정의 리소스를 읽고 수신 솔루션을 구성합니다. 두 수신 솔루션 모두 트래픽 경로의 일부가 되는 수신 게이트웨이 Pod를 제공합니다. 두 수신 솔루션은 모두 Envoy를 기반으로 합니다. 기본적으로 Serverless에는 각 KnativeService 오브젝트에 대해 두 개의 경로가 있습니다.
-
OpenShift 라우터에서 전달하는 클러스터 외부 경로 (예:
myapp-namespace.example.com) -
클러스터 도메인을 포함하는 클러스터 로컬 경로 (예:
myapp.namespace.svc.cluster.local) 이 도메인은 Knative 또는 기타 사용자 워크로드에서 Knative 서비스를 호출하는 데 사용할 수 있습니다.
수신 게이트웨이는 serve 모드 또는 프록시 모드에서 요청을 전달할 수 있습니다.
- serve 모드에서 요청은 Knative 서비스의 Queue-Proxy 사이드카 컨테이너로 직접 이동합니다.
-
프록시 모드에서 요청은 먼저
knative-serving네임스페이스의 Activator 구성 요소를 통과합니다.
모드 선택은 Knative, Knative 서비스 및 현재 트래픽의 구성에 따라 달라집니다. 예를 들어 Knative 서비스가 0으로 스케일링되면 새 Knative 서비스 Pod가 시작될 때까지 버퍼 역할을 하는 Activator 구성 요소로 요청이 전송됩니다.
7장. 전송 암호화 제공 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless Serving 전송 암호화를 활성화하여 TLS를 사용하여 보안 및 암호화된 HTTPS 연결을 통해 데이터를 전송할 수 있습니다.
OpenShift Serverless Serving 전송 암호화는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
전송 암호화 제공은 Kourier에서 Ingress 계층으로만 사용할 수 있습니다. Red Hat OpenShift Service Mesh의 경우 서비스 메시 mTLS 기능을 사용하여 암호화된 트래픽을 확인합니다.
7.1. Serving 전송 암호화 개요 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless Serving 전송 암호화에는 다음 세 부분이 있습니다.
- 외부 도메인 암호화
-
클러스터 외부에 있는 수신 계층의 암호화입니다. 예를 들어
myapp-<namespace>.example.com과 같은 클러스터 외부 도메인은 다음과 같습니다. - 클러스터 로컬 암호화
-
클러스터 내부 수신 계층의 암호화입니다. 예를 들어
myapp.<namespace>.svc.cluster.local과 같은 클러스터 로컬도메인입니다. - 시스템 내부 암호화
-
ingress-gateway,activator및queue-proxyKnative 내부 구성 요소 간의 전송 암호화입니다.
Kubernetes PreStopHooks, metadata, metrics를 포함한 컨트롤 플레인 트래픽에는 사용자 데이터가 포함되어 있지 않으며 암호화되지 않습니다.
서로 다른 부분은 서로 독립적이며 개별적으로 활성화 및 비활성화할 수 있습니다. 동일하거나 다른 인증 기관(CA)을 사용하여 필요한 인증서에 서명할 수 있습니다.
다이어그램은 전송 암호화에 대한 자세한 내용은 OpenShift Serverless Serving 전송 암호화를 참조하십시오.
7.1.1. 외부 도메인 암호화 링크 복사링크가 클립보드에 복사되었습니다!
외부 도메인의 전송 암호화는 OpenShift Container Platform 인그레스 또는 Red Hat OpenShift Service Mesh 중 하나인 클러스터의 수신 계층에 의해 처리됩니다.
7.1.2. 클러스터 로컬 암호화 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 로컬 암호화를 사용하면 클러스터 로컬 도메인에 대한 전송 암호화를 사용할 수 있습니다. 다음과 같은 속성이 있습니다.
-
CN(Certificate Common Name) 또는 SAN(Subject Alternative Name)에는 Knative 서비스의 클러스터 로컬 도메인(예:
myapp.namespace.svc.cluster.local,myapp.namespace.svc,myapp.namespace)이 포함되어 있습니다. -
ingress-controller구성 요소의 cluster-local 끝점은 SNI를 사용하여 인증서를 선택합니다. -
인증서를 생성하려면 Knative에서
cert-manager를 사용합니다. 이 에서는 기능이 작동하도록 설치하고 구성해야 합니다. 자세한 내용은 cert-manager Operator for Red Hat OpenShift 에서 참조하십시오.
호출자는 클러스터 로컬 인증서에 서명한 CA를 신뢰해야 합니다. OpenShift Serverless의 범위를 벗어납니다.
7.1.3. 시스템 내부 암호화 링크 복사링크가 클립보드에 복사되었습니다!
system-internal 암호화는 ingress-gateway,activator 및 queue-proxy Knative 내부 구성 요소에 대한 전송 암호화를 활성화합니다. 이러한 구성 요소는 이 구성이 사용될 때 TLS 끝점을 호스팅합니다.
이 기능을 사용하려면 다음 사전 요구 사항을 충족해야 합니다.
-
OpenShift Serverless에서 인증서를 가져오려면
cert-manager를 설치하고 구성해야 합니다. - 특정 SAN은 각 연결을 확인하는 데 사용됩니다. 각 구성 요소는 인증서에 서명한 CA를 신뢰해야 합니다. 이 요구 사항을 충족하기 위해 OpenShift Serverless 시스템 구성 요소는 CA 번들을 사용하고 신뢰합니다. 클러스터 관리자가 CA 번들을 제공해야 합니다.
7.2. 인증서 발행자 선택 링크 복사링크가 클립보드에 복사되었습니다!
발행자는 cert-manager 발행자 및 클러스터 발행자를 나타냅니다. 인증서 서명 요청을 준수하여 서명된 인증서를 생성할 수 있는 CA(인증 기관)를 나타냅니다. 자세한 내용은 발급자에 대한 cert-manager 설명서를 참조하십시오.
사용하는 암호화 기능에 따라 OpenShift Serverless에서 인증서 발행자가 특정 인증서에 서명할 수 있어야 합니다. 인증서 발행자를 식별하려면 다음 예제가 포함된 cert-manager 통합 목록을 참조하십시오.
- Kubernetes 보안에 저장된 사용자 정의 CA
- HTTP-01 과제
- DNS-01 과제
- 자체 서명된 발행자
7.2.1. 호환되는 인증서 발행자 링크 복사링크가 클립보드에 복사되었습니다!
각 Knative Serving 암호화 기능에 대해 모든 발급자 유형이 작동하는 것은 아닙니다.
클러스터 로컬 암호화의 경우 발급자는 다음 클러스터 로컬 도메인 유형의 인증서에 서명할 수 있어야 합니다.
-
myapp.<namespace> -
myapp.<namespace>.svc -
myapp.<namespace>.svc.cluster.local
일반적으로 CA는 클러스터 내에 없으므로 ACME(Automated Certificate Management Environment) 프로토콜(DNS01/HTTP01)을 사용하여 확인할 수 없습니다.
cert-managerCA 발행자와 같은 이러한 인증서를 생성할 수 있는 발급자를 사용할 수 있습니다.-
시스템 내부 암호화의 경우 발행자는 다음 SAN(Subject Alternative Names)을 사용하여 인증서에 서명할 수 있어야 합니다.
-
kn-routing -
kn-user-<namespace> 형식의 이름입니다. 여기서 <namespace>는 Knative 서비스가 생성되는 네임스페이스입니다. -
data-plane.knative.dev
Knative에는 내부 구성 요소 간 연결을 확인하려면 이러한 SAN이 필요합니다. ACME 프로토콜(DNS01/HTTP01)을 사용할 수 없으므로 이러한 인증서를 생성할 수 있는 발행자를 구성해야 합니다(예:
cert-managerCA 발행자).-
7.3. OpenShift Serverless 전송 암호화 설정 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
- {oc-first}를 설치합니다.
- cert-manager Operator for Red Hat OpenShift를 설치합니다.
- OpenShift Serverless Operator를 설치합니다.
cert-manager Operator for Red Hat OpenShift를 설치하기 전에 OpenShift Serverless Operator를 설치하는 경우 knative-serving 네임스페이스에서 컨트롤러 및 활성화자 배포를 다시 시작해야 합니다. 이러한 배포를 다시 시작하지 않으면 Knative에서 필요한 cert-manager 리소스가 생성되지 않아 Knative 서비스가 보류되어 Knative Serving cert-manager 통합을 활성화하지 못합니다.
7.3.1. 자체 서명 클러스터 발행자 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 루트 인증서로 SelfSigned 발행자를 사용합니다. 이 방법의 영향 및 제한 사항에 대한 자세한 내용은 SelfSigned cert-manager 설명서를 참조하십시오.
회사별 개인 키 인프라(PKI)를 관리하는 경우 CA 발행자를 사용합니다. 자세한 내용은 CA 발행자에 대한 cert-manager 설명서를 참조하십시오.
프로세스
자체 서명된ClusterIssuer사용자 정의 리소스(CR)를 생성합니다.ClusterIssuer CR의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
ClusterIssuerCR을 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ClusterIssuerCR을 참조하는 루트 인증서를 생성합니다.루트 인증서 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
인증서CR을 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.2. Serving에서 사용할 ClusterIssuer 생성 링크 복사링크가 클립보드에 복사되었습니다!
Serving으로 인증서 사용을 활성화하려면 클러스터 발행자를 생성해야 합니다.
프로세스
Serving용
knative-serving-ca-issuerClusterIssuer를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OpenShift Serverless Serving 구성 요소에서 새 인증서에 사용할 수 있는 인증서가 포함된
cert-managerOperator for Red Hat OpenShift 네임 스페이스(기본적으로 cert-manager)의 시크릿 이름입니다.
다음 명령을 실행하여
ClusterIssuer리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.3. 전송 암호화 구성 링크 복사링크가 클립보드에 복사되었습니다!
전송 암호화 구성은 다음 두 부분으로 구성됩니다.
사용할
ClusterIssuer발행자를 지정합니다.-
clusterLocalIssuerRef: Ingress에 사용되는 cluster-local-domain 인증서에 대한 issuer입니다. -
systemInternalIssuerRef: Knative 내부 구성 요소에서 사용하는 system-internal-tls 인증서에 대한 인증서의 경우 발행자입니다.
-
사용할 전송 암호화 기능 지정:
-
cluster-local-domain-tls: cluster-local 도메인에 대한 전송 암호화 기능 사용 -
system-internal-tls: OpenShift Serverless Serving 내부 구성 요소에 대한 전송 암호화 기능을 활성화합니다.
-
프로세스
KnativeServing리소스에서 전송 암호화를 활성화합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
KnativeServing리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 필요한 경우 Ingress 컨트롤러의
defaultCertificate값을 변경합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow defaultCertificate값을 변경한 경우KnativeServing사용자 정의 리소스의openshift-ingress-default-certificate필드에 사용자 정의 인증서 이름을 지정해야 합니다.예를 들어 사용자 정의 인증서 이름이
ca-ingress-cert인 경우 다음 구성을 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow cluster-local-domain-tls또는system-internal-tls를 활성화한 경우 다음 명령을 실행하여 컨트롤러 구성 요소를 다시 시작합니다.중요cluster-local-domain-tls또는system-internal-tls기능이 활성화된 경우 Knative Servingcert-manager통합을 활성화하려면 컨트롤러 구성 요소를 다시 시작해야 합니다.oc rollout restart deploy/controller -n knative-serving
$ oc rollout restart deploy/controller -n knative-servingCopy to Clipboard Copied! Toggle word wrap Toggle overflow system-internal-tls를 활성화한 경우 다음 명령을 실행하여 Activator 구성 요소를 다시 시작합니다.중요system-internal-tls기능이 활성화되면 런타임 중에 사용할 수 없으므로 활성화 구성 요소를 다시 시작하여 내부 웹 서버를 재구성해야 합니다.oc rollout restart deploy/activator -n knative-serving
$ oc rollout restart deploy/activator -n knative-servingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4. 신뢰 구성 링크 복사링크가 클립보드에 복사되었습니다!
전송 암호화 기능을 활성화할 때 호출하는 모든 클라이언트가 전송 암호화에 사용되는 인증서를 발급하도록 CA(인증 기관)를 신뢰해야 합니다.
신뢰를 보장해야 하는 여러 위치가 있습니다.
- 브라우저 또는 기타 애플리케이션과 같은 클러스터 외부 클라이언트입니다. OpenShift Serverless의 범위를 벗어납니다.
- Activator, Queue-Proxy, Ingress-Controller와 같은 OpenShift Serverless 시스템 구성 요소.
- Knative 서비스 또는 기타 워크로드와 같은 클러스터 내부 클라이언트입니다.
7.4.1. OpenShift Serverless Serving 구성 요소 및 Knative 서비스에 대한 신뢰 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless Serving 구성 요소 및 Knative 서비스가 인증서를 발급하는 CA를 신뢰하도록 하려면 networking.knative.dev/trust-bundle: true 라벨을 사용하여 다음 네임스페이스에 ConfigMap을 생성할 수 있습니다.
knative-serving- OpenShift Serverless Serving의 시스템 구성 요소입니다.
knative-serving-ingress- OpenShift Serverless Serving의 수신 계층입니다.
Istio-system또는 자체 Service Mesh 네임스페이스- Service Mesh 통합이 활성화된 경우
Knative는 이름에 관계없이 ConfigMap의 모든 데이터 키를 이 라벨을 사용하여 읽습니다. 하나의 키는 하나 이상의 CA 또는 중간 인증서를 포함할 수 있습니다. 유효한 경우 Knative 구성 요소의 신뢰 저장소에 추가됩니다.
다음은 예제 ConfigMap입니다.
CA 번들 ConfigMap이 생성 또는 업데이트되면 Serving 구성 요소가 자동으로 이를 선택하여 CA 또는 중간 인증서를 CA 신뢰 저장소에 추가합니다. 신뢰 저장소는 모든 새로운 HTTP 연결에 대해 새로 고쳐집니다.
7.4.2. 사용자 정의 워크로드에 대한 신뢰 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless Serving이 모든 워크로드를 제어하고 신뢰를 관리하는 것은 런타임 및 언어에 따라 크게 달라지므로 사용자 지정 워크로드는 OpenShift Serverless의 범위를 벗어납니다. 다음은 사용자 정의 워크로드에 대한 기타 옵션입니다.
- 빌드 시 컨테이너 이미지에 CA 번들 추가 이렇게 하면 CA가 회전할 때 모든 애플리케이션을 다시 빌드하고 재배포해야 하므로 CA 교체가 어려워집니다.
- 시크릿 또는 ConfigMap과 같은 파일 시스템에 CA 번들을 마운트하고 애플리케이션에서 TLS 연결을 확인하는 데 사용합니다.
- 환경 변수에서 CA 번들을 읽고 애플리케이션이 TLS 연결을 확인하는 데 사용하는지 확인합니다.
- Kubernetes API를 사용하여 시크릿 또는 ConfigMap에서 CA 번들에 액세스하고 애플리케이션에서 TLS 연결을 확인하는 데 사용하는지 확인합니다.
7.5. 원활한 CA 교체 확인 링크 복사링크가 클립보드에 복사되었습니다!
원활한 CA 교체를 보장하는 것은 서비스 다운 타임을 피하거나 긴급 상황을 처리하는 데 필수적입니다.
프로세스
- 새 CA 인증서를 생성합니다.
- "OpenShift Serverless Operator Serving 구성 요소 및 Knative 서비스" 섹션에 설명된 대로 새 CA 인증서의 공개 키를 CA 신뢰 번들에 추가합니다. 기존 CA의 공개 키를 유지합니다.
- 모든 클라이언트가 최신 CA 신뢰 번들 세트를 사용하는지 확인합니다. OpenShift Serverless Serving 구성 요소는 변경된 CA 신뢰 번들을 자동으로 다시 로드합니다.
- 신뢰 번들을 사용하는 사용자 정의 워크로드가 있는 경우 그에 따라 다시 로드하거나 다시 시작합니다.
-
새 CA 인증서가 포함된 시크릿을 참조하도록
knative-serving-ca-issuer클러스터 발행자를 업데이트합니다. -
cert-manager가 모든 인증서를 갱신하거나 이를 적용하여 모든 인증서를 갱신할 때까지 기다립니다. 자세한 내용은cert-manager설명서를 참조하십시오. - CA 순환이 완전히 완료되면 이전 CA의 공개 키를 신뢰 번들 configmap에서 제거할 수 있습니다. 모든 구성 요소가 변경 사항을 적용할 수 있는 충분한 시간을 허용합니다.
7.6. 전송 암호화가 활성화되었는지 확인 링크 복사링크가 클립보드에 복사되었습니다!
프로세스
Knative 서비스를 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 Knative 서비스 YAML을 적용합니다.
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Knative 서비스의 상태를 검사합니다.
명령 예
oc get ksvc -n test-namespace -o yaml
$ oc get ksvc -n test-namespace -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
cluster-local-domain-tls를 활성화하면 HTTPS URL이 표시됩니다.
system-internal-tls가 활성화되어 있는지 확인하려면 다음 명령을 실행하여 Queue-Proxy 로그의 출력을 확인합니다.명령 예
oc logs your-pod -n test-namespace -c queue-proxy | grep -E 'certDir|Certificate|tls'
$ oc logs your-pod -n test-namespace -c queue-proxy | grep -E 'certDir|Certificate|tls'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 유사한 행이 표시되면
system-internal-tls가 활성화됩니다.{"severity":"INFO","timestamp":"2024-01-03T07:07:32.892810888Z","logger":"queueproxy","caller":"certificate/watcher.go:62","message":"Starting to watch the following directories for changes{certDir 15 0 /var/lib/knative/certs <nil>} {keyDir 15 0 /var/lib/knative/certs <nil>}","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"} {"severity":"INFO","timestamp":"2024-01-03T07:07:32.89397512Z","logger":"queueproxy","caller":"certificate/watcher.go:131","message":"Certificate and/or key have changed on disk and were reloaded.","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"} {"severity":"INFO","timestamp":"2024-01-03T07:07:32.894232939Z","logger":"queueproxy","caller":"sharedmain/main.go:282","message":"Starting tls server admin:8022","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"} {"severity":"INFO","timestamp":"2024-01-03T07:07:32.894268548Z","logger":"queueproxy","caller":"sharedmain/main.go:282","message":"Starting tls server main:8112","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"}{"severity":"INFO","timestamp":"2024-01-03T07:07:32.892810888Z","logger":"queueproxy","caller":"certificate/watcher.go:62","message":"Starting to watch the following directories for changes{certDir 15 0 /var/lib/knative/certs <nil>} {keyDir 15 0 /var/lib/knative/certs <nil>}","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"} {"severity":"INFO","timestamp":"2024-01-03T07:07:32.89397512Z","logger":"queueproxy","caller":"certificate/watcher.go:131","message":"Certificate and/or key have changed on disk and were reloaded.","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"} {"severity":"INFO","timestamp":"2024-01-03T07:07:32.894232939Z","logger":"queueproxy","caller":"sharedmain/main.go:282","message":"Starting tls server admin:8022","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"} {"severity":"INFO","timestamp":"2024-01-03T07:07:32.894268548Z","logger":"queueproxy","caller":"sharedmain/main.go:282","message":"Starting tls server main:8112","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8장. 트래픽 분할 링크 복사링크가 클립보드에 복사되었습니다!
8.1. 트래픽 분할 개요 링크 복사링크가 클립보드에 복사되었습니다!
Knative 애플리케이션에서 트래픽 분할을 생성하여 트래픽을 관리할 수 있습니다. 트래픽 분할은 Knative 서비스에서 관리하는 경로의 일부로 구성됩니다.
경로를 구성하면 요청을 서비스의 다른 버전으로 보낼 수 있습니다. 이 라우팅은 Service 오브젝트의 트래픽 사양에 따라 결정됩니다.
트래픽 사양 선언은 하나 이상의 버전으로 구성되며, 각각 전체 트래픽의 일부를 처리합니다. 각 버전으로 라우팅되는 트래픽의 백분율은 Knative 검증으로 보장되는 최대 100%를 추가해야 합니다.
트래픽 사양에 지정된 버전은 수정된 버전 또는 "최신" 버전을 가리킬 수 있으며 서비스의 모든 버전 목록 헤드를 추적합니다. "최신" 버전은 새 버전이 생성되는 경우 업데이트하는 부동 참조 유형입니다. 각 버전에는 해당 버전에 대한 추가 액세스 URL을 생성하는 태그가 연결되어 있을 수 있습니다.
트래픽 사양은 다음을 통해 수정할 수 있습니다.
-
Service오브젝트의 YAML을 직접 편집합니다. -
Knative(
kn) CLI--traffic플래그 사용. - OpenShift Container Platform 웹 콘솔 사용.
Knative 서비스를 생성할 때 기본 traffic 사양 설정이 없습니다.
8.2. traffic 사양 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예에서는 traffic의 100%가 서비스의 최신 버전으로 라우팅되는 트래픽 사양을 보여줍니다. status에서 latestRevision의 최신 버전의 이름을 볼 수 있습니다.
다음 예에서는 traffic의 100%가 current로 태그가 지정된 버전으로 라우팅되고 해당 버전의 이름이 example-service로 지정된 트래픽 사양을 보여줍니다. 트래픽이 라우팅되지 않더라도 latest로 태그된 버전을 사용할 수 있습니다.
다음 예제에서는 traffic 사양의 버전 목록을 확장하여 여러 버전으로 트래픽을 분할하는 방법을 보여줍니다. 이 예에서는 트래픽의 50%를 current 태그가 지정된 버전에 전송하고 트래픽의 50%를 candidate 로 태그된 버전에 보냅니다. 트래픽이 라우팅되지 않더라도 latest로 태그된 버전을 사용할 수 있습니다.
8.3. Knative CLI를 사용한 트래픽 분할 링크 복사링크가 클립보드에 복사되었습니다!
Knative(kn) CLI를 사용하여 트래픽 분할을 생성하면 YAML 파일을 직접 수정하는 것보다 간소화되고 직관적인 사용자 인터페이스가 제공됩니다. kn service update 명령을 사용하여 서비스 버전 간에 트래픽을 분할할 수 있습니다.
8.3.1. Knative CLI를 사용하여 트래픽 분할 생성 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn) CLI가 설치되어 있습니다. - Knative 서비스를 생성했습니다.
프로세스
표준
kn service update명령과 함께--traffic태그를 사용하여 서비스 버전 및 트래픽의 백분율을 지정합니다.명령 예
kn service update <service_name> --traffic <revision>=<percentage>
$ kn service update <service_name> --traffic <revision>=<percentage>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
-
<service_name>은 트래픽 라우팅을 구성하려는 Knative 서비스의 이름입니다. -
<revision>은 일정 비율의 트래픽을 수신하도록 구성하려는 버전입니다. 버전 이름 또는--tag플래그를 사용하여 버전에 할당한 태그를 지정할 수 있습니다. -
<percentage>는 지정된 버전에 보낼 트래픽의 백분율입니다.
-
선택 사항:
--traffic플래그는 하나의 명령에서 여러 번 지정할 수 있습니다. 예를 들어@latest로 태그가 지정된 버전과stable이라는 버전이 있는 경우 다음과 같이 각 버전으로 분할하려는 트래픽의 백분율을 지정할 수 있습니다.명령 예
kn service update showcase --traffic @latest=20,stable=80
$ kn service update showcase --traffic @latest=20,stable=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 버전이 여러 개 있고 마지막 버전으로 분할해야 하는 트래픽의 백분율을 지정하지 않으면
--traffic플래그에서 자동으로 계산할 수 있습니다. 예를 들어example이라는 세 번째 버전이 있고 다음 명령을 사용합니다.명령 예
kn service update showcase --traffic @latest=10,stable=60
$ kn service update showcase --traffic @latest=10,stable=60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 나머지 30%의 트래픽은 지정되지 않은 경우에도
예제버전으로 나뉩니다.
8.4. 트래픽 분할을 위한 CLI 플래그 링크 복사링크가 클립보드에 복사되었습니다!
Knative(kn) CLI는 kn service update 명령의 일부로 서비스의 트래픽 블록에서 트래픽 작업을 지원합니다.
8.4.1. Knative CLI 트래픽 분할 플래그 링크 복사링크가 클립보드에 복사되었습니다!
다음 테이블에는 트래픽 분할 플래그, 값 형식, 플래그에서 수행하는 작업이 요약되어 있습니다. 반복 열은 kn service update 명령에서 특정 플래그 값을 반복할 수 있는지를 나타냅니다.
| 플래그 | 값 | 작업 | 반복 |
|---|---|---|---|
|
|
|
| 제공됨 |
|
|
|
| 제공됨 |
|
|
|
최신 준비 버전에 | 아니요 |
|
|
|
| 제공됨 |
|
|
|
최근 준비된 버전에 | 아니요 |
|
|
|
버전에서 | 제공됨 |
8.4.1.1. 여러 플래그 및 우선 순위 링크 복사링크가 클립보드에 복사되었습니다!
모든 트래픽 관련 플래그는 단일 kn service update 명령을 사용하여 지정할 수 있습니다. kn은 이러한 플래그의 우선순위를 정의합니다. 명령을 사용할 때 지정된 플래그의 순서는 고려하지 않습니다.
kn에 의해 평가되는 플래그의 우선순위는 다음과 같습니다.
-
--untag: 이 플래그가 있는 참조된 버전은 모두 트래픽 블록에서 제거됩니다. -
--tag: 버전에는 트래픽 블록에 지정된 대로 태그가 지정됩니다. -
--traffic: 참조된 버전에는 트래픽 분할의 일부가 할당됩니다.
버전에 태그를 추가한 다음 설정한 태그에 따라 트래픽을 분할할 수 있습니다.
8.4.1.2. 개정버전 사용자 정의 URL 링크 복사링크가 클립보드에 복사되었습니다!
kn service update 명령을 사용하여 서비스에 --tag 플래그를 할당하면 서비스를 업데이트할 때 생성되는 버전에 대한 사용자 정의 URL이 생성됩니다. 사용자 정의 URL은 https://<tag>-<service_name>-<namespace>.<domain > 또는 http://<tag>-<service_name>-<namespace>.<domain > 패턴을 따릅니다.
--tag 및 --untag 플래그는 다음 구문을 사용합니다.
- 하나의 값이 필요합니다.
- 서비스의 트래픽 블록에 있는 고유한 태그를 나타냅니다.
- 하나의 명령에서 여러 번 지정할 수 있습니다.
8.4.1.2.1. 예: 태그를 버전에 할당 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 latest 태그를 example-revision이라는 버전에 할당합니다.
kn service update <service_name> --tag @latest=example-tag
$ kn service update <service_name> --tag @latest=example-tag
8.4.1.2.2. 예: 버전에서 태그 제거 링크 복사링크가 클립보드에 복사되었습니다!
--untag 플래그를 사용하여 사용자 정의 URL을 제거하도록 태그를 제거할 수 있습니다.
개정 버전에 해당 태그가 제거되고 트래픽의 0%가 할당되면 개정 버전이 트래픽 블록에서 완전히 제거됩니다.
다음 명령은 example-revision이라는 버전에서 모든 태그를 제거합니다.
kn service update <service_name> --untag example-tag
$ kn service update <service_name> --untag example-tag
8.5. 버전 간 트래픽 분할 링크 복사링크가 클립보드에 복사되었습니다!
서버리스 애플리케이션을 생성하면 OpenShift Container Platform 웹 콘솔의 토폴로지 보기에 애플리케이션이 표시됩니다. 애플리케이션 버전은 노드에서 나타내며 Knative 서비스는 노드 주변의 사각형으로 표시됩니다.
코드 또는 서비스 구성을 새로 변경하면 지정된 시간에 코드 스냅샷인 새 버전이 생성됩니다. 서비스의 경우 필요에 따라 서비스를 분할하고 다른 버전으로 라우팅하여 서비스 버전 간 트래픽을 관리할 수 있습니다.
8.5.1. OpenShift Container Platform 웹 콘솔을 사용하여 버전 간 트래픽 관리 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
- OpenShift Container Platform 웹 콘솔에 로그인했습니다.
프로세스
토폴로지 보기에서 애플리케이션의 다양한 버전 간 트래픽을 분할하려면 다음을 수행합니다.
- Knative 서비스를 클릭하여 측면 패널에서 개요를 확인합니다.
리소스 탭을 클릭하여 서비스의 버전 및 경로로 구성된 목록을 확인합니다.
그림 8.1. 서버리스 애플리케이션
- 측면 패널 상단에 S 아이콘으로 표시된 서비스를 클릭하여 서비스 세부 정보 개요를 확인합니다.
-
YAML 탭을 클릭하고 YAML 편집기에서 서비스 구성을 수정한 다음 저장을 클릭합니다. 예를 들면
timeoutseconds를 300에서 301로 변경합니다. 이러한 구성 변경으로 인해 새 버전이 트리거됩니다. 토폴로지 보기에 최신 버전이 표시되고 서비스의 리소스 탭에 두 가지 버전이 표시됩니다. 리소스 탭에서 트래픽 배포 트래픽 배포 대화 상자를 확인합니다.
- 분할 필드에 두 버전의 분할 트래픽 백분율 부분을 추가합니다.
- 두 버전에 대한 사용자 정의 URL을 생성하도록 태그를 추가합니다.
저장을 클릭하여 토폴로지 보기에서 두 버전을 나타내는 두 노드를 확인합니다.
그림 8.2. 서버리스 애플리케이션의 버전
8.6. blue-green 전략을 사용하여 트래픽 다시 라우팅 링크 복사링크가 클립보드에 복사되었습니다!
blue-green 배포 전략을 사용하여 프로덕션 버전에서 새 버전으로 트래픽을 안전하게 다시 라우팅할 수 있습니다.
8.6.1. blue-green 배포 전략을 사용하여 트래픽 라우팅 및 관리 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
OpenShift CLI(
oc)를 설치합니다.
프로세스
- 애플리케이션을 Knative 서비스로 생성하고 배포합니다.
다음 명령의 출력을 확인하여 서비스를 배포할 때 생성된 첫 번째 버전의 이름을 찾습니다.
oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
oc get ksvc showcase -o=jsonpath='{.status.latestCreatedRevisionName}'$ oc get ksvc showcase -o=jsonpath='{.status.latestCreatedRevisionName}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
showcase-00001
$ showcase-00001Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 YAML을 서비스
spec에 추가하여 인바운드 트래픽을 버전으로 전송합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 얻은 URL 출력에서 앱을 볼 수 있는지 확인합니다.
oc get ksvc <service_name>
$ oc get ksvc <service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
서비스의
template사양에서 하나 이상의 필드를 수정하고 재배포하여 애플리케이션의 두 번째 버전을 배포합니다. 예를 들어 서비스의image또는env환경 변수를 수정할 수 있습니다. 서비스 YAML 파일을 적용하거나 Knative(kn) CLI를 설치한 경우kn service update명령을 사용하여 서비스를 재배포할 수 있습니다. 다음 명령을 실행하여 서비스를 재배포할 때 생성된 두 번째 최신 버전의 이름을 찾습니다.
oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이때 서비스의 첫 번째 버전과 두 번째 버전이 모두 배포되고 실행됩니다.
다른 모든 트래픽을 첫 번째 버전으로 전송하면서 두 번째 버전에 대한 새 테스트 끝점을 생성하도록 기존 서비스를 업데이트합니다.
테스트 끝점을 사용하여 업데이트된 서비스 사양의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow YAML 리소스를 다시 적용하여 이 서비스를 재배포하면 애플리케이션의 두 번째 버전이 준비됩니다. 기본 URL의 두 번째 버전으로 라우팅되는 트래픽이 없으며 Knative는 새로 배포된 버전을 테스트하기 위해
v2라는 새 서비스를 생성합니다.다음 명령을 실행하여 두 번째 버전에 대한 새 서비스의 URL을 가져옵니다.
oc get ksvc <service_name> --output jsonpath="{.status.traffic[*].url}"$ oc get ksvc <service_name> --output jsonpath="{.status.traffic[*].url}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 URL을 사용하여 트래픽을 라우팅하기 전에 애플리케이션의 새 버전이 예상대로 작동하는지 확인할 수 있습니다.
트래픽의 50%가 첫 번째 버전으로 전송되고 50%가 두 번째 버전으로 전송되도록 기존 서비스를 다시 업데이트합니다.
버전 간에 트래픽을 50/50으로 분할하는 업데이트된 서비스 사양 분할 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 트래픽을 새 버전의 앱으로 라우팅할 준비가 되면 두 번째 버전으로 트래픽의 100%를 보내도록 서비스를 다시 업데이트합니다.
두 번째 버전으로 모든 트래픽을 전송하는 업데이트된 서비스 사양의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 작은 정보버전을 롤백하지 않으려는 경우 첫 번째 버전을 트래픽의 0%로 설정하는 대신 제거할 수 있습니다. 라우팅할 수 없는 버전 오브젝트는 가비지 수집됩니다.
- 첫 번째 버전의 URL을 방문하여 이전 버전의 앱으로 더 이상 트래픽이 전송되지 않는지 확인합니다.
9장. 외부 및 Ingress 라우팅 링크 복사링크가 클립보드에 복사되었습니다!
9.1. 라우팅 개요 링크 복사링크가 클립보드에 복사되었습니다!
Knative에서는 OpenShift Container Platform TLS 종료를 활용하여 Knative 서비스에 대한 라우팅을 제공합니다. Knative 서비스가 생성되면 서비스에 대한 OpenShift Container Platform 경로가 자동으로 생성됩니다. 이 경로는 OpenShift Serverless Operator에서 관리합니다. OpenShift Container Platform 경로는 OpenShift Container Platform 클러스터와 동일한 도메인을 통해 Knative 서비스를 표시합니다.
OpenShift Container Platform 라우팅에 대한 Operator의 제어를 비활성화하여 대신 TLS 인증서를 직접 사용하도록 Knative 경로를 구성할 수 있습니다.
또한 Knative 경로를 OpenShift Container Platform 경로와 함께 사용하면 트래픽 분할과 같은 세분화된 라우팅 기능을 추가로 제공할 수 있습니다.
9.2. 라벨 및 주석 사용자 정의 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 경로는 사용자 정의 레이블 및 주석을 사용할 수 있으며 Knative 서비스의 metadata 사양을 수정하여 구성할 수 있습니다. 사용자 정의 레이블 및 주석은 서비스에서 Knative 경로로 전달된 다음 Knative Ingress로 전달되고 마지막으로 OpenShift Container Platform 경로로 전달됩니다.
9.2.1. OpenShift Container Platform 경로에 대한 레이블 및 주석 사용자 정의 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving 구성 요소가 OpenShift Container Platform 클러스터에 설치되어 있습니다.
-
OpenShift CLI(
oc)를 설치합니다.
프로세스
OpenShift Container Platform 경로에 전달할 레이블 또는 주석이 포함된 Knative 서비스를 생성합니다.
YAML을 사용하여 서비스를 생성하려면 다음을 수행합니다.
YAML을 사용하여 생성한 서비스 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Knative(
kn) CLI를 사용하여 서비스를 생성하려면 다음을 입력합니다.kn명령을 사용하여 생성된 서비스 예kn service create <service_name> \ --image=<image> \ --annotation <annotation_name>=<annotation_value> \ --label <label_value>=<label_value>
$ kn service create <service_name> \ --image=<image> \ --annotation <annotation_name>=<annotation_value> \ --label <label_value>=<label_value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 명령의 출력을 확인하여 추가한 주석 또는 레이블을 사용하여 OpenShift Container Platform 경로가 생성되었는지 확인합니다.
확인을 위한 명령 예
oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=<service_name> \ -l serving.knative.openshift.io/ingressNamespace=<service_namespace> \ -n knative-serving-ingress -o yaml \ | grep -e "<label_name>: \"<label_value>\"" -e "<annotation_name>: <annotation_value>"$ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=<service_name> \1 -l serving.knative.openshift.io/ingressNamespace=<service_namespace> \2 -n knative-serving-ingress -o yaml \ | grep -e "<label_name>: \"<label_value>\"" -e "<annotation_name>: <annotation_value>"3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3. Knative 서비스의 경로 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 TLS 인증서를 사용하도록 Knative 서비스를 구성하려면 OpenShift Serverless Operator의 서비스 경로 자동 생성 기능을 비활성화하고 대신 해당 서비스에 대한 경로를 수동으로 생성해야 합니다.
다음 절차를 완료하면 knative-serving-ingress 네임스페이스의 기본 OpenShift Container Platform 경로가 생성되지 않습니다. 그러나 애플리케이션의 Knative 경로는 이 네임스페이스에 계속 생성됩니다.
9.3.1. Knative 서비스에 대한 OpenShift Container Platform 경로 구성 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving 구성 요소가 OpenShift Container Platform 클러스터에 설치되어 있어야 합니다.
-
OpenShift CLI(
oc)를 설치합니다.
프로세스
serving.knative.openshift.io/disableRoute=true주석이 포함된 Knative 서비스를 생성합니다.중요serving.knative.openshift.io/disableRoute=true주석은 OpenShift Serverless에서 경로를 자동으로 생성하지 않도록 지시합니다. 그러나 서비스는 여전히 URL을 표시하며Ready상태에 도달합니다. 이 URL은 URL의 호스트 이름과 동일한 호스트 이름으로 자체 경로를 생성할 때까지 외부에서 작동하지 않습니다.Knative
서비스리소스를 생성합니다.리소스 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Service리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항:
kn service create명령을 사용하여 Knative 서비스를 생성합니다.kn명령 예제kn service create <service_name> \ --image=gcr.io/knative-samples/helloworld-go \ --annotation serving.knative.openshift.io/disableRoute=true
$ kn service create <service_name> \ --image=gcr.io/knative-samples/helloworld-go \ --annotation serving.knative.openshift.io/disableRoute=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
서비스에 OpenShift Container Platform 경로가 생성되지 않았는지 확인합니다.
명령 예
$ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=$KSERVICE_NAME \ -l serving.knative.openshift.io/ingressNamespace=$KSERVICE_NAMESPACE \ -n knative-serving-ingress
$ $ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=$KSERVICE_NAME \ -l serving.knative.openshift.io/ingressNamespace=$KSERVICE_NAMESPACE \ -n knative-serving-ingressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 출력이 표시됩니다.
No resources found in knative-serving-ingress namespace.
No resources found in knative-serving-ingress namespace.Copy to Clipboard Copied! Toggle word wrap Toggle overflow knative-serving-ingress네임스페이스에Route리소스를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OpenShift Container Platform 경로에 대한 타임아웃 값입니다.
max-revision-timeout-seconds설정과 동일한 값으로 설정해야 합니다(기본값:600s). - 2
- OpenShift Container Platform 경로의 이름입니다.
- 3
- OpenShift Container Platform 경로의 네임스페이스입니다.
knative-serving-ingress여야 합니다. - 4
- 외부 액세스를 위한 호스트 이름입니다. 이 값을
<service_name>-<service_namespace>.<domain>으로 설정할 수 있습니다. - 5
- 사용할 인증서입니다. 현재는
edge종료만 지원됩니다.
Route리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.4. 외부 경로의 URL 스키마 링크 복사링크가 클립보드에 복사되었습니다!
보안을 강화하기 위해 외부 경로의 URL 체계는 기본적으로 HTTPS로 설정됩니다. 이 스키마는 KnativeServing CR(사용자 정의 리소스) 사양의 default-external-scheme 키로 결정합니다.
9.4.1. 외부 경로의 URL 스키마 설정 링크 복사링크가 클립보드에 복사되었습니다!
기본 사양
default-external-scheme 키를 수정하여 HTTP를 사용하도록 기본 사양을 덮어쓸 수 있습니다.
HTTP 덮어쓰기 사양
9.5. 클러스터 로컬 가용성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Knative 서비스는 공용 IP 주소에 게시됩니다. 공용 IP 주소에 게시된다는 것은 Knative 서비스가 공용 애플리케이션이 되어 공개적으로 액세스할 수 있는 URL이 있음을 의미합니다.
공개적으로 액세스할 수 있는 URL은 클러스터 외부에서 액세스할 수 있습니다. 그러나 개발자는 클러스터 내부에서만 액세스할 수 있는 백엔드 서비스(비공개 서비스)를 빌드해야 할 수 있습니다. 개발자는 클러스터의 개별 서비스에 networking.knative.dev/visibility=cluster-local 레이블을 지정하여 비공개로 설정할 수 있습니다.
OpenShift Serverless 1.15.0 및 최신 버전의 경우 serving.knative.dev/visibility 레이블을 더 이상 사용할 수 없습니다. 대신 networking.knative.dev/visibility 레이블을 사용하려면 기존 서비스를 업데이트해야 합니다.
9.5.1. 클러스터 가용성을 클러스터 로컬로 설정 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
- Knative 서비스를 생성했습니다.
프로세스
networking.knative.dev/visibility=cluster-local레블을 추가하여 서비스 가시성을 설정합니다.oc label ksvc <service_name> networking.knative.dev/visibility=cluster-local
$ oc label ksvc <service_name> networking.knative.dev/visibility=cluster-localCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음 명령을 입력하고 출력을 검토하여 서비스의 URL이
http://<service_name>.<namespace>.svc.cluster.local형식인지 확인합니다.oc get ksvc
$ oc get ksvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME URL LATESTCREATED LATESTREADY READY REASON hello http://hello.default.svc.cluster.local hello-tx2g7 hello-tx2g7 True
NAME URL LATESTCREATED LATESTREADY READY REASON hello http://hello.default.svc.cluster.local hello-tx2g7 hello-tx2g7 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.2. 클러스터 로컬 서비스에 대한 TLS 인증 활성화 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 로컬 서비스의 경우 Kourier 로컬 게이트웨이 kourier-internal 이 사용됩니다. Kourier 로컬 게이트웨이에 대해 TLS 트래픽을 사용하려면 로컬 게이트웨이에서 자체 서버 인증서를 구성해야 합니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- 관리자 권한이 있습니다.
-
OpenShift(
oc) CLI가 설치되어 있습니다.
프로세스
knative-serving-ingress네임스페이스에 서버 인증서를 배포합니다.export san="knative"
$ export san="knative"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고이러한 인증서가 <
app_name>.<namespace>.svc.cluster.local에 요청을 제공하려면 제목 대체 이름(SAN) 검증이 필요합니다.루트 키 및 인증서를 생성합니다.
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \ -subj '/O=Example/CN=Example' \ -keyout ca.key \ -out ca.crt$ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \ -subj '/O=Example/CN=Example' \ -keyout ca.key \ -out ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow SAN 검증을 사용하는 서버 키를 생성합니다.
openssl req -out tls.csr -newkey rsa:2048 -nodes -keyout tls.key \ -subj "/CN=Example/O=Example" \ -addext "subjectAltName = DNS:$san"
$ openssl req -out tls.csr -newkey rsa:2048 -nodes -keyout tls.key \ -subj "/CN=Example/O=Example" \ -addext "subjectAltName = DNS:$san"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버 인증서를 생성합니다.
openssl x509 -req -extfile <(printf "subjectAltName=DNS:$san") \ -days 365 -in tls.csr \ -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt
$ openssl x509 -req -extfile <(printf "subjectAltName=DNS:$san") \ -days 365 -in tls.csr \ -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kourier 로컬 게이트웨이의 시크릿을 구성합니다.
이전 단계에서 생성한 인증서에서
knative-serving-ingress네임스페이스에 보안을 배포합니다.oc create -n knative-serving-ingress secret tls server-certs \ --key=tls.key \ --cert=tls.crt --dry-run=client -o yaml | oc apply -f -$ oc create -n knative-serving-ingress secret tls server-certs \ --key=tls.key \ --cert=tls.crt --dry-run=client -o yaml | oc apply -f -Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kourier 게이트웨이에서 생성한 보안을 사용하도록
KnativeServingCR(사용자 정의 리소스) 사양을 업데이트합니다.KnativeServing CR의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Kourier 컨트롤러는 서비스를 다시 시작하지 않고 인증서를 설정하여 Pod를 다시 시작할 필요가 없도록 합니다.
클라이언트의 ca.crt 를 마운트하고 사용하여 TLS를 통해 포트 443 을 통해 Kourier 내부 서비스에 액세스할 수 있습니다.
9.6. Kourier Gateway 서비스 유형 링크 복사링크가 클립보드에 복사되었습니다!
Kourier Gateway는 기본적으로 ClusterIP 서비스 유형으로 노출됩니다. 이 서비스 유형은 KnativeServing CR(사용자 정의 리소스)의 서비스 유형 ingress 사양에 따라 결정됩니다.
기본 사양
9.6.1. Kourier Gateway 서비스 유형 설정 링크 복사링크가 클립보드에 복사되었습니다!
service-type 사양을 수정하여 로드 밸런서 서비스 유형을 대신 사용하도록 기본 서비스 유형을 덮어쓸 수 있습니다.
LoadBalancer 덮어쓰기 사양
9.7. HTTP2 및 gRPC 사용 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless에서는 비보안 또는 엣지 종료 경로만 지원합니다. 비보안 또는 엣지 종료 경로에서는 OpenShift Container Platform에서 HTTP2를 지원하지 않습니다. 또한 이러한 경로는 gRPC가 HTTP2에 의해 전송되기 때문에 gRPC를 지원하지 않습니다. 애플리케이션에서 이러한 프로토콜을 사용하는 경우 수신 게이트웨이를 사용하여 애플리케이션을 직접 호출해야 합니다. 이를 위해서는 수신 게이트웨이의 공용 주소와 애플리케이션의 특정 호스트를 찾아야 합니다.
9.7.1. HTTP2 및 gRPC를 사용하여 서버리스 애플리케이션과 상호 작용 링크 복사링크가 클립보드에 복사되었습니다!
이 방법은 OpenShift Container Platform 4.10 이상에 적용됩니다. 이전 버전의 경우 다음 섹션을 참조하십시오.
사전 요구 사항
- 클러스터에 OpenShift Serverless Operator 및 Knative Serving을 설치합니다.
-
OpenShift CLI(
oc)를 설치합니다. - Knative 서비스를 생성합니다.
- OpenShift Container Platform 4.10 이상을 업그레이드합니다.
- OpenShift Ingress 컨트롤러에서 HTTP/2를 활성화합니다.
프로세스
서버리스.openshift.io/default-enable-http2=true주석을KnativeServing사용자 정의 리소스에 추가합니다.oc annotate knativeserving <your_knative_CR> -n knative-serving serverless.openshift.io/default-enable-http2=true
$ oc annotate knativeserving <your_knative_CR> -n knative-serving serverless.openshift.io/default-enable-http2=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 주석이 추가된 후 Kourier 서비스의
appProtocol값이h2c:인지 확인할 수 있습니다.oc get svc -n knative-serving-ingress kourier -o jsonpath="{.spec.ports[0].appProtocol}"$ oc get svc -n knative-serving-ingress kourier -o jsonpath="{.spec.ports[0].appProtocol}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
h2c
h2cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이제 외부 트래픽에 HTTP/2 프로토콜을 통해 gRPC 프레임워크를 사용할 수 있습니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.8. OpenShift Ingress 샤딩으로 Serving 사용 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Ingress 샤딩과 함께 Knative Serving을 사용하여 도메인에 따라 Ingress 트래픽을 분할할 수 있습니다. 이를 통해 네트워크 트래픽을 클러스터의 다른 부분으로 보다 효율적으로 관리하고 라우팅할 수 있습니다.
OpenShift Ingress 샤딩이 있는 경우에도 OpenShift Serverless 트래픽은 여전히 단일 Knative Ingress Gateway 및 knative-serving 프로젝트의 활성화 구성 요소를 통해 라우팅됩니다.
네트워크 트래픽 격리에 대한 자세한 내용은 Service Mesh를 사용하여 OpenShift Serverless에서 네트워크 트래픽을 격리하는 방법을 참조하십시오.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
9.8.1. OpenShift ingress shard 구성 링크 복사링크가 클립보드에 복사되었습니다!
Knative Serving을 구성하기 전에 OpenShift Ingress shard를 구성해야 합니다.
프로세스
IngressControllerCR의 라벨 선택기를 사용하여 다른 도메인과 특정 Ingress shard와 일치하도록 OpenShift Serverless를 구성합니다.IngressControllerCR 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.8.2. KnativeServing CR에서 사용자 정의 도메인 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Ingress shard를 구성한 후 Knative Serving을 해당 shard와 일치하도록 구성해야 합니다.
프로세스
KnativeServingCR에서spec.config.domain필드를 추가하여 Ingress shard와 동일한 도메인 및 레이블을 사용하도록 Serving을 구성합니다.KnativeServingCR의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이러한 값은 ingress shard 구성의 값과 일치해야 합니다.
9.8.3. Knative 서비스에서 특정 Ingress shard를 대상으로 링크 복사링크가 클립보드에 복사되었습니다!
Ingress 샤딩 및 Knative Serving을 구성한 후 라벨을 사용하여 Knative 서비스 리소스의 특정 Ingress shard를 대상으로 할 수 있습니다.
9.8.4. OpenShift Ingress 샤딩 구성으로 Serving 확인 링크 복사링크가 클립보드에 복사되었습니다!
Ingress 샤딩, Knative Serving 및 서비스를 구성한 후 서비스가 올바른 경로와 선택한 Ingress shard를 사용하는지 확인할 수 있습니다.
프로세스
다음 명령을 실행하여 클러스터의 서비스에 대한 정보를 출력합니다.
oc get ksvc
$ oc get ksvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME URL LATESTCREATED LATESTREADY READY REASON hello-dev https://hello-dev-default.dev.serverless.cluster.example.com hello-dev-00001 hello-dev-00001 True hello-prod https://hello-prod-default.prod.serverless.cluster.example.com hello-prod-00001 hello-prod-00001 True
NAME URL LATESTCREATED LATESTREADY READY REASON hello-dev https://hello-dev-default.dev.serverless.cluster.example.com hello-dev-00001 hello-dev-00001 True hello-prod https://hello-prod-default.prod.serverless.cluster.example.com hello-prod-00001 hello-prod-00001 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 서비스에서 올바른 경로와 선택한 Ingress shard를 사용하는지 확인합니다.
oc get route -n knative-serving-ingress -o jsonpath='{range .items[*]}{@.metadata.name}{" "}{@.spec.host}{" "}{@.status.ingress[*].routerName}{"\n"}{end}'$ oc get route -n knative-serving-ingress -o jsonpath='{range .items[*]}{@.metadata.name}{" "}{@.spec.host}{" "}{@.status.ingress[*].routerName}{"\n"}{end}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
route-19e6628b-77af-4da0-9b4c-1224934b2250-323461616533 hello-prod-default.prod.serverless.cluster.example.com ingress-prod route-cb5085d9-b7da-4741-9a56-96c88c6adaaa-373065343266 hello-dev-default.dev.serverless.cluster.example.com ingress-dev
route-19e6628b-77af-4da0-9b4c-1224934b2250-323461616533 hello-prod-default.prod.serverless.cluster.example.com ingress-prod route-cb5085d9-b7da-4741-9a56-96c88c6adaaa-373065343266 hello-dev-default.dev.serverless.cluster.example.com ingress-devCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10장. HTTP 구성 링크 복사링크가 클립보드에 복사되었습니다!
10.1. 글로벌 HTTPS 리디렉션 링크 복사링크가 클립보드에 복사되었습니다!
HTTPS 리디렉션은 들어오는 HTTP 요청에 대한 리디렉션을 제공합니다. 이러한 리디렉션된 HTTP 요청은 암호화됩니다. KnativeServing CR(사용자 정의 리소스)에 대한 httpProtocol 사양을 구성하여 클러스터의 모든 서비스에 대해 HTTPS 리디렉션을 활성화할 수 있습니다.
10.1.1. HTTPS 리디렉션 글로벌 설정 링크 복사링크가 클립보드에 복사되었습니다!
HTTPS 리디렉션을 활성화하는 KnativeServing CR의 예
10.2. 서비스당 HTTPS 리디렉션 링크 복사링크가 클립보드에 복사되었습니다!
networking.knative.dev/http-option 주석을 구성하여 서비스에 대한 HTTPS 리디렉션을 활성화하거나 비활성화할 수 있습니다.
10.2.1. 서비스에 대한 HTTPS 리디렉션 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 Knative Service YAML 오브젝트에서 이 주석을 사용하는 방법을 보여줍니다.
10.3. HTTP/1에 대한 전체 중복 지원 링크 복사링크가 클립보드에 복사되었습니다!
features.knative.dev/http-full-duplex 주석을 구성하여 서비스에 대한 HTTP/1 전체 duplex 지원을 활성화할 수 있습니다.
이전 버전 클라이언트가 HTTP/1 전체 중복을 지원하지 않을 수 있으므로 활성화하기 전에 HTTP 클라이언트를 확인합니다.
다음 예제에서는 버전 사양 수준에서 Knative Service YAML 오브젝트에서 이 주석을 사용하는 방법을 보여줍니다.
HTTP/1에 대한 전체 중복 지원을 제공하는 KnativeServing CR의 예
11장. Knative 서비스에 대한 액세스 구성 링크 복사링크가 클립보드에 복사되었습니다!
11.1. Knative 서비스의 JSON Web Token 인증 설정 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless에는 현재 사용자 정의 권한 부여 기능이 없습니다. 배포에 사용자 정의 권한을 추가하려면 OpenShift Serverless를 Red Hat OpenShift Service Mesh와 통합한 다음 Knative 서비스에 대한 JSON 웹 토큰(JWT) 인증 및 사이드카 삽입을 구성해야 합니다.
11.2. Service Mesh 2.x에서 JSON 웹 토큰 인증 사용 링크 복사링크가 클립보드에 복사되었습니다!
Service Mesh 2.x 및 OpenShift Serverless를 사용하여 Knative 서비스에서 JSON 웹 토큰(JWT) 인증을 사용할 수 있습니다. 이렇게 하려면 ServiceMeshMemberRoll 오브젝트의 멤버인 애플리케이션 네임스페이스에 인증 요청 및 정책을 생성해야 합니다. 서비스에 대한 사이드카 삽입도 활성화해야 합니다.
11.2.1. Service Mesh 2.x 및 OpenShift Serverless에 대한 JSON 웹 토큰 인증 구성 링크 복사링크가 클립보드에 복사되었습니다!
knative-serving 및 knative-serving-ingress와 같은 시스템 네임스페이스의 Pod에 Kourier가 활성화되어 있는 경우 사이드카를 삽입할 수 없습니다.
OpenShift Container Platform의 경우 이러한 네임스페이스의 Pod에 사이드카 삽입이 필요한 경우 OpenShift Serverless 와 OpenShift Serverless 통합에 대한 OpenShift Serverless 설명서를 참조하십시오.
사전 요구 사항
- 클러스터에 OpenShift Serverless Operator, Knative Serving 및 Red Hat OpenShift Service Mesh를 설치했습니다.
-
OpenShift CLI(
oc)를 설치합니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
프로세스
서비스에
sidecar.istio.io/inject="true"주석을 추가합니다.서비스의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Service리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceMeshMemberRoll오브젝트의 멤버인 각 서버리스 애플리케이션 네임스페이스에RequestAuthentication리소스를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow RequestAuthentication리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음
AuthorizationPolicy리소스를 생성하여ServiceMeshMemberRoll오브젝트의 멤버인 각 서버리스 애플리케이션 네임스페이스의 시스템 Pod에서RequestAuthenticaton리소스에 대한 액세스를 허용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow AuthorizationPolicy리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceMeshMemberRoll오브젝트의 멤버인 각 서버리스 애플리케이션 네임스페이스에서 다음AuthorizationPolicy리소스를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow AuthorizationPolicy리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
Knative 서비스 URL을 가져오기 위해
curl요청을 사용하면 해당 요청이 거부됩니다.명령 예
curl http://hello-example-1-default.apps.mycluster.example.com/
$ curl http://hello-example-1-default.apps.mycluster.example.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
RBAC: access denied
RBAC: access deniedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 유효한 JWT로 요청을 확인합니다.
유효한 JWT 토큰을 가져옵니다.
TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
$ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl요청 헤더에 유효한 토큰을 사용하여 서비스에 액세스합니다.curl -H "Authorization: Bearer $TOKEN" http://hello-example-1-default.apps.example.com
$ curl -H "Authorization: Bearer $TOKEN" http://hello-example-1-default.apps.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면 요청이 허용됩니다.
출력 예
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3. Service Mesh 1.x에서 JSON 웹 토큰 인증 사용 링크 복사링크가 클립보드에 복사되었습니다!
Service Mesh 1.x 및 OpenShift Serverless를 사용하여 Knative 서비스에서 JSON 웹 토큰(JWT) 인증을 사용할 수 있습니다. 이렇게 하려면 ServiceMeshMemberRoll 오브젝트의 멤버인 애플리케이션 네임스페이스에 정책을 생성해야 합니다. 서비스에 대한 사이드카 삽입도 활성화해야 합니다.
11.3.1. Service Mesh 1.x 및 OpenShift Serverless에 대한 JSON 웹 토큰 인증 구성 링크 복사링크가 클립보드에 복사되었습니다!
knative-serving 및 knative-serving-ingress와 같은 시스템 네임스페이스의 Pod에 Kourier가 활성화되어 있는 경우 사이드카를 삽입할 수 없습니다.
OpenShift Container Platform의 경우 이러한 네임스페이스의 Pod에 사이드카 삽입이 필요한 경우 OpenShift Serverless 와 OpenShift Serverless 통합에 대한 OpenShift Serverless 설명서를 참조하십시오.
사전 요구 사항
- 클러스터에 OpenShift Serverless Operator, Knative Serving 및 Red Hat OpenShift Service Mesh를 설치했습니다.
-
OpenShift CLI(
oc)를 설치합니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
프로세스
서비스에
sidecar.istio.io/inject="true"주석을 추가합니다.서비스의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Service리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 유효한 JWT(JSON 웹 토큰)가 있는 요청만 허용하는
ServiceMeshMemberRoll오브젝트의 멤버인 서버리스 애플리케이션 네임스페이스에 정책을 생성합니다.중요/metrics및/healthz경로는knative-serving네임스페이스의 시스템 Pod에서 액세스하므로excludedPaths에 포함되어야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Policy리소스를 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
Knative 서비스 URL을 가져오기 위해
curl요청을 사용하면 해당 요청이 거부됩니다.curl http://hello-example-default.apps.mycluster.example.com/
$ curl http://hello-example-default.apps.mycluster.example.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Origin authentication failed.
Origin authentication failed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 유효한 JWT로 요청을 확인합니다.
유효한 JWT 토큰을 가져옵니다.
TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
$ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl요청 헤더에 유효한 토큰을 사용하여 서비스에 액세스합니다.curl http://hello-example-default.apps.mycluster.example.com/ -H "Authorization: Bearer $TOKEN"
$ curl http://hello-example-default.apps.mycluster.example.com/ -H "Authorization: Bearer $TOKEN"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면 요청이 허용됩니다.
출력 예
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12장. Serving에 대한 kube-rbac-proxy 구성 링크 복사링크가 클립보드에 복사되었습니다!
kube-rbac-proxy 구성 요소는 Knative Serving에 대한 내부 인증 및 권한 부여 기능을 제공합니다.
12.1. Serving에 대한 kube-rbac-proxy 리소스 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Serverless Operator CR을 사용하여 kube-rbac-proxy 컨테이너의 리소스 할당을 전역적으로 덮어쓸 수 있습니다.
특정 배포에 대한 리소스 할당을 덮어쓸 수도 있습니다.
다음 구성은 Knative Serving kube-rbac-proxy 최소 및 최대 CPU 및 메모리 할당을 설정합니다.
KnativeServing CR 예
13장. net-kourier의 버스 및 QPS 구성 링크 복사링크가 클립보드에 복사되었습니다!
초당 쿼리(QPS) 및 버스트 값은 API 서버에 대한 요청 또는 API 호출 빈도를 결정합니다.
13.1. net-kourier의 burst 및 QPS 값 구성 링크 복사링크가 클립보드에 복사되었습니다!
QPS(초당 쿼리) 값에 따라 API 서버로 전송되는 클라이언트 요청 또는 API 호출 수가 결정됩니다.
burst 값은 클라이언트에 대해 저장할 수 있는 요청 수를 결정합니다. 이 버퍼를 초과하는 요청은 삭제됩니다. 이 기능은 버스트이며 요청을 시간에 균일하게 분배하지 않는 컨트롤러에 유용합니다.
net-kourier-controller 가 다시 시작되면 클러스터에 배포된 모든 수신 리소스를 구문 분석하므로 많은 API 호출이 발생합니다. 이로 인해 net-kourier-controller 를 시작하는 데 시간이 오래 걸릴 수 있습니다.
KnativeServing CR에서 net-kourier-controller 의 QPS 및 버스트 값을 조정할 수 있습니다.
KnativeServing CR 예
14장. Knative 서비스의 사용자 정의 도메인 구성 링크 복사링크가 클립보드에 복사되었습니다!
14.1. Knative 서비스의 사용자 정의 도메인 구성 링크 복사링크가 클립보드에 복사되었습니다!
Knative 서비스에는 클러스터 구성에 따라 기본 도메인 이름이 자동으로 할당됩니다. 예를 들면 < ;service_name>-<namespace>.example.com 입니다. 소유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다.
서비스에 대한 DomainMapping 리소스를 생성하여 이 작업을 수행할 수 있습니다. 또한 여러 개의 DomainMapping 리소스를 생성하여 여러 도메인에 매핑하고 하위 도메인을 단일 서비스에 매핑할 수도 있습니다.
14.2. 사용자 정의 도메인 매핑 링크 복사링크가 클립보드에 복사되었습니다!
소유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. 사용자 정의 도메인 이름을 CR(사용자 정의 리소스)에 매핑하려면 Knative 서비스 또는 Knative 경로와 같이 주소 지정 가능 대상 CR에 매핑하는 DomainMapping CR을 생성해야 합니다.
14.2.1. 사용자 정의 도메인 매핑 생성 링크 복사링크가 클립보드에 복사되었습니다!
소유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. 사용자 정의 도메인 이름을 CR(사용자 정의 리소스)에 매핑하려면 Knative 서비스 또는 Knative 경로와 같이 주소 지정 가능 대상 CR에 매핑하는 DomainMapping CR을 생성해야 합니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
OpenShift CLI(
oc)를 설치합니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
Knative 서비스를 생성했으며 해당 서비스에 매핑할 사용자 정의 도메인을 제어할 수 있습니다.
참고사용자 정의 도메인에서 OpenShift Container Platform 클러스터의 IP 주소를 참조해야 합니다.
프로세스
매핑하려는 대상 CR과 동일한 네임스페이스에
DomainMappingCR을 포함하는 YAML 파일을 생성합니다.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 DomainMappingCR을 YAML 파일로 적용합니다.oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.3. Knative CLI를 사용한 Knative 서비스의 사용자 정의 도메인 링크 복사링크가 클립보드에 복사되었습니다!
소유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. Knative(kn) CLI를 사용하여 Knative 서비스 또는 Knative 경로와 같이 주소 지정 가능 대상 CR에 매핑되는 DomainMapping CR(사용자 정의 리소스)을 생성할 수 있습니다.
14.3.1. Knative CLI를 사용하여 사용자 정의 도메인 매핑 생성 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
Knative 서비스 또는 경로를 생성했으며 CR에 매핑할 사용자 정의 도메인을 제어할 수 있습니다.
참고사용자 정의 도메인에서 OpenShift Container Platform 클러스터의 DNS를 가리켜야 합니다.
-
Knative(
kn) CLI가 설치되어 있습니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
프로세스
현재 네임스페이스의 CR에 도메인을 매핑합니다.
kn domain create <domain_mapping_name> --ref <target_name>
$ kn domain create <domain_mapping_name> --ref <target_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
kn domain create example.com --ref showcase
$ kn domain create example.com --ref showcaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow --ref플래그는 도메인 매핑을 위해 주소 지정 가능한 대상 CR을 지정합니다.--ref플래그를 사용할 때 접두사가 지정되어 있지 않은 경우 대상이 현재 네임스페이스의 Knative 서비스라고 가정합니다.지정된 네임스페이스의 Knative 서비스에 도메인을 매핑합니다.
kn domain create <domain_mapping_name> --ref <ksvc:service_name:service_namespace>
$ kn domain create <domain_mapping_name> --ref <ksvc:service_name:service_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
kn domain create example.com --ref ksvc:showcase:example-namespace
$ kn domain create example.com --ref ksvc:showcase:example-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 도메인을 Knative 경로에 매핑합니다.
kn domain create <domain_mapping_name> --ref <kroute:route_name>
$ kn domain create <domain_mapping_name> --ref <kroute:route_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령 예
kn domain create example.com --ref kroute:example-route
$ kn domain create example.com --ref kroute:example-routeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
14.4. 웹 콘솔을 사용한 도메인 매핑 링크 복사링크가 클립보드에 복사되었습니다!
소유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. OpenShift Container Platform 웹 콘솔을 사용하여 DomainMapping CR(사용자 정의 리소스)을 Knative 서비스에 매핑할 수 있습니다.
14.4.1. 사용자 정의 도메인을 서비스에 매핑 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
- 웹 콘솔에 로그인했습니다.
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다. 클러스터 관리자가 완료해야 합니다.
- 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
Knative 서비스를 생성했으며 해당 서비스에 매핑할 사용자 정의 도메인을 제어할 수 있습니다.
참고사용자 정의 도메인에서 OpenShift Container Platform 클러스터의 IP 주소를 참조해야 합니다.
프로세스
- 토폴로지 페이지로 이동합니다.
-
도메인에 매핑할 서비스를 마우스 오른쪽 버튼으로 클릭하고 서비스 이름이 포함된 편집 옵션을 선택합니다. 예를 들어 서비스 이름이 show인 경우 Edit Show 옵션을 선택합니다.
고급 옵션 섹션에서 고급 라우팅 옵션 표시를 클릭합니다.
- 서비스에 매핑하려는 도메인 매핑 CR이 이미 존재하는 경우 도메인 매핑 목록에서 이를 선택할 수 있습니다.
-
새 도메인 매핑 CR을 생성하려면 도메인 이름을 상자에 입력하고 만들기 옵션을 선택합니다. 예를 들어
example.com을 입력하는 경우 만들기 옵션은 Create "example.com" 입니다.
- 저장을 클릭하여 서비스 변경 사항을 저장합니다.
검증
- 토폴로지 페이지로 이동합니다.
- 생성한 서비스를 클릭합니다.
- 서비스 정보 창의 리소스 탭에서는 도메인 매핑에 나열된 서비스에 매핑한 도메인을 확인할 수 있습니다.
14.4.2. 암호화 제품군 제한 링크 복사링크가 클립보드에 복사되었습니다!
수신에 net-kourier 를 지정하고 DomainMapping 을 사용하면 OpenShift 라우팅의 TLS가 passthrough로 설정되고 Kourier Gateway에서 TLS를 처리합니다. 이러한 경우 Kourier에 사용할 수 있는 TLS 암호화 제품군을 제한해야 할 수 있습니다.
사전 요구 사항
- 웹 콘솔에 로그인했습니다.
- OpenShift Serverless Operator를 설치했습니다.
- Knative Serving이 설치되어 있습니다.
프로젝트를 생성하거나 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
참고사용자 정의 도메인은 클러스터의 IP 주소를 가리켜야 합니다.
프로세스
KnativeServingCR에서cipher-suites값을 사용하여 활성화할 암호화 제품군을 지정합니다.KnativeServing CR 예
spec: config: kourier: cipher-suites: ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-ECDSA-CHACHA20-POLY1305spec: config: kourier: cipher-suites: ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-ECDSA-CHACHA20-POLY1305Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기타 암호화 제품군은 비활성화됩니다. 여러 제품군을 쉼표로 구분하여 지정할 수 있습니다.
참고Kourier 게이트웨이의 컨테이너 이미지는 Envoy 프록시 이미지를 사용하며 기본 활성화된 암호화 제품군은 Envoy 프록시 버전에 따라 다릅니다.
14.5. TLS 인증서를 사용하여 매핑된 서비스 보안 링크 복사링크가 클립보드에 복사되었습니다!
14.5.1. TLS 인증서를 사용하여 사용자 정의 도메인으로 서비스 보안 링크 복사링크가 클립보드에 복사되었습니다!
Knative 서비스에 대한 사용자 정의 도메인을 구성한 후 TLS 인증서를 사용하여 매핑된 서비스를 보호할 수 있습니다. 이렇게 하려면 Kubernetes TLS 시크릿을 생성한 다음 생성한 TLS 시크릿을 사용하도록 DomainMapping CR을 업데이트해야 합니다.
사전 요구 사항
-
Knative 서비스에 대한 사용자 정의 도메인을 구성하고
DomainMappingCR이 작동합니다. - 인증 기관 공급자의 TLS 인증서 또는 자체 서명된 인증서가 있습니다.
-
인증 기관 공급자 또는 자체 서명된 인증서에서 인증서 및
키파일을 가져왔습니다. -
OpenShift CLI(
oc)를 설치합니다.
프로세스
Kubernetes TLS 시크릿을 생성합니다.
oc create secret tls <tls_secret_name> --cert=<path_to_certificate_file> --key=<path_to_key_file>
$ oc create secret tls <tls_secret_name> --cert=<path_to_certificate_file> --key=<path_to_key_file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kubernetes TLS
보안에 networking.internal.knative.dev/certificate-uid: <id>'레이블을 추가합니다.oc label secret <tls_secret_name> networking.internal.knative.dev/certificate-uid="<id>"
$ oc label secret <tls_secret_name> networking.internal.knative.dev/certificate-uid="<id>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow cert-manager와 같은 타사 시크릿 공급자를 사용하는 경우 Kubernetes TLS 보안에 레이블을 지정하도록 시크릿 관리자를 구성할 수 있습니다.cert-manager사용자는 제공되는 시크릿 템플릿을 사용하여 올바른 레이블로 시크릿을 자동으로 생성할 수 있습니다. 이 경우 키만 기반으로 보안 필터링이 수행되지만 이 값은 시크릿에 포함된 인증서 ID와 같은 유용한 정보를 전송할 수 있습니다.참고cert-manager Operator for Red Hat OpenShift는 기술 프리뷰 기능입니다. 자세한 내용은 cert-manager Operator for Red Hat OpenShift 설명서를 참조하십시오.
생성한 TLS 시크릿을 사용하도록
DomainMappingCR을 업데이트합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
DomainMappingCR 상태가True이고 출력의URL열에 스키마https와 함께 매핑된 도메인이 표시되는지 확인합니다.oc get domainmapping <domain_name>
$ oc get domainmapping <domain_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME URL READY REASON example.com https://example.com True
NAME URL READY REASON example.com https://example.com TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 서비스가 공개적으로 노출되는 경우 다음 명령을 실행하여 서비스를 사용할 수 있는지 확인합니다.
curl https://<domain_name>
$ curl https://<domain_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인증서가 자체 서명된 경우
curl명령에-k플래그를 추가하여 확인을 건너뜁니다.
14.5.2. 시크릿 필터링을 사용하여 net-kourier 메모리 사용량 개선 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Kubernetes client-go 라이브러리에 대한 정보 제공자 는 특정 유형의 모든 리소스를 가져옵니다. 이로 인해 많은 리소스가 사용 가능한 경우 상당한 오버헤드가 발생할 수 있으므로 메모리 누수로 인해 대규모 클러스터에서 Knative net-kourier Ingress 컨트롤러가 실패할 수 있습니다. 그러나 필터링 메커니즘은 Knative net-kourier 수신 컨트롤러에서 사용할 수 있으므로 컨트롤러가 Knative 관련 시크릿만 가져올 수 있습니다.
OpenShift Serverless Operator 측에서는 기본적으로 보안 필터링이 활성화됩니다. 환경 변수 ENABLE_SECRET_INFORMER_BY_CERT_UID=true 가 기본적으로 net-kourier 컨트롤러 포드에 추가됩니다.
보안 필터링을 활성화하는 경우 모든 시크릿에 networking.internal.knative.dev/certificate-uid: "<id>" 로 레이블이 지정되어야 합니다. 그렇지 않으면 Knative Serving이 탐지되지 않아 오류가 발생합니다. 새 보안 및 기존 보안에 레이블을 지정해야 합니다.
사전 요구 사항
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
- 애플리케이션 및 기타 워크로드를 생성할 수 있는 역할 및 권한이 있거나 생성한 프로젝트입니다.
- OpenShift Serverless Operator 및 Knative Serving을 설치합니다.
-
OpenShift CLI(
oc)를 설치합니다.
KnativeServing CR(사용자 정의 리소스)의 workloads 필드를 사용하여 ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID 변수를 false 로 설정하여 시크릿 필터링을 비활성화할 수 있습니다.
KnativeServing CR의 예
15장. Knative Serving의 고가용성 구성 링크 복사링크가 클립보드에 복사되었습니다!
15.1. Knative 서비스의 고가용성 링크 복사링크가 클립보드에 복사되었습니다!
고가용성(HA)은 중단이 발생하는 경우 API가 작동하도록 하는 데 도움이 되는 Kubernetes API의 표준 기능입니다. HA 배포에서 활성 컨트롤러가 충돌하거나 삭제되면 다른 컨트롤러를 쉽게 사용할 수 있습니다. 이 컨트롤러는 현재 사용할 수 없는 컨트롤러에서 서비스 중인 API의 처리를 대신합니다.
OpenShift Serverless의 HA는 Knative Serving 또는 Eventing 컨트롤 플레인을 설치하면 기본적으로 활성화되는 리더 선택을 통해 사용할 수 있습니다. 리더 선택 HA 패턴을 사용하는 경우에는 요구하기 전에 컨트롤러의 인스턴스가 이미 예약되어 클러스터 내에서 실행됩니다. 이러한 컨트롤러 인스턴스는 리더 선택 잠금이라는 공유 리소스를 사용하기 위해 경쟁합니다. 지정된 시간에 리더 선택 잠금 리소스에 액세스할 수 있는 컨트롤러의 인스턴스를 리더라고 합니다.
15.2. Knative 배포를 위한 고가용성 링크 복사링크가 클립보드에 복사되었습니다!
HA(고가용성)는 Knative Serving activator, autoscaler ,,autoscaler -hpacontroller,webhook,domainmapping ,,domainmapping- webhookkourier-control, kourier-gateway 구성 요소에 각각 두 개의 복제본을 갖도록 구성되어 있습니다. KnativeServing CR(사용자 정의 리소스)의 spec.high-availability.replicas 값을 수정하여 이러한 구성 요소의 복제본 수를 변경할 수 있습니다.
15.2.1. Knative Serving의 고가용성 복제본 구성 링크 복사링크가 클립보드에 복사되었습니다!
적합한 배포 리소스에 대해 최소 복제본 3개를 지정하려면 사용자 정의 리소스의 spec.high-availability.replicas 필드 값을 3 으로 설정합니다.
사전 요구 사항
- OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
프로세스
- OpenShift Container Platform 웹 콘솔에서 OperatorHub → 설치된 Operator 로 이동합니다.
-
knative-serving네임스페이스를 선택합니다. - OpenShift Serverless Operator의 제공되는 API 목록에서 Knative Serving을 클릭하여 Knative Serving 탭으로 이동합니다.
- knative-serving을 클릭한 다음 knative-serving 페이지의 YAML 탭으로 이동합니다.
KnativeServingCR의 복제본 수를 수정합니다.YAML의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 특정 워크로드에 대한 복제본 수를 지정할 수도 있습니다.
참고워크로드별 구성이 Knative Serving의 글로벌 설정을 덮어씁니다.
YAML의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 고가용성 제한이 적용되는지 확인합니다.
명령 예
oc get hpa -n knative-serving
$ oc get hpa -n knative-servingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE activator Deployment/activator 0%/100% 3 22 3 2m24s webhook Deployment/webhook 2%/100% 4 8 4 2m23s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE activator Deployment/activator 0%/100% 3 22 3 2m24s webhook Deployment/webhook 2%/100% 4 8 4 2m23sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
15.2.2. 중단 예산 덮어쓰기 링크 복사링크가 클립보드에 복사되었습니다!
Pod 중단 예산(PDB)은 유지 관리를 위해 Pod를 다시 예약해야 하는 경우 애플리케이션으로 중단을 제한하는 데 도움이 되는 Kubernetes API의 표준 기능입니다.
프로세스
-
KnativeServingCR(사용자 정의 리소스)에서minAvailable구성 값을 수정하여 특정 리소스에 대한 기본 PDB를 재정의합니다.
minAvailable 설정이 70%인 PDB의 예
high-availability.replicas 값을 1 로 변경하여 고가용성을 비활성화하는 경우 해당 PDB minAvailable 값도 0 으로 업데이트하십시오. 그러지 않으면 Pod 중단 예산에서 자동 클러스터 또는 Operator 업데이트를 방지합니다.
16장. 튜닝 제공 구성 링크 복사링크가 클립보드에 복사되었습니다!
16.1. Knative Serving 시스템 배포 구성 덮어쓰기 링크 복사링크가 클립보드에 복사되었습니다!
KnativeServing CR(사용자 정의 리소스)의 workloads 사양을 수정하여 일부 특정 배포의 기본 구성을 덮어쓸 수 있습니다.
16.1.1. 시스템 배포 구성 덮어쓰기 링크 복사링크가 클립보드에 복사되었습니다!
현재는 프로브 준비 및 활성 필드뿐만 아니라 리소스,복제본,레이블, nodeSelector 필드에 대해 기본 구성 설정을 재정의할 수 있습니다.
다음 예에서 KnativeServing CR은 다음과 같이 웹 후크 배포를 덮어씁니다.
-
net-kourier-controller의준비 상태프로브 시간 초과는 10초로 설정됩니다. - 배포에 CPU 및 메모리 리소스 제한이 지정되어 있습니다.
- 배포에는 3개의 복제본이 있습니다.
-
example-label:레이블이 추가되었습니다. -
example-annotation: 주석주석이 추가되었습니다. -
nodeSelector필드는disktype: hdd라벨이 있는 노드를 선택하도록 설정됩니다.
KnativeServing CR 레이블 및 주석 설정은 배포 자체와 결과 Pod 모두에 대한 배포의 레이블 및 주석을 재정의합니다.
KnativeServing CR 예
- 1
준비및 활성 상태 프로브 덮어쓰기를 사용하여프로브처리기와 관련된 필드를 제외하고 Kubernetes API에 지정된 대로 배포 컨테이너에서 프로브의 모든 필드를 덮어쓸 수 있습니다.exec,grpc,httpGet,tcpSocket.
17장. 큐 프록시 리소스 구성 링크 복사링크가 클립보드에 복사되었습니다!
Queue 프록시는 서비스 내의 각 애플리케이션 컨테이너에 대한 사이드카 컨테이너입니다. Serverless 워크로드 관리를 개선하여 리소스 사용량을 효율적으로 보장합니다. Queue 프록시를 구성할 수 있습니다.
17.1. Knative 서비스에 대한 큐 프록시 리소스 구성 링크 복사링크가 클립보드에 복사되었습니다!
배포 구성 맵에서 큐 프록시 리소스 요청 및 제한을 전역적으로 구성하는 것 외에도 CPU, 메모리 및 임시 스토리지 리소스 유형을 대상으로 하는 해당 주석을 사용하여 서비스 수준에서 설정할 수 있습니다.
사전 요구 사항
- Red Hat OpenShift Pipelines가 클러스터에 설치되어 있어야 합니다.
-
OpenShift(
oc) CLI가 설치되어 있습니다. -
Knative(
kn) CLI가 설치되어 있습니다.
프로세스
리소스 요청 및 제한을 사용하여 서비스의 configmap을 수정합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 Queue 프록시 리소스를 애플리케이션 컨테이너의 백분율로 계산하는 특수
queue.sidecar.serving.knative.dev/resource-percentage주석을 사용할 수 있습니다. CPU 및 메모리 리소스 요구 사항이 애플리케이션 컨테이너 요구 사항에서 계산되고 아래 경계 외부에 있는 경우 값이 경계에 맞게 조정됩니다. 이 경우 CPU 및 메모리 리소스 요구 사항에 다음 최소 및 최대 경계가 적용됩니다.Expand 표 17.1. 리소스 요구 사항 경계 리소스 요구 사항 분 Max CPU 요청
25m
100m
CPU 제한
40m
500m
메모리 요청
50Mi
200Mi
메모리 제한
200Mi
500Mi
참고해당 리소스 주석을 사용하여 백분율 주석과 특정 리소스 값을 동시에 설정하는 경우 후자가 우선합니다.
주의queue.sidecar.serving.knative.dev/resource-percentage주석이 더 이상 사용되지 않으며 향후 OpenShift Serverless 버전에서 제거됩니다.