跳至内容

配置自定义域名

功能可用性: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 能够使用该域名。

  1. 手动创建 ClusterDomainClaim 或配置自动创建 ClusterDomainClaim

    • 要手动创建 ClusterDomainClaim

      1. 使用以下模板创建 YAML 文件

        apiVersion: networking.internal.knative.dev/v1alpha1
        kind: ClusterDomainClaim
        metadata:
          name: <domain-name>
        spec:
          namespace: <namespace>
        
      2. 通过运行以下命令应用 YAML 文件

        kubectl apply -f <filename>.yaml
        
        其中 <filename> 是您在上一步中创建的文件名。

    • 要自动创建 ClusterDomainClaim:在 knative-serving 命名空间中的 config-network ConfigMap 中将 autocreate-cluster-domain-claims 属性设置为 true。这允许任何用户在任何命名空间中映射任何域名,包括其他命名空间中的域名或他们不拥有的域名。

  2. 创建 DomainMapping 对象

    1. 使用以下模板创建 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> 是包含 DomainMappingService 对象的命名空间。
      • <service-name> 是映射到域名的服务的名称。
      • <cert-secret> 是一个 Secret 的名称,其中包含用于 TLS 通信的服务器证书。如果提供了此可选的 tls: 部分,则协议将从 HTTP 切换到 HTTPS。

      提示

      您也可以映射到其他目标,只要它们符合 Addressable 合同,并且它们的解析 URL 的形式为 <name>.<namespace>.<clusterdomain>,其中 <name><namespace> 是 Kubernetes 服务的名称和命名空间,而 <clusterdomain> 是集群域名。符合此合同的对象示例包括 Knative 服务、路由和 Kubernetes 服务。

    2. 通过运行以下命令应用 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

  3. 将域名指向您的 Knative 集群的 IP 地址。此步骤的详细信息因域名注册商而异。

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,用于该目的。 了解更多