This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.4.7. 为 Knative 服务配置自定义域
4.7.1. 为 Knative 服务配置自定义域 复制链接链接已复制到粘贴板!
Knative 服务会自动根据集群配置分配默认域名。例如,<service_name>-<namespace>.example.com
。您可以通过将您自己的自定义域名映射到 Knative 服务来自定义 Knative 服务域。
您可以通过为服务创建 DomainMapping
资源来完成此操作。您还可以创建多个 DomainMapping
资源,将多个域和子域映射到单个服务。
4.7.2. 自定义域映射 复制链接链接已复制到粘贴板!
您可以通过将您自己的自定义域名映射到 Knative 服务来自定义 Knative 服务域。要将自定义域名映射到自定义资源(CR),您必须创建一个映射到可寻址目标 CR 的 DomainMapping
CR,如 Knative 服务或 Knative 路由。
4.7.2.1. 创建自定义域映射 复制链接链接已复制到粘贴板!
您可以通过将您自己的自定义域名映射到 Knative 服务来自定义 Knative 服务域。要将自定义域名映射到自定义资源(CR),您必须创建一个映射到可寻址目标 CR 的 DomainMapping
CR,如 Knative 服务或 Knative 路由。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
安装 OpenShift CLI (
oc
) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
您已创建了 Knative 服务,并控制要映射到该服务的自定义域。
注意您的自定义域必须指向 OpenShift Container Platform 集群的 IP 地址。
流程
在与您要映射的目标 CR 相同的命名空间中创建一个包含
DomainMapping
CR 的 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 将
DomainMapping
CR 应用为 YAML 文件:oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.3. 使用 Knative CLI 的 Knative 服务自定义域 复制链接链接已复制到粘贴板!
您可以通过将您自己的自定义域名映射到 Knative 服务来自定义 Knative 服务域。您可以使用 Knative (kn
) CLI 创建映射到可寻址目标 CR 的 DomainMapping
自定义资源 (CR) ,如 Knative 服务或 Knative 路由。
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 <domain_mapping_name> --ref <target_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn domain create example-domain-map --ref example-service
$ kn domain create example-domain-map --ref example-service
Copy 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-domain-map --ref ksvc:example-service:example-namespace
$ kn domain create example-domain-map --ref ksvc:example-service:example-namespace
Copy 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-domain-map --ref kroute:example-route
$ kn domain create example-domain-map --ref kroute:example-route
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.4. 使用 Developer 视角的域映射 复制链接链接已复制到粘贴板!
您可以通过将您自己的自定义域名映射到 Knative 服务来自定义 Knative 服务域。您可以使用 OpenShift Container Platform Web 控制台的 Developer 视角将 DomainMapping
自定义资源 (CR) 映射到 Knative 服务。
4.7.4.1. 使用 Developer 视角将自定义域映射到服务 复制链接链接已复制到粘贴板!
先决条件
- 已登陆到 web 控制台。
- 处于 Developer 视角。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。这必须由集群管理员完成。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
您已创建了 Knative 服务,并控制要映射到该服务的自定义域。
注意您的自定义域必须指向 OpenShift Container Platform 集群的 IP 地址。
流程
- 导航到 Topology 页面。
-
右键单击要映射到某个域的服务,然后选择包含服务名称的 Edit 选项。例如,如果该服务命名为
example-service
,请选择 Edit example-service 选项。 在 Advanced options 部分中,点 Show advanced Routing options。
- 如果要映射到该服务的域映射 CR 已存在,您可以在域映射列表中选择。
-
如果要创建新域映射 CR,在框中输入域名,然后选择 Create 选项。例如,如果您在
example.com 中
键入,则 Create 选项为 Create "example.com"。
- 单击 Save,将更改保存到您的服务。
验证
- 导航到 Topology 页面。
- 单击您创建的服务。
- 在服务信息窗口的 Resources 选项卡中,您可以看到您映射到域映射中列出的服务的域。
4.7.5. 使用 Administrator 视角的域映射 复制链接链接已复制到粘贴板!
如果您不想在 OpenShift Container Platform web 控制台中切换到 Developer 视角,或使用 Knative (kn
) CLI 或 YAML 文件,您可以使用 OpenShift Container Platform Web 控制台的 Administator 视角。
4.7.5.1. 使用 Administrator 视角将自定义域映射到服务 复制链接链接已复制到粘贴板!
Knative 服务会自动根据集群配置分配默认域名。例如,<service_name>-<namespace>.example.com
。您可以通过将您自己的自定义域名映射到 Knative 服务来自定义 Knative 服务域。
您可以通过为服务创建 DomainMapping
资源来完成此操作。您还可以创建多个 DomainMapping
资源,将多个域和子域映射到单个服务。
如果您有集群管理员权限,您可以使用 OpenShift Container Platform web 控制台中的 Administrator 视角创建 DomainMapping
自定义资源 (CR) 。
先决条件
- 已登陆到 web 控制台。
- 您处于 Administrator 视角。
- 已安装 OpenShift Serverless Operator。
- 已安装 Knative Serving。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
您已创建了 Knative 服务,并控制要映射到该服务的自定义域。
注意您的自定义域必须指向 OpenShift Container Platform 集群的 IP 地址。
流程
- 导航到 CustomResourceDefinitions,并使用搜索框查找 DomainMapping 自定义资源定义 (CRD) 。
- 点 DomainMapping CRD,然后导航到 Instances 选项卡。
- 单击 Create DomainMapping。
修改
DomainMapping
CR 的 YAML,使其为您的实例包含以下信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 到 Knative 服务的域映射示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
curl
请求访问自定义域。例如:示例命令
curl custom-ksvc-domain.example.com
$ curl custom-ksvc-domain.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello OpenShift!
Hello OpenShift!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.6. 使用 TLS 证书保护映射的服务 复制链接链接已复制到粘贴板!
4.7.6.1. 使用 TLS 证书保护带有自定义域的服务 复制链接链接已复制到粘贴板!
为 Knative 服务配置了自定义域后,您可以使用 TLS 证书来保护映射的服务。要做到这一点,您必须创建一个 Kubernetes TLS secret,然后更新 DomainMapping
CR 以使用您创建的 TLS secret。
如果您将 net-istio
用于 Ingress,并使用 security.dataPlane.mtls: true
通过 SMCP 启用 mTLS,Service Mesh 为 *.local
主机部署 DestinationRule
,这代表不允许对 OpenShift Serverless 使用 DomainMapping
。
要临时解决这个问题,部署 PeerAuthentication
来启用 mTLS,而不是使用 security.dataPlane.mtls: true
。
先决条件
-
为 Knative 服务配置了自定义域,并有一个正常工作的
DomainMapping
CR。 - 您有来自证书授权机构供应商或自签名证书的 TLS 证书。
-
您已从证书授权中心(CA)提供商或自签名证书获取
cert
和key
文件。 -
安装 OpenShift CLI (
oc
) 。
流程
创建 Kubernetes TLS secret:
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 如果您使用 Red Hat OpenShift Service Mesh 作为 OpenShift Serverless 安装的 ingress,请使用以下内容标记 Kubernetes TLS secret:
“networking.internal.knative.dev/certificate-uid": “<value>”
“networking.internal.knative.dev/certificate-uid": “<value>”
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用第三方 secret 供应商(如 cert-manager),您可以配置 secret manager 来自动标记 Kubernetes TLS secret。cert-manager 用户可以使用提供的 secret 模板自动生成带有正确标签的 secret。在本例中,secret 过滤仅基于键,但这个值可以存储有用的信息,如 secret 包含的证书 ID。
注意{cert-manager-operator} 是一个技术预览功能。如需更多信息,请参阅安装 {cert-manager-operator} 文档。
更新
DomainMapping
CR,以使用您创建的 TLS secret:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
DomainMapping
CR 状态是否为True
,输出中的URL
列显示了使用 schemehttps
的映射域: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 True
Copy 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
标志来跳过验证。