$ oc label ksvc <service_name> networking.knative.dev/visibility=cluster-local
默认情况下,Knative 服务发布到公共 IP 地址。发布到公共 IP 地址意味着 Knative 服务是公共应用程序,并具有公共可访问的 URL。
公共可访问的 URL 可从集群外部访问。但是,开发人员可能需要构建仅可在集群内部访问的后端服务,称为私有服务。开发人员可以使用networking.knative.dev/visibility=cluster-local
标签标记集群中的单个服务,以使其成为私有服务。
对于 OpenShift Serverless 1.15.0 和更高版本, |
在集群上安装了 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
对于集群本地服务,使用 Kourier 本地网关kourier-internal
。如果要对 Kourier 本地网关使用 TLS 流量,则必须在本地网关中配置您自己的服务器证书。
您已安装 OpenShift Serverless 运算符和 Knative Serving。
您具有管理员权限。
您已安装 OpenShift (oc
) CLI。
在knative-serving-ingress
命名空间中部署服务器证书。
$ export san="knative"
需要主题替代名称 (SAN) 验证,以便这些证书可以为 |
生成根密钥和证书
$ 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 本地网关配置密钥
从先前步骤创建的证书在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 -
更新KnativeServing
自定义资源 (CR) 规范以使用 Kourier 网关创建的密钥
...
spec:
config:
kourier:
cluster-cert-secret: server-certs
...
Kourier 控制器在不重启服务的情况下设置证书,因此您无需重启 pod。
您可以通过客户端挂载并使用ca.crt
文件,通过443
端口以TLS方式访问Kourier内部服务。