9.5. 集群本地可用性
默认情况下,Knative 服务会发布到一个公共 IP 地址。被发布到一个公共 IP 地址意味着 Knative 服务是公共应用程序,并有一个公开访问的 URL。
可以从集群以外访问公开的 URL。但是,开发人员可能需要构建后端服务,这些服务只能从集群内部访问(称为 私有服务 )。开发人员可以使用 networking.knative.dev/visibility=cluster-local
标签标记集群中的各个服务,使其私有。
对于 OpenShift Serverless 1.15.0 及更新的版本,service.knative.dev/visibility
标签不再可用。您必须更新现有服务来改用 networking.knative.dev/visibility
标签。
9.5.1. 将集群可用性设置为集群本地
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 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
9.5.2. 为集群本地服务启用 TLS 身份验证
对于集群本地服务,使用 Kourier 本地网关 kourier-internal
。如果要针对 Kourier 本地网关使用 TLS 流量,则必须在本地网关中配置您自己的服务器证书。
先决条件
- 安装了 OpenShift Serverless Operator 和 Knative Serving。
- 有管理员权限。
-
已安装 OpenShift (
oc
) CLI。
流程
在
knative-serving-ingress
命名空间中部署服务器证书:$ export san="knative"
注意需要主题备用名称(SAN)验证,以便这些证书能够向
<app_name>.<namespace>.svc.cluster.local
提供请求。生成 root 密钥和证书:
$ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \ -subj '/O=Example/CN=Example' \ -keyout ca.key \ -out ca.crt
生成使用 SAN 验证的服务器密钥:
$ openssl req -out tls.csr -newkey rsa:2048 -nodes -keyout tls.key \ -subj "/CN=Example/O=Example" \ -addext "subjectAltName = DNS:$san"
创建服务器证书:
$ openssl x509 -req -extfile <(printf "subjectAltName=DNS:$san") \ -days 365 -in tls.csr \ -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt
为 Kourier 本地网关配置 secret:
从前面的步骤创建的证书,在
knative-serving-ingress
命名空间中部署 secret:$ oc create -n knative-serving-ingress secret tls server-certs \ --key=tls.key \ --cert=tls.crt --dry-run=client -o yaml | oc apply -f -
更新
KnativeServing
自定义资源 (CR) spec,以使用 Kourier 网关创建的 secret:KnativeServing CR 示例
... spec: config: kourier: cluster-cert-secret: server-certs ...
Kourier 控制器在不重启该服务的情况下设置证书,因此您不需要重启 pod。
您可以通过端口 443
访问 Kourier 内部服务,方法是从客户端挂载并使用 ca.crt
。