配置自定义域名¶
功能可用性:beta 自 Knative v0.24 起
- beta 功能经过充分测试,启用它们被认为是安全的。对整体功能的支持不会被取消,但细节可能会以不兼容的方式发生变化。
每个 Knative 服务在创建时都会自动分配一个默认域名。但是,您可以使用 _域名映射_ 将您拥有的任何自定义域名映射到 Knative 服务。
您可以创建一个 DomainMapping
对象,将单个非通配符域名映射到特定的 Knative 服务。
例如,如果您拥有 example.org
域名,并将域名 DNS 配置为引用您的 Knative 集群,您就可以使用 DomainMapping 在此域名下提供 Knative 服务。
注意
如果您创建了域名映射以映射到 私有 Knative 服务,则私有 Knative 服务可以通过域名映射的自定义域名从公共互联网访问。
提示
本主题介绍如何自定义每个服务的域名,而无论默认域名是什么。如果您想自定义域名模板以分配默认域名,请参阅 更改默认域名。
先决条件¶
- 您必须能够访问一个 Kubernetes 集群,并在该集群上安装了 Knative Serving 和 Ingress 实现。有关更多信息,请参阅 Serving 安装文档。
- 您必须在集群上启用域名映射功能。
- 您必须能够访问 Knative 服务,以便您可以将域名映射到它。
- 您必须拥有或能够访问要映射的域名,并且能够使用域名注册商提供的工具将域名 DNS 指向您的 Knative 集群。
过程¶
要创建 DomainMapping,您必须首先拥有 ClusterDomainClaim。此 ClusterDomainClaim 将域名委托给您要创建 DomainMapping 的命名空间,这将使该命名空间中的 DomainMapping 能够使用该域名。
-
手动创建 ClusterDomainClaim 或配置自动创建 ClusterDomainClaim
-
要手动创建 ClusterDomainClaim
-
使用以下模板创建 YAML 文件
apiVersion: networking.internal.knative.dev/v1alpha1 kind: ClusterDomainClaim metadata: name: <domain-name> spec: namespace: <namespace>
-
通过运行以下命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一步中创建的文件名。
-
-
要自动创建 ClusterDomainClaim:在
knative-serving
命名空间中的config-network
ConfigMap 中将autocreate-cluster-domain-claims
属性设置为true
。这允许任何用户在任何命名空间中映射任何域名,包括其他命名空间中的域名或他们不拥有的域名。
-
-
创建 DomainMapping 对象
-
使用以下模板创建 YAML 文件
其中apiVersion: serving.knative.dev/v1beta1 kind: DomainMapping metadata: name: <domain-name> namespace: <namespace> spec: ref: name: <service-name> kind: Service apiVersion: serving.knative.dev/v1 tls: secretName: <cert-secret>
<domain-name>
是您想要将服务映射到的域名。<namespace>
是包含DomainMapping
和Service
对象的命名空间。<service-name>
是映射到域名的服务的名称。<cert-secret>
是一个 Secret 的名称,其中包含用于 TLS 通信的服务器证书。如果提供了此可选的tls:
部分,则协议将从 HTTP 切换到 HTTPS。
提示
您也可以映射到其他目标,只要它们符合 Addressable 合同,并且它们的解析 URL 的形式为
<name>.<namespace>.<clusterdomain>
,其中<name>
和<namespace>
是 Kubernetes 服务的名称和命名空间,而<clusterdomain>
是集群域名。符合此合同的对象示例包括 Knative 服务、路由和 Kubernetes 服务。 -
通过运行以下命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一步中创建的文件名。
运行以下命令
kn domain create <domain-name> --ref <target> --tls <tls-secret> --namespace <namespace>
其中
<domain-name>
是您想要将服务或路由映射到的域名。<target>
是映射到域名的服务或路由的名称。您可以使用前缀ksvc:
或kroute:
指定将域名映射到 Knative 服务还是路由。如果没有给出前缀,则假定为ksvc:
。此外,您可以使用:namespace
后缀指向不同命名空间中的服务或路由。示例mysvc
映射到与此映射位于同一命名空间的服务mysvc
。kroute:myroute:othernamespace
映射到othernamespace
命名空间中的路由myroute
。
<tls-secret>
是可选的,如果提供则启用 TLS 协议。该值指定包含服务器证书的密钥。<namespace>
是您要创建 DomainMapping 的命名空间。默认情况下,DomainMapping 会在当前命名空间中创建。
注意
除了创建 DomainMapping 之外,您还可以使用
kn domain
命令来列出、描述、更新和删除现有的 DomainMapping。有关该命令的更多信息,请运行kn domain --help
。 -
-
将域名指向您的 Knative 集群的 IP 地址。此步骤的详细信息因域名注册商而异。