配置HTTPS证书访问

更新时间: 2023-08-04 10:15:03

ALB Ingress Controller提供证书自动发现功能。本文介绍如何配置HTTPS证书。

前提条件

已在Knative中配置ALB网关。具体操作,请参见在Knative中使用ALB网关

说明

在Knative中配置ALB网关后,可以通过DomainMapping指定HTTPS证书访问。

步骤一:创建Knative服务

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

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

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

    image.png

步骤二:创建Secret证书

在Knative中,使用Secret存储和管理敏感信息,例如密钥、密码和证书等。本步骤使用OpenSSL创建一个自签名的HTTPS证书,并将证书和私钥文件编码为Base64格式,然后以Secret的形式存储到集群中。以下以自签名证书为例,介绍如何创建Secret证书。

  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编码。

      echo -n knativetop-key.pem | base64

      预期输出:

      a25hdGl2ZXRvcC1r******
    • 执行以下命令,将knativetop-cert.pem进行Base64编码。

      echo -n knativetop-cert.pem | base64

      预期输出:

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

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

    1. 执行以下命令,创建secret-tls.yaml文件。

      vi secret-tls.yaml
    2. 在vi编辑器中添加以下YAML内容,保存后退出编辑器。

      apiVersion: v1
      kind: Secret
      metadata:
        name: secret-tls
      type: kubernetes.io/tls
      data:
        # the data is abbreviated in this example
        tls.crt: a25hdGl2ZXRvcC1jZ******== # Base64编码后的 knativetop-cert.pem。
        tls.key: a25hdGl2ZXRvcC1r******  # Base64编码后的 knativetop-key.pem。
    3. 执行以下命令,将secret-tls.yaml中定义的资源应用到Kubernetes集群中。

      kubectl apply -f secret-tls.yaml

      预期输出:

      secret/secret-tls created

步骤三:创建DomainMapping

在Knative 中,DomainMapping是一个资源对象,用于将一个域名映射到一个或多个Knative服务。通过创建DomainMapping,您可以将一个自定义的域名映射到一个Knative服务,使得应用程序可以通过这个域名进行访问。

  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
      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
  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       https://helloworld.knative.top            True

步骤四:访问HTTPS服务

执行以下命令,访问HTTPS服务。

# 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!

阿里云首页 容器服务 Kubernetes 版 ACK 相关技术圈