全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:在Knative中使用自定义域名

更新时间:Aug 08, 2023

Knative服务的默认域名格式为{route}.{namespace}.{default-example.com},其中{default-example.com}是默认的域名后缀,通常是example.com。默认域名格式可以根据需要进行配置和更改。本文介绍如何在Knative服务中使用全局自定义的域名后缀,以及如何为单独的服务自定义域名。

前提条件

步骤一:创建Knative服务

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Knative

  3. Knative页面的服务管理页签下,选择命名空间default,然后单击使用模板创建,选择使用容器控制台的示例模板创建Knative服务,最后单击创建

    本文以创建一个名为helloworld-go的服务为例。

    image.png

步骤二:自定义域名

  • 修改全局域名:适用于不需要为每个Service单独定义域名的情况。域名修改后,在没有特定配置的情况下,所有的Service都可以使用修改后的全局域名。

  • 使用DomainMapping自定义单个Service的域名:适用于需要为每个Service定义特定域名的情况,以及希望使用Ingress控制器进行灵活路由配置的情况。

方式一:修改全局域名

  1. 执行以下命令,编辑位于knative-serving命名空间下的名为config-domain的ConfigMap对象。

    kubectl edit cm config-domain --namespace knative-serving
  2. 修改配置文件。

    将配置文件中的默认域名example.com改为自定义域名后,保存配置。本例中的自定义域名为mydomain

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: config-domain
      namespace: knative-serving
    data:
      mydomain.com: "" # 将example.com替换为mydomain.com。实际业务中需替换成您自己的服务域名。
  3. 执行以下命令,查看域名是否生效。

    # 需将命令中的helloworld-go替换成实际业务中的Knative服务名。
    kubectl get route helloworld-go --output jsonpath="{.status.url}" | awk -F/ '{print $3}'

    预期输出:

    helloworld-go.default.mydomain.com

    预期结果表明,自定义域名已生效。

  4. 将Knative网关IP设置到对应的域名解析。

  5. 执行以下命令,通过自定义域名访问Knative服务。

    curl http://helloworld-go.default.mydomain.com

    预期输出:

    Hello Knative!

    预期结果表明,自定义域名已配置成功,并且Knative服务已经正确地响应了请求。

方式二:使用DomainMapping自定义单个Service的域名

  1. 执行以下命令,创建helloworld.knative.top.yaml文件。

    vi helloworld.knative.top.yaml
  2. 在vi编辑器中添加以下YAML内容,保存后退出编辑器。

    apiVersion: serving.knative.dev/v1alpha1
    kind: DomainMapping
    metadata:
      name: helloworld.knative.top.mydomain.com # 设置服务域名。实际业务中需替换成您自己的服务域名。
      namespace: default # 设置命名空间,与服务所在的命名空间一致。
    spec:
      ref:
        name: helloworld-go # 目标服务名称
        kind: Service
        apiVersion: serving.knative.dev/v1
  3. 执行以下命令,将helloworld.knative.top.yaml中定义的资源应用到Kubernetes集群中。

    kubectl apply -f helloworld.knative.top.yaml

    预期输出:

    domainmapping.serving.knative.dev/helloworld.knative.top created
  4. 执行以下命令,验证DomainMapping。

    kubectl get domainmapping helloworld.knative.top

    预期输出:

    NAME                          URL                                      READY   REASON
    helloworld.knative.top       http://helloworld.knative.top            True

    预期结果表明,自定义域名已生效。

  5. 将Knative网关IP设置到对应的域名解析。

  6. 执行以下命令,通过自定义域名访问Knative服务。

    curl http://helloworld.knative.top.mydomain.com

    预期输出:

    Hello Knative!

    预期结果表明,自定义域名已配置成功,并且Knative服务已经正确地响应了请求。