×

默认情况下,Knative 服务发布到公共 IP 地址。发布到公共 IP 地址意味着 Knative 服务是公共应用程序,并具有公共可访问的 URL。

公共可访问的 URL 可从集群外部访问。但是,开发人员可能需要构建仅可在集群内部访问的后端服务,称为私有服务。开发人员可以使用networking.knative.dev/visibility=cluster-local标签标记集群中的单个服务,以使其成为私有服务。

对于 OpenShift Serverless 1.15.0 和更高版本,serving.knative.dev/visibility 标签不再可用。您必须更新现有服务以改用networking.knative.dev/visibility标签。

将集群可用性设置为集群本地

先决条件
  • 在集群上安装了 OpenShift Serverless 运算符和 Knative Serving。

  • 您已创建 Knative 服务。

步骤
  • 通过添加networking.knative.dev/visibility=cluster-local标签来设置服务的可见性

    $ oc label ksvc <service_name> networking.knative.dev/visibility=cluster-local
验证
  • 通过输入以下命令并查看输出,检查服务的 URL 现在是否为http://<service_name>.<namespace>.svc.cluster.local格式

    $ oc get ksvc
    示例输出
    NAME            URL                                                                         LATESTCREATED     LATESTREADY       READY   REASON
    hello           http://hello.default.svc.cluster.local                                      hello-tx2g7       hello-tx2g7       True

为集群本地服务启用 TLS 身份验证

对于集群本地服务,使用 Kourier 本地网关kourier-internal。如果要对 Kourier 本地网关使用 TLS 流量,则必须在本地网关中配置您自己的服务器证书。

先决条件
  • 您已安装 OpenShift Serverless 运算符和 Knative Serving。

  • 您具有管理员权限。

  • 您已安装 OpenShift (oc) CLI。

步骤
  1. knative-serving-ingress命名空间中部署服务器证书。

    $ export san="knative"

    需要主题替代名称 (SAN) 验证,以便这些证书可以为<app_name>.<namespace>.svc.cluster.local的请求提供服务。

  2. 生成根密钥和证书

    $ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \
        -subj '/O=Example/CN=Example' \
        -keyout ca.key \
        -out ca.crt
  3. 生成使用 SAN 验证的服务器密钥

    $ openssl req -out tls.csr -newkey rsa:2048 -nodes -keyout tls.key \
      -subj "/CN=Example/O=Example" \
      -addext "subjectAltName = DNS:$san"
  4. 创建服务器证书

    $ openssl x509 -req -extfile <(printf "subjectAltName=DNS:$san") \
      -days 365 -in tls.csr \
      -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt
  5. 为 Kourier 本地网关配置密钥

    1. 从先前步骤创建的证书在knative-serving-ingress命名空间中部署密钥

      $ oc create -n knative-serving-ingress secret tls server-certs \
          --key=tls.key \
          --cert=tls.crt --dry-run=client -o yaml | oc apply -f -
    2. 更新KnativeServing自定义资源 (CR) 规范以使用 Kourier 网关创建的密钥

      KnativeServing CR 示例
      ...
      spec:
        config:
          kourier:
            cluster-cert-secret: server-certs
      ...

Kourier 控制器在不重启服务的情况下设置证书,因此您无需重启 pod。

您可以通过客户端挂载并使用ca.crt文件,通过443端口以TLS方式访问Kourier内部服务。