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