在Knative中使用自定义域名

Knative服务的默认域名格式为{route}.{namespace}.{default-example.com},其中{default-example.com}是默认的域名后缀,通常是example.com。如果您需要使用自定义域名,您可以参见本文实现,以实现更灵活的路由配置。ACK Serverless Knative支持通过ConfigMap修改全局的自定义域名,针对所有Knative服务生效,也支持使用DomainMapping为某个Knative服务自定义域名。

前提条件

自定义全局域名

如果您希望所有部署在ACK Serverless Knative中的Knative服务都共享同一个域名后缀,无需分别为每个单独定义域名,请按照如下步骤操作。

  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服务已经正确地响应了请求。

自定义单个服务的域名

如果您需要为某个Knative服务定义特定的域名,可以按照如下方式配置。

控制台

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

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

  3. Knative页面,单击服务管理页签,找到并单击目标服务的名称。

  4. 在目标服务详情页面,单击右上角的访问设置,根据页面提示为目标服务配置自定义域名。

kubectl

如果您需要为某个Service定义特定的域名,同时希望使用Ingress控制器进行灵活的路由配置,可以使用DomainMapping实现。

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

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

    apiVersion: serving.knative.dev/v1beta1
    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服务已经正确地响应了请求。

相关文档