全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:为Knative服务配置HTTPS证书访问

更新时间:Jun 11, 2026

如需在Knative服务中使用自定义域名,推荐为自定义域名配置一个HTTPS证书,提高数据传输的安全性。Knative支持HTTPS服务访问,将Knative服务安全地映射到自定义域名。

前提条件

已在集群中部署Knative,请参见部署与管理Knative组件

步骤一:创建Knative服务

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

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

  3. Knative页面的服务管理页签,选择命名空间default,然后单击使用模板创建,使用控制台的示例模板创建Knative服务(helloworld-go服务),根据控制台指引完成服务的创建。

    服务创建完成后,服务管理页签中显示 helloworld-go 服务状态为成功,默认域名为 helloworld-go.default.example.com。服务访问前,需将访问服务的域名与访问网关进行 Host 绑定。

步骤二:配置HTTPS服务

HTTPS 配置方式取决于网关类型:

  • ALB 网关:证书由 AlbConfig 统一管理,通过 Annotation 开启 TLS,无需手动处理证书文件。

  • Kourier 网关:需手动创建证书 Secret,再通过 DomainMapping 将 Secret 与域名绑定。

ALB

可在ALBConfig中指定证书,并在Knative服务中通过Annotationknative.k8s.alibabacloud/tls: "true"开启TLS访问。示例如下。

在 Knative 服务中添加 TLS Annotation,并在 AlbConfig 中配置 443 监听,即可开启 HTTPS 访问。

  1. 在 Knative 服务 YAML 中添加 knative.k8s.alibabacloud/tls: "true" Annotation。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld
      namespace: default
      annotations:
        knative.k8s.alibabacloud/tls: "true"
    spec:
      template:
        spec:
          containers:
          - image: registry-vpc.cn-shenzhen.aliyuncs.com/knative-sample/helloworld-go:73fbdd56  # 替换地域为实际使用的地域。
            env:
            - name: TARGET
              value: "Knative"
  2. 在AlbConfig中添加443监听,例如knative-internet,将 HTTPS 流量引入集群。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: knative-internet
    spec:
      config:
      ...
      listeners:
        - port: 443
          # 可选项包括 HTTP、HTTPS、QUIC
          protocol: HTTPS 
      ...
  3. 验证服务可通过 HTTPS 访问。

    # 替换 alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com 为 ALB 网关地址
    curl -H "Host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -k

    预期输出:

    Hello Knative!

Kourier

Kourier 网关不内置证书管理,需先将 TLS 证书以 Secret 形式存入集群,Secret 就绪后再通过 DomainMapping 将域名与证书绑定。

1创建证书 Secret

以下以 OpenSSL 自签名的HTTPS证书为例。如已有 .pem 格式证书文件,可跳过步骤 1,直接从步骤 2 开始。

自签名证书仅用于测试,生产环境建议使用 CA 签发的证书。
  1. 通过OpenSSL创建自签名证书。

    openssl genrsa -out knativetop-key.pem 4096
    openssl req -subj "/CN=helloworld.knative.top" -sha256  -new -key knativetop-key.pem -out knativetop.csr
    echo subjectAltName = DNS:helloworld.knative.top > extfile.cnf
    openssl x509 -req -days 3650 -sha256 -in knativetop.csr -signkey knativetop-key.pem -out knativetop-cert.pem -extfile extfile.cnf

    预期输出:

    Signature ok
    subject=CN = helloworld.knative.top
    Getting Private key
  2. 步骤1中的knativetop-key.pemknativetop-cert.pem文件内容进行Base64编码。

    • knativetop-key.pem进行Base64编码。

      cat knativetop-key.pem | base64

      预期输出:

      a25hdGl2ZXRvcC1r******
    • knativetop-cert.pem进行Base64编码。

      cat knativetop-cert.pem | base64

      预期输出:

      a25hdGl2ZXRvcC1jZ******==
  3. 创建Secret。

    Secret可以用于Knative服务的TLS配置中,以实现对域名helloworld.knative.top的安全访问。

    kubectl create secret tls secret-tls --key knativetop-key.pem --cert knativetop-cert.pem

    预期输出:

    secret/secret-tls created

2、创建DomainMapping

在Knative 中,DomainMapping 是一个资源对象,用于将一个域名映射到一个或多个Knative服务。

Secret 就绪后,通过 DomainMapping 将自定义域名与 Knative 服务绑定,并引用此前创建的 Secret 启用 TLS 加密。

  1. 创建 helloworld.knative.top.yaml 文件,写入以下 DomainMapping 配置。

    apiVersion: serving.knative.dev/v1beta1
    kind: DomainMapping
    metadata:
      name: helloworld.knative.top
      namespace: default
    spec:
      ref:
        name: helloworld-go
        kind: Service
        apiVersion: serving.knative.dev/v1
    # tls block specifies the secret to be used
      tls:
        secretName: secret-tls
  2. 将 DomainMapping 应用到集群。

    kubectl apply -f helloworld.knative.top.yaml

    预期输出:

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

    kubectl get domainmapping helloworld.knative.top

    预期输出:

    NAME                          URL                                      READY   REASON
    helloworld.knative.top       https://helloworld.knative.top            True
  4. 验证服务可通过自定义域名访问。

    # 8.141.XX.XX为 Kourier 网关地址
    curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX -k

    预期输出:

    Hello Knative!

相关文档