1.7. 为 Service Mesh 使用 secret 过滤来提高 net-istio 内存用量
默认情况下,Kubernetes client-go
库的 informers 实施会获取特定类型的所有资源。当有很多资源可用时,这可能会导致大量资源出现大量开销,这可能会导致 Knative net-istio
入口控制器因为内存泄漏而在大型集群中失败。但是,Knative net-istio
ingress 控制器提供了一个过滤机制,它可让控制器只获取 Knative 相关的 secret。
OpenShift Serverless Operator 端默认启用 secret 过滤。默认向 net-istio
控制器 pod 添加环境变量 ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID=true
。
如果启用 secret 过滤,您必须将所有 secret 标记为 networking.internal.knative.dev/certificate-uid: "<id>
"。否则,Knative Serving 不会检测到它们,这会导致失败。您必须标记新的和现有的 secret。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以创建应用程序和其他工作负载。
- 安装 Red Hat OpenShift Service Mesh。带有 Service Mesh 的 OpenShift Serverless 仅支持与 Red Hat OpenShift Service Mesh 2.0.5 或更高版本搭配使用。
- 安装 OpenShift Serverless Operator 和 Knative Serving。
-
安装 OpenShift CLI (
oc
) 。
您可以使用 KnativeServing
自定义资源(CR)中的 workload 字段设置为 false 来禁用 secret 过滤,将 ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
变量设置为 false
。
KnativeServing CR 示例
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: ... workloads: - env: - container: controller envVars: - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID value: 'false' name: net-istio-controller
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
...
workloads:
- env:
- container: controller
envVars:
- name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
value: 'false'
name: net-istio-controller