跳到内容

配置自定义域名

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

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

    • 手动创建 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> 是您在上一步中创建的文件的名称。

    • 自动创建 ClusterDomainClaims:在 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> 是您要将 Service 映射到的域名。
      • <namespace> 是包含 DomainMappingService 对象的命名空间。
      • <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。

    2. 通过运行命令应用 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 映射到此映射所在命名空间中的 Service mysvc
      • kroute:myroute:othernamespace 映射到命名空间 othernamespace 中的 Route myroute
    • <tls-secret> 是可选的,如果提供则启用 TLS 协议。该值指定保存服务器证书的 Secret。
    • <namespace> 是您要创建 DomainMapping 的命名空间。默认情况下,DomainMapping 在当前命名空间中创建。

    注意

    除了创建 DomainMappings,您还可以使用 kn domain 命令来列出、描述、更新和删除现有的 DomainMappings。有关该命令的更多信息,请运行 kn domain --help

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

我们使用分析和 cookie 来了解网站流量。有关您使用我们网站的信息会与 Google 共享以达到此目的。了解更多。