在Knative中使用自定义域名

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

前提条件

自定义全局域名

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

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

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

自定义单个服务的域名和Path

如果您需要为某个Knative服务定义特定的域名和Path,可通过knative.aliyun.com/serving-ingress 注解直接指定自定义的域名和路径。例如,knative.aliyun.com/serving-ingress: cafe.mydomain.com/coffee表示指定cafe.mydomain.com域名和/coffee路径。

单 Path 示例:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: coffee-mydomain
  annotations:
    knative.aliyun.com/serving-ingress: cafe.mydomain.com/coffee
spec:
  template:
    spec:
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8

多 Path 示例:

多个Path之间使用英文半角逗号(,)分隔。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: coffee-mydomain
  annotations:
    knative.aliyun.com/serving-ingress: cafe.mydomain.com/coffee,cafe.mydomain.com/tea
spec:
  template:
    spec:
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8

Rewrite 重写 Path

当前 ALB 网关支持Rewrite重写, 如需为Knative服务重写 Path,可通过配置Annotationalb.ingress.kubernetes.io/rewrite-target: 的来指定。代码示例如下。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: coffee-mydomain
  annotations:
    knative.aliyun.com/serving-ingress: cafe.mydomain.com/api/coffee
    alb.ingress.kubernetes.io/rewrite-target: /coffee
spec:
  template:
    spec:
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8

设置通配域名

如需为Knative服务定义通配域名,可通过配置Annotationknative.aliyun.com/serving-ingress 的值为/来指定。例如,knative.aliyun.com/serving-ingress: /表示通配域名。示例如下。

仅支持使用ALB网关。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: coffee-mydomain
  annotations:
    knative.aliyun.com/serving-ingress: "/"
spec:
  template:
    spec:
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8

相关文档