4.4. 단일 모델 제공 플랫폼에 대한 권한 부여 공급자 추가
Authorino 를 단일 모델 제공 플랫폼의 권한 부여 공급자로 추가할 수 있습니다. 권한 부여 공급자를 추가하면 플랫폼에 배포하는 모델에 대한 토큰 인증을 활성화할 수 있으므로 권한이 있는 당사자만 모델에 대한 유추 요청을 수행할 수 있습니다.
Authorino를 권한 부여 공급자로 추가하는 데 사용하는 방법은 단일 모델 제공 플랫폼을 설치하는 방법에 따라 다릅니다. 플랫폼의 설치 옵션은 다음과 같습니다.
- 자동 설치
OpenShift 클러스터에서
ServiceMeshControlPlane
또는KNativeServing
리소스를 아직 생성하지 않은 경우 KServe 및 해당 종속 항목을 설치하도록 Red Hat OpenShift AI Operator를 구성할 수 있습니다. Authorino를 자동화된 설치 프로세스의 일부로 포함할 수 있습니다.Authorino를 포함한 자동 설치에 대한 자세한 내용은 KServe의 자동 설치 구성을 참조하십시오.
- 수동 설치
OpenShift 클러스터에서
ServiceMeshControlPlane
또는KNativeServing
리소스를 이미 생성한 경우 KServe 및 해당 종속 항목을 설치하도록 Red Hat OpenShift AI Operator를 구성할 수 없습니다. 이 경우 KServe를 수동으로 설치해야 합니다. Authorino를 수동으로 설정해야 합니다.Authorino를 포함한 수동 설치에 대한 자세한 내용은 KServe 수동 설치를 참조하십시오.
참고단일 모델 제공 플랫폼의 수동 설치 중에
Unmanaged
모드에서 KServe를 실행할 수 있습니다. 이 모드는 KServe 컨트롤러의 리소스 제한 수정과 같은 KServe 구성 요소를 더 많이 제어해야 하는 경우에 유용합니다.
4.4.1. 수동으로 인증 공급자 추가
Authorino 를 단일 모델 제공 플랫폼의 권한 부여 공급자로 추가할 수 있습니다. 권한 부여 공급자를 추가하면 플랫폼에 배포하는 모델에 대한 토큰 인증을 활성화할 수 있으므로 권한이 있는 당사자만 모델에 대한 유추 요청을 수행할 수 있습니다.
권한 부여 공급자로 작성자를 수동으로 추가하려면 Red Hat - Authorino
Operator를 설치하고 Authorino 인스턴스를 생성한 다음 인스턴스를 사용하도록 OpenShift Service Mesh 및 KServe 구성 요소를 구성해야 합니다.
권한 부여 공급자를 수동으로 추가하려면 OpenShift Service Mesh 인스턴스를 구성해야 합니다. OpenShift Service Mesh 인스턴스가 지원되는 상태로 유지되도록 하려면 이 섹션에 표시된 업데이트 만 만듭니다.
사전 요구 사항
- Authorino를 인증 공급자로 추가하고 수동 설치를 적절한 옵션으로 확인하는 옵션을 검토했습니다. 권한 부여 공급자 추가를 참조하십시오.
- OpenShift Service Mesh를 포함하여 KServe 및 해당 종속 항목을 수동으로 설치했습니다. KServe 수동 설치를 참조하십시오.
-
KServe를 수동으로 설치할 때
serviceMesh
구성 요소의managementState
필드 값을Unmanaged
로 설정합니다. 이 설정은 Authorino를 수동으로 추가하는 데 필요합니다. KServe 설치를 참조하십시오.
4.4.2. Red Hat Authorino Operator 설치
권한 부여 공급자로 Autorino를 추가하려면 OpenShift 클러스터에 Red Hat - Authorino
Operator를 설치해야 합니다.
사전 요구 사항
- OpenShift 클러스터에 대한 클러스터 관리자 권한이 있습니다.
프로세스
- OpenShift 웹 콘솔에 클러스터 관리자로 로그인합니다.
-
웹 콘솔에서 Operator
OperatorHub를 클릭합니다. - OperatorHub 페이지의 키워드로 필터링 필드에 Red Hat - Authorino 를 입력합니다.
- Red Hat - Authorino Operator를 클릭합니다.
- Red Hat - Authorino Operator 페이지에서 Operator 정보를 확인한 다음 설치를 클릭합니다.
Operator 설치 페이지에서 설치 모드,설치된 네임스페이스 및 업데이트 승인 의 기본값을 유지합니다.
- 채널 업데이트 의 경우 안정 을 선택합니다.
- 버전 의 경우 1.2.1 이상을 선택합니다.
- 설치를 클릭합니다.
검증
OpenShift 웹 콘솔에서 Operator
설치된 Operator 를 클릭하고 Red Hat - Authorino
Operator에 다음 상태 중 하나가 표시되는지 확인합니다.-
설치
- 설치가 진행 중입니다. 성공으로 변경될 때까지기다립니다
. 이 작업은 몇 분 정도 걸릴 수 있습니다. -
succeeded
- 설치에 성공합니다.
-
4.4.3. Authorino 인스턴스 생성
OpenShift 클러스터에 Red Hat - Authorino
Operator를 설치한 경우 Authorino 인스턴스를 생성해야 합니다.
사전 요구 사항
-
Red Hat - Authorino
Operator가 설치되어 있습니다. OpenShift Service Mesh 인스턴스가 생성된 프로젝트에 리소스를 추가할 수 있는 권한이 있습니다. OpenShift Service Mesh 인스턴스 생성을 참조하십시오.
OpenShift 권한에 대한 자세한 내용은 RBAC를 사용하여 권한 정의 및 적용 (Red Hat OpenShift Dedicated) 또는 RBAC를 사용하여 권한 정의 및 적용 (Red Hat OpenShift Service on AWS)을 참조하십시오.
프로세스
- 새 터미널 창을 엽니다.
다음과 같이 OpenShift CLI(명령줄 인터페이스)에 로그인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc login <openshift_cluster_url> -u <username> -p <password>
$ oc login <openshift_cluster_url> -u <username> -p <password>
Authorino 인스턴스를 설치할 네임스페이스를 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-project <namespace_for_authorino_instance>
$ oc new-project <namespace_for_authorino_instance>
참고자동화된 설치 프로세스는 Authorino 인스턴스에 대해
redhat-ods-applications-auth-provider
라는 네임스페이스를 생성합니다. 수동 설치에 동일한 네임스페이스 이름을 사용하는 것이 좋습니다.기존 OpenShift Service Mesh 인스턴스에 Authorino 인스턴스의 새 네임스페이스를 등록하려면 다음 콘텐츠를 사용하여 새 YAML 파일을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: maistra.io/v1 kind: ServiceMeshMember metadata: name: default namespace: <namespace_for_authorino_instance> spec: controlPlaneRef: namespace: <namespace_for_service_mesh_instance> name: <name_of_service_mesh_instance>
apiVersion: maistra.io/v1 kind: ServiceMeshMember metadata: name: default namespace: <namespace_for_authorino_instance> spec: controlPlaneRef: namespace: <namespace_for_service_mesh_instance> name: <name_of_service_mesh_instance>
- YAML 파일을 저장합니다.
클러스터에
ServiceMeshMember
리소스를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Authorino 인스턴스를 구성하려면 다음 예와 같이 새 YAML 파일을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: operator.authorino.kuadrant.io/v1beta1 kind: Authorino metadata: name: authorino namespace: <namespace_for_authorino_instance> spec: authConfigLabelSelectors: security.opendatahub.io/authorization-group=default clusterWide: true listener: tls: enabled: false oidcServer: tls: enabled: false
apiVersion: operator.authorino.kuadrant.io/v1beta1 kind: Authorino metadata: name: authorino namespace: <namespace_for_authorino_instance> spec: authConfigLabelSelectors: security.opendatahub.io/authorization-group=default clusterWide: true listener: tls: enabled: false oidcServer: tls: enabled: false
- YAML 파일을 저장합니다.
클러스터에
Authorino
리소스를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Authorino 배포를 패치하여 Istio 사이드카를 삽입하여 Authorino 인스턴스를 OpenShift Service Mesh 인스턴스의 일부로 만듭니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patch deployment <name_of_authorino_instance> -n <namespace_for_authorino_instance> -p '{"spec": {"template":{"metadata":{"labels":{"sidecar.istio.io/inject":"true"}}}} }'
$ oc patch deployment <name_of_authorino_instance> -n <namespace_for_authorino_instance> -p '{"spec": {"template":{"metadata":{"labels":{"sidecar.istio.io/inject":"true"}}}} }'
검증
Authorino 인스턴스가 다음과 같이 실행되고 있는지 확인합니다.
다음 예와 같이 Authorino 인스턴스에 대해 생성한 네임스페이스에서 실행 중인 Pod(및 컨테이너)를 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n redhat-ods-applications-auth-provider -o="custom-columns=NAME:.metadata.name,STATUS:.status.phase,CONTAINERS:.spec.containers[*].name"
$ oc get pods -n redhat-ods-applications-auth-provider -o="custom-columns=NAME:.metadata.name,STATUS:.status.phase,CONTAINERS:.spec.containers[*].name"
출력이 다음 예와 유사한지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME STATUS CONTAINERS authorino-6bc64bd667-kn28z Running authorino,istio-proxy
NAME STATUS CONTAINERS authorino-6bc64bd667-kn28z Running authorino,istio-proxy
예제에 표시된 대로 Authorino 인스턴스에 대해 실행 중인 단일 Pod가 있습니다. Pod에는 Authorino용 컨테이너와 사용자가 삽입한 Istio 사이드카에 대한 컨테이너가 있습니다.
4.4.4. Authorino를 사용하도록 OpenShift Service Mesh 인스턴스 구성
Authorino 인스턴스를 생성한 경우 Authorino를 권한 부여 공급자로 사용하도록 OpenShift Service Mesh 인스턴스를 구성해야 합니다.
OpenShift Service Mesh 인스턴스가 지원되는 상태로 유지되도록 하려면 다음 절차에 표시된 구성 업데이트 만 만듭니다.
사전 요구 사항
- Authorino 인스턴스를 생성하고 OpenShift Service Mesh 인스턴스에서 Authorino 인스턴스의 네임스페이스를 등록했습니다.
- OpenShift Service Mesh 인스턴스를 수정할 수 있는 권한이 있습니다. OpenShift Service Mesh 인스턴스 생성을 참조하십시오.
프로세스
터미널 창에서 OpenShift Service Mesh 인스턴스를 업데이트할 권한이 있는 사용자로 OpenShift 클러스터에 로그인하지 않은 경우 다음 예와 같이 OpenShift CLI에 로그인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc login <openshift_cluster_url> -u <username> -p <password>
$ oc login <openshift_cluster_url> -u <username> -p <password>
다음 콘텐츠를 사용하여 새 YAML 파일을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow spec: techPreview: meshConfig: extensionProviders: - name: redhat-ods-applications-auth-provider envoyExtAuthzGrpc: service: <name_of_authorino_instance>-authorino-authorization.<namespace_for_authorino_instance>.svc.cluster.local port: 50051
spec: techPreview: meshConfig: extensionProviders: - name: redhat-ods-applications-auth-provider envoyExtAuthzGrpc: service: <name_of_authorino_instance>-authorino-authorization.<namespace_for_authorino_instance>.svc.cluster.local port: 50051
- YAML 파일을 저장합니다.
oc patch
명령을 사용하여 YAML 파일을 OpenShift Service Mesh 인스턴스에 적용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patch smcp <name_of_service_mesh_instance> --type merge -n <namespace_for_service_mesh_instance> --patch-file <file_name>.yaml
$ oc patch smcp <name_of_service_mesh_instance> --type merge -n <namespace_for_service_mesh_instance> --patch-file <file_name>.yaml
중요OpenShift Service Mesh 인스턴스에서 다른 확장 공급자를 아직 지정하지 않은 경우에만 패치로 표시된 구성을 적용할 수 있습니다. 다른 확장 공급자를 이미 지정한 경우 구성을 추가하려면
ServiceMeshControlPlane
리소스를 수동으로 편집해야 합니다.
검증
다음과 같이 Authorino 인스턴스가 OpenShift Service Mesh 구성에서 확장 공급자로 추가되었는지 확인합니다.
OpenShift Service Mesh 인스턴스의
ConfigMap
오브젝트를 검사합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get configmap istio-<name_of_service_mesh_instance> -n <namespace_for_service_mesh_instance> --output=jsonpath={.data.mesh}
$ oc get configmap istio-<name_of_service_mesh_instance> -n <namespace_for_service_mesh_instance> --output=jsonpath={.data.mesh}
Authorino 인스턴스가 확장 공급자로 성공적으로 추가되었음을 보여주는 다음 예와 유사한 출력이 표시되는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow defaultConfig: discoveryAddress: istiod-data-science-smcp.istio-system.svc:15012 proxyMetadata: ISTIO_META_DNS_AUTO_ALLOCATE: "true" ISTIO_META_DNS_CAPTURE: "true" PROXY_XDS_VIA_AGENT: "true" terminationDrainDuration: 35s tracing: {} dnsRefreshRate: 300s enablePrometheusMerge: true extensionProviders: - envoyExtAuthzGrpc: port: 50051 service: authorino-authorino-authorization.opendatahub-auth-provider.svc.cluster.local name: opendatahub-auth-provider ingressControllerMode: "OFF" rootNamespace: istio-system trustDomain: null%
defaultConfig: discoveryAddress: istiod-data-science-smcp.istio-system.svc:15012 proxyMetadata: ISTIO_META_DNS_AUTO_ALLOCATE: "true" ISTIO_META_DNS_CAPTURE: "true" PROXY_XDS_VIA_AGENT: "true" terminationDrainDuration: 35s tracing: {} dnsRefreshRate: 300s enablePrometheusMerge: true extensionProviders: - envoyExtAuthzGrpc: port: 50051 service: authorino-authorino-authorization.opendatahub-auth-provider.svc.cluster.local name: opendatahub-auth-provider ingressControllerMode: "OFF" rootNamespace: istio-system trustDomain: null%
4.4.5. KServe에 대한 권한 부여 구성
Authorino를 사용하도록 단일 모델 제공 플랫폼을 구성하려면 모델을 배포할 때 생성되는 KServe 예측기 Pod에 적용되는 글로벌 AuthorizationPolicy
리소스를 생성해야 합니다. 또한 모델에 대한 유추 요청을 할 때 발생하는 여러 네트워크 홉을 고려하려면 유추 요청에 포함된 처음에 HTTP 호스트 헤더를 지속적으로 재설정하는 EnvoyFilter
리소스를 생성해야 합니다.
사전 요구 사항
- Authorino 인스턴스를 생성하고 이를 사용하도록 OpenShift Service Mesh를 구성했습니다.
- 클러스터에서 KServe 배포를 업데이트할 수 있는 권한이 있습니다.
- OpenShift Service Mesh 인스턴스가 생성된 프로젝트에 리소스를 추가할 수 있는 권한이 있습니다. OpenShift Service Mesh 인스턴스 생성을 참조하십시오.
프로세스
터미널 창에서 KServe 배포를 업데이트할 권한이 있는 사용자로 OpenShift 클러스터에 로그인하지 않은 경우 다음 예와 같이 OpenShift CLI에 로그인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc login <openshift_cluster_url> -u <username> -p <password>
$ oc login <openshift_cluster_url> -u <username> -p <password>
다음 콘텐츠를 사용하여 새 YAML 파일을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: kserve-predictor spec: action: CUSTOM provider: name: redhat-ods-applications-auth-provider rules: - to: - operation: notPaths: - /healthz - /debug/pprof/ - /metrics - /wait-for-drain selector: matchLabels: component: predictor
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: kserve-predictor spec: action: CUSTOM provider: name: redhat-ods-applications-auth-provider
1 rules: - to: - operation: notPaths: - /healthz - /debug/pprof/ - /metrics - /wait-for-drain selector: matchLabels: component: predictor
- 1
- 지정한 이름은 OpenShift Service Mesh 인스턴스에 추가한 확장 공급자의 이름과 일치해야 합니다.
- YAML 파일을 저장합니다.
OpenShift Service Mesh 인스턴스의 네임스페이스에
AuthorizationPolicy
리소스를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -n <namespace_for_service_mesh_instance> -f <file_name>.yaml
$ oc create -n <namespace_for_service_mesh_instance> -f <file_name>.yaml
다음 콘텐츠를 사용하여 다른 새 YAML 파일을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: activator-host-header spec: priority: 20 workloadSelector: labels: component: predictor configPatches: - applyTo: HTTP_FILTER match: listener: filterChain: filter: name: envoy.filters.network.http_connection_manager patch: operation: INSERT_BEFORE value: name: envoy.filters.http.lua typed_config: '@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua inlineCode: | function envoy_on_request(request_handle) local headers = request_handle:headers() if not headers then return end local original_host = headers:get("k-original-host") if original_host then port_seperator = string.find(original_host, ":", 7) if port_seperator then original_host = string.sub(original_host, 0, port_seperator-1) end headers:replace('host', original_host) end end
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: activator-host-header spec: priority: 20 workloadSelector: labels: component: predictor configPatches: - applyTo: HTTP_FILTER match: listener: filterChain: filter: name: envoy.filters.network.http_connection_manager patch: operation: INSERT_BEFORE value: name: envoy.filters.http.lua typed_config: '@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua inlineCode: | function envoy_on_request(request_handle) local headers = request_handle:headers() if not headers then return end local original_host = headers:get("k-original-host") if original_host then port_seperator = string.find(original_host, ":", 7) if port_seperator then original_host = string.sub(original_host, 0, port_seperator-1) end headers:replace('host', original_host) end end
표시된
EnvoyFilter
리소스는 처음에 임의 추론 요청에 포함된 HTTP 호스트 헤더를 지속적으로 재설정합니다.OpenShift Service Mesh 인스턴스의 네임스페이스에
EnvoyFilter
리소스를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -n <namespace_for_service_mesh_instance> -f <file_name>.yaml
$ oc create -n <namespace_for_service_mesh_instance> -f <file_name>.yaml
검증
AuthorizationPolicy
리소스가 성공적으로 생성되었는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get authorizationpolicies -n <namespace_for_service_mesh_instance>
$ oc get authorizationpolicies -n <namespace_for_service_mesh_instance>
다음 예와 유사한 출력이 표시되는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME AGE kserve-predictor 28h
NAME AGE kserve-predictor 28h
EnvoyFilter
리소스가 성공적으로 생성되었는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get envoyfilter -n <namespace_for_service_mesh_instance>
$ oc get envoyfilter -n <namespace_for_service_mesh_instance>
다음 예와 유사한 출력이 표시되는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME AGE activator-host-header 28h
NAME AGE activator-host-header 28h