4.7. Knative 서비스의 사용자 정의 도메인 구성
4.7.1. Knative 서비스의 사용자 정의 도메인 구성
Knative 서비스에는 클러스터 구성에 따라 기본 도메인 이름이 자동으로 할당됩니다. 예를 들면 < ;service_name>-<namespace>.example.com
입니다. 보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다.
서비스에 대한 DomainMapping
리소스를 생성하여 이 작업을 수행할 수 있습니다. 또한 여러 개의 DomainMapping
리소스를 생성하여 여러 도메인에 매핑하고 하위 도메인을 단일 서비스에 매핑할 수도 있습니다.
4.7.2. 사용자 정의 도메인 매핑
보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. 사용자 정의 도메인 이름을 CR(사용자 정의 리소스)에 매핑하려면 Knative 서비스 또는 Knative 경로와 같이 주소 지정 가능 대상 CR에 매핑하는 DomainMapping
CR을 생성해야 합니다.
4.7.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과 동일한 네임스페이스에
DomainMapping
CR을 포함하는 YAML 파일을 생성합니다.apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain_name> 1 namespace: <namespace> 2 spec: ref: name: <target_name> 3 kind: <target_type> 4 apiVersion: serving.knative.dev/v1
서비스 도메인 매핑 예
apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: example-domain namespace: default spec: ref: name: example-service kind: Service apiVersion: serving.knative.dev/v1
경로 도메인 매핑 예
apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: example-domain namespace: default spec: ref: name: example-route kind: Route apiVersion: serving.knative.dev/v1
DomainMapping
CR을 YAML 파일로 적용합니다.$ oc apply -f <filename>
4.7.3. Knative CLI를 사용하는 Knative 서비스의 사용자 정의 도메인
보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. Knative(kn
) CLI를 사용하여 Knative 서비스 또는 Knative 경로와 같이 주소 지정 가능 대상 CR에 매핑되는 DomainMapping
CR(사용자 정의 리소스)을 생성할 수 있습니다.
4.7.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 example-domain-map --ref example-service
--ref
플래그는 도메인 매핑을 위해 주소 지정 가능한 대상 CR을 지정합니다.--ref
플래그를 사용할 때 접두사가 지정되어 있지 않은 경우 대상이 현재 네임스페이스의 Knative 서비스라고 가정합니다.지정된 네임스페이스의 Knative 서비스에 도메인을 매핑합니다.
$ kn domain create <domain_mapping_name> --ref <ksvc:service_name:service_namespace>
명령 예
$ kn domain create example-domain-map --ref ksvc:example-service:example-namespace
도메인을 Knative 경로에 매핑합니다.
$ kn domain create <domain_mapping_name> --ref <kroute:route_name>
명령 예
$ kn domain create example-domain-map --ref kroute:example-route
4.7.4. 개발자 관점을 사용한 도메인 매핑
보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다. OpenShift Container Platform 웹 콘솔의 개발자 화면을 사용하여 DomainMapping
CR(사용자 정의 리소스)을 Knative 서비스에 매핑할 수 있습니다.
4.7.4.1. 개발자 화면을 사용하여 사용자 정의 도메인을 서비스에 매핑
사전 요구 사항
- 웹 콘솔에 로그인했습니다.
- 개발자 화면에 있습니다.
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다. 클러스터 관리자가 이 작업을 완료해야 합니다.
- 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
Knative 서비스를 생성했으며 해당 서비스에 매핑할 사용자 정의 도메인을 제어할 수 있습니다.
참고사용자 정의 도메인에서 OpenShift Container Platform 클러스터의 IP 주소를 참조해야 합니다.
절차
- Topology( 토폴로지 ) 페이지로 이동합니다.
-
도메인에 매핑할 서비스를 마우스 오른쪽 버튼으로 클릭하고 서비스 이름이 포함된 Edit(편집 ) 옵션을 선택합니다. 예를 들어 서비스 이름이 example-service인 경우 Edit
example-service
( example-service 편집) 옵션을 선택합니다. Advanced options(고급 옵션) 섹션에서 Show advanced Routing options (고급 라우팅 옵션 표시 )를 클릭합니다.
- 서비스에 매핑할 도메인 매핑 CR이 이미 존재하는 경우 도메인 매핑 목록에서 선택할 수 있습니다.
-
새 도메인 매핑 CR을 생성하려면 상자에 도메인 이름을 입력하고 생성 옵션을 선택합니다. 예를 들어
example.com
에 입력하는 경우 Create 옵션은 Create "example.com" 입니다.
- Save(저장 )를 클릭하여 서비스에 변경 사항을 저장합니다.
검증
- Topology( 토폴로지 ) 페이지로 이동합니다.
- 생성한 서비스를 클릭합니다.
- 서비스 정보 창의 Resources(리소스 ) 탭에서 Domain mappings (도메인 매핑)에 나열된 서비스에 매핑한 도메인을 확인할 수 있습니다.
4.7.5. 관리자 관점을 사용한 도메인 매핑
OpenShift Container Platform 웹 콘솔의 개발자 화면으로 전환하거나 Knative(kn
) CLI 또는 YAML 파일을 사용하지 않으려면 OpenShift Container Platform 웹 콘솔의 관리자 화면을 사용할 수 있습니다.
4.7.5.1. 관리자 관점을 사용하여 사용자 정의 도메인을 서비스에 매핑
Knative 서비스에는 클러스터 구성에 따라 기본 도메인 이름이 자동으로 할당됩니다. 예를 들면 < ;service_name>-<namespace>.example.com
입니다. 보유한 사용자 정의 도메인 이름을 Knative 서비스에 매핑하여 Knative 서비스의 도메인을 사용자 지정할 수 있습니다.
서비스에 대한 DomainMapping
리소스를 생성하여 이 작업을 수행할 수 있습니다. 또한 여러 개의 DomainMapping
리소스를 생성하여 여러 도메인에 매핑하고 하위 도메인을 단일 서비스에 매핑할 수도 있습니다.
클러스터 관리자 권한이 있는 경우 OpenShift Container Platform 웹 콘솔의 관리자 화면을 사용하여 DomainMapping
CR(사용자 정의 리소스)을 생성할 수 있습니다.
사전 요구 사항
- 웹 콘솔에 로그인했습니다.
- 관리자 관점에 있습니다.
- OpenShift Serverless Operator를 설치했습니다.
- Knative Serving이 설치되어 있습니다.
- 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
Knative 서비스를 생성했으며 해당 서비스에 매핑할 사용자 정의 도메인을 제어할 수 있습니다.
참고사용자 정의 도메인에서 OpenShift Container Platform 클러스터의 IP 주소를 참조해야 합니다.
절차
- CustomResourceDefinitions(CustomResourceDefinitions )로 이동하고 검색 상자를 사용하여 DomainMapping CRD(사용자 정의 리소스 정의)를 찾습니다.
- DomainMapping CRD를 클릭한 다음 Instances(인스턴스 ) 탭으로 이동합니다.
- Create DomainMapping (도메인 매핑 만들기)을 클릭합니다.
인스턴스에 대해 다음 정보가 포함되도록
DomainMapping
CR의 YAML을 수정합니다.apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain_name> 1 namespace: <namespace> 2 spec: ref: name: <target_name> 3 kind: <target_type> 4 apiVersion: serving.knative.dev/v1
Knative 서비스에 대한 도메인 매핑의 예
apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: custom-ksvc-domain.example.com namespace: default spec: ref: name: example-service kind: Service apiVersion: serving.knative.dev/v1
검증
curl
요청을 사용하여 사용자 지정 도메인에 액세스합니다. 예를 들면 다음과 같습니다.명령 예
$ curl custom-ksvc-domain.example.com
출력 예
Hello OpenShift!
4.7.6. TLS 인증서를 사용하여 매핑된 서비스 보안
4.7.6.1. TLS 인증서를 사용하여 사용자 정의 도메인으로 서비스 보안
Knative 서비스의 사용자 정의 도메인을 구성한 후 TLS 인증서를 사용하여 매핑된 서비스를 보호할 수 있습니다. 이렇게 하려면 Kubernetes TLS 시크릿을 생성한 다음 생성한 TLS 시크릿을 사용하도록 DomainMapping
CR을 업데이트해야 합니다.
Ingress에 net-istio
를 사용하고 security.dataPlane.mtls: true
를 사용하여 SMCP를 통해 mTLS를 활성화하는 경우 Service Mesh는 OpenShift Serverless에 대한 DomainMapping
을 허용하지 않는 *.local
호스트에 대한 DestinationRule
을 배포합니다.
이 문제를 해결하려면 security.dataPlane.mtls: true
를 사용하는 대신 PeerAuthentication
을 배포하여 mTLS를 활성화합니다.
사전 요구 사항
-
Knative 서비스의 사용자 정의 도메인을 구성하고 작동 중인
DomainMapping
CR이 있습니다. - 인증 기관 공급자 또는 자체 서명 인증서의 TLS 인증서가 있어야 합니다.
-
인증 기관 공급자 또는 자체 서명된 인증서에서 인증서
및
키
파일을 획득했습니다. -
OpenShift CLI(
oc
)를 설치합니다.
절차
Kubernetes TLS 시크릿을 생성합니다.
$ oc create secret tls <tls_secret_name> --cert=<path_to_certificate_file> --key=<path_to_key_file>
Red Hat OpenShift Service Mesh를 OpenShift Serverless 설치의 수신으로 사용하는 경우 다음을 사용하여 Kubernetes TLS 시크릿에 레이블을 지정합니다.
“networking.internal.knative.dev/certificate-uid": “<value>”
cert-manager와 같은 타사 시크릿 공급자를 사용하는 경우, Kubernetes TLS 보안에 자동으로 레이블을 지정하도록 시크릿 관리자를 구성할 수 있습니다. cert-manager 사용자는 제공된 보안 템플릿을 사용하여 올바른 레이블이 있는 보안을 자동으로 생성할 수 있습니다. 이 경우 시크릿 필터링은 키를 기반으로만 수행되지만 이 값은 시크릿에 포함된 인증서 ID와 같은 유용한 정보를 제공할 수 있습니다.
참고{cert-manager-operator}는 기술 프리뷰 기능입니다. 자세한 내용은 {cert-manager-operator} 설명서 설치를 참조하십시오.
생성한 TLS 보안을 사용하도록
DomainMapping
CR을 업데이트합니다.apiVersion: serving.knative.dev/v1alpha1 kind: DomainMapping metadata: name: <domain_name> namespace: <namespace> spec: ref: name: <service_name> kind: Service apiVersion: serving.knative.dev/v1 # TLS block specifies the secret to be used tls: secretName: <tls_secret_name>
검증
DomainMapping
CR 상태가True
이고 출력의URL
열에 체계https
가 있는 매핑된 도메인이 표시되는지 확인합니다.$ oc get domainmapping <domain_name>
출력 예
NAME URL READY REASON example.com https://example.com True
선택 사항: 서비스가 공개적으로 노출되면 다음 명령을 실행하여 사용할 수 있는지 확인합니다.
$ curl https://<domain_name>
인증서가 자체 서명된 경우
curl
명령에-k
플래그를 추가하여 확인을 건너뜁니다.