Knative服务的默认域名格式为{route}.{namespace}.{default-example.com},其中{default-example.com}为默认域名后缀,通常为example.com。ACS支持自定义域名,以实现更灵活的路由配置。
支持两种自定义域名方式:
通过修改ConfigMap全局配置自定义域名,针对所有Knative服务生效。
通过
knative.aliyun.com/serving-ingressAnnotation,为指定Knative服务快速配置自定义域名。
准备工作
自定义全局域名
如期望所有Knative服务共享同一个域名后缀,无需分别为每个单独定义域名,请按照如下步骤操作。
执行以下命令,编辑位于
knative-serving命名空间下的名为config-domain的ConfigMap对象。kubectl edit cm config-domain --namespace knative-serving修改配置文件。
将配置文件中的默认域名
example.com改为自定义域名后,保存配置。本示例配置自定义域名为mydomain。apiVersion: v1 kind: ConfigMap metadata: name: config-domain namespace: knative-serving data: mydomain.com: "" # 将example.com替换为mydomain.com。实际业务中需替换成您自己的服务域名。执行以下命令,查看域名是否生效。
# 将helloworld-go替换为实际业务中的 Knative 服务名 kubectl get route helloworld-go --output jsonpath="{.status.url}" | awk -F/ '{print $3}'预期输出:
helloworld-go.default.mydomain.com预期结果表明,自定义域名已生效。
将Knative网关IP设置到对应的域名解析。详见添加解析记录。
执行以下命令,通过自定义域名访问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路径。
自定义域名示例
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: coffee-mydomain
annotations:
knative.aliyun.com/serving-ingress: cafe.mydomain.com
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8通配域名示例
多个域名之间使用英文半角逗号(,)分隔。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: coffee-mydomain
annotations:
knative.aliyun.com/serving-ingress: *.mydomain.com
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8单 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:160e4dc8Rewrite 重写 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