拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Loki Operator 特性开关(Feature Gates)完整指南:从 ProjectConfig 到 OpenShift 平台集成的配置详解

Loki Operator 特性开关Feature Gates完整指南从 ProjectConfig 到 OpenShift 平台集成的配置详解【免费下载链接】lokiLike Prometheus, but for logs.项目地址: https://gitcode.com/GitHub_Trending/lok/loki本指南围绕 Loki Operator位于 operator 目录的FeatureGatesAPI 类型展开系统讲解其在config.loki.grafana.com/v1组下的全部字段定义、在controller_manager_config.yaml中的真实配置写法以及各开关在源码中的落地方式。读完本文你将掌握如何在社区版与 OpenShift 发行版中逐项开启/关闭 Loki Operator 的监控、加密、Webhook、网关与平台集成能力并理解内置证书管理BuiltInCertManagement的轮换语义与 TLS 安全档位TLSProfile的选型。一、Feature Gates 是什么Loki Operator 通过一组特性开关Feature Gates来控制其行为能力——例如是否创建 ServiceMonitor、是否为 HTTP/gRPC 服务启用 TLS、是否安装准入校验 Webhook、是否启用多租户网关等。这些开关不属于 LokiStack 自定义资源CR而是由 Operator 自身的ProjectConfig配置承载。从源码结构看operator/api/config/v1/projectconfig_types.goFeatureGates是一个 Go 结构体字段以 JSON 标签暴露其中包含布尔开关、嵌套结构体BuiltInCertManagement、OpenShiftFeatureGates以及字符串类型TLSProfile。该结构体挂在ProjectConfig之下// ProjectConfig is the Schema for the projectconfigs API type ProjectConfig struct { metav1.TypeMeta json:,inline ControllerManagerConfigurationSpec json:,inline Gates FeatureGates json:featureGates,omitempty }ProjectConfig的配置载体是 Operator 启动时挂载的controller_manager_config.yaml在 operator/config/overlays 下有community、community-openshift、development、openshift四套 overlay均包含featureGates配置块。官方文档说明本文所依据的 operator/docs/operator/feature-gates.md 是由gen-crd-api-reference-docs自动生成的 API 参考页见 operator/config/docs/config.json 中的docsURLTemplate指向该页因此字段注释与源码注释一一对应可以放心作为配置依据。二、如何配置 Feature Gatescontroller_manager_config.yamlFeature Gates 通过 Operator 的ProjectConfig配置启用。社区版communityoverlay的 controller_manager_config.yaml 展示了一个最小可用示例apiVersion: config.loki.grafana.com/v1 kind: ProjectConfig health: healthProbeBindAddress: :8081 metrics: bindAddress: :8080 secure: false webhook: port: 9443 leaderElection: leaderElect: true resourceName: loki-operator.grafana.com featureGates: # # Component feature gates # lokiStackGateway: true restrictedPodSecurityStandard: false # # Webhook feature gates # lokiStackWebhook: true alertingRuleWebhook: true recordingRuleWebhook: true注意未显式声明的开关默认即为false关闭。配置项采用camelCase形式与 JSON 标签一一对应。例如builtInCertManagement是一个嵌套对象而非布尔值。三、组件与监控类 Feature Gates3.1 lokiStackGateway类型bool作用启用对反向代理组件lokistack-gateway的调和reconcile实现多租户下对 Loki 的认证/授权流量控制。关闭时 Operator 不会创建该网关组件。网关的租户配置、ServiceMonitor 生成逻辑可在 operator/internal/manifests/gateway_tenants.go 中看到其执行前提正是opts.Gates.OpenShift.Enabled与网关相关开关。3.2 serviceMonitors类型bool作用为每个 LokiStack 组件创建一个由 Prometheus-Operator 托管的ServiceMonitor资源用于抓取组件指标。3.3 serviceMonitorTlsEndpoints类型bool作用为上述ServiceMonitor的 endpoints 启用TLS。该开关通常与serviceMonitors一起使用在 operator/internal/manifests/gateway_tenants.go 中通过openshift.ConfigureGatewayServiceMonitor(sm, opts.Gates.ServiceMonitorTLSEndpoints)落地。3.4 lokiStackAlerts类型bool作用创建由 Prometheus-Operator 托管的PrometheusRules内置常见的 Loki 告警规则。3.5 grafanaLabsUsageReport类型bool作用启用 Grafana Labs 的 Loki 用量上报usage reporting能力。文档注释指向 Loki v2.5 版本的 usage-reporting 说明社区 overlay 中默认关闭falseOpenShift overlay 中同样关闭。3.6 restrictedPodSecurityStandard类型bool作用使 Operator 生成的 Pod 符合 Kubernetes受限 Pod 安全标准Restricted Pod Security Standard。开启后会在工作负载上应用更严格的securityContext约束。社区 overlay 中为falseOpenShift overlay 中为true。3.7 defaultNodeAffinity类型bool作用开启后 Operator 会为所有 Pod设置默认的节点亲和性node affinity将 Pod 调度限制在Linux 节点上。该开关影响所有工作负载的调度行为适合对节点 OS 有明确要求的集群。四、加密类 Feature GatesHTTP/gRPC TLS 与内置证书管理加密类开关是 LokiStack 数据面安全的核心涉及三组能力HTTP 加密、gRPC 加密、内置证书管理。4.1 httpEncryption 与 grpcEncryption类型均为bool作用httpEncryption为所有 LokiStackHTTP 服务启用 TLS 加密grpcEncryption为所有 LokiStackgRPC 服务启用 TLS 加密。启用前提务必注意开启后每个服务需要一个与服务同名的 Secret包含以下数据数据键含义tls.crtTLS 服务端证书tls.key服务端加密私钥同时每个服务还需要一个以 LokiStack CR 名称 -ca-bundle后缀命名的 ConfigMap例如lokistack-dev-ca-bundle包含数据键含义service-ca.crt为tls.crt中服务证书签名的 CA 证书换句话说仅开启开关还不够你必须事先为每个服务准备好证书 Secret 与 CA Bundle ConfigMapOperator 才能正确配置 TLS。4.2 builtInCertManagement内置证书管理类型BuiltInCertManagement嵌套结构体非布尔值作用启用 Operator内置的证书生成与轮换设施为所有 LokiStack 服务及内部客户端生成并轮换 TLS 客户端/服务端证书lokistack-gateway 除外。开启后Loki 内部所有 HTTP 与 gRPC 通信都将提升为mTLS。对于 lokistack-gateway 的证书需要你自己提供 Secret或在 OpenShift 上使用ServingCertsService能力见下文 OpenShift 部分。嵌套结构体字段详解源码定义字段JSON 键类型说明enabledenabledbool启用/禁用内置证书管理功能caValiditycaValiditystring时长CA 证书的总有效时长caRefreshcaRefreshstring时长CA 证书到期前的轮换触发点。可设置为 CA 有效期的80%或等于有效期后者仅在证书过期时才轮换certValiditycertValiditystring时长所有 LokiStack 证书的总有效时长certRefreshcertRefreshstring时长证书到期前的轮换触发点。可设置为有效期的80%或等于有效期轮换会对所有 LokiStack 证书一次性生效OpenShift overlayoperator/config/overlays/openshift/controller_manager_config.yaml给出了官方推荐取值可直接参考builtInCertManagement: enabled: true # CA certificate validity: 5 years caValidity: 43830h # CA certificate refresh at 80% of validity caRefresh: 35064h # Target certificate validity: 90d certValidity: 2160h # Target certificate refresh at 80% of validity certRefresh: 1728h换算关系43830h≈ 5 年CA 有效期35064h 43830 × 80%CA 在 4 年时轮换2160h 90 天目标证书有效期1728h 2160 × 80%证书在 72 天时轮换。这种80% 轮换策略保证证书在过期前完成滚动更新避免因证书过期导致集群内部通信中断。证书轮换、过期检查的调和逻辑分别位于 operator/internal/handlers/lokistack_rotate_certs.go 与 operator/internal/handlers/lokistack_check_cert_expiry.go。4.3 tlsProfileTLS 安全档位类型string作用选择 TLS 安全档位profile在使用httpEncryption或grpcEncryption时强制执行。可选值定义于 operator/api/config/v1/projectconfig_types.go 的TLSProfileType常量基于 Mozilla 的 TLS 定义值常量名语义OldTLSProfileOldType向后兼容性优先Mozilla Old backward compatibilityIntermediateTLSProfileIntermediateType兼容性与安全性的均衡默认档Mozilla Intermediate compatibility (default)ModernTLSProfileModernType仅支持现代客户端Mozilla Modern compatibility该配置最终会转换成具体的密码套件与最低 TLS 版本在 operator/internal/manifests/options.go 中TLSProfileSpec携带Ciphers握手协商的密码套件列表与MinTLSVersion最低 TLS 协议版本TLSCipherSuites()方法将密码套件切片以逗号拼接成 Loki 配置所需的字符串。五、Webhook 类 Feature GatesOperator 内置了 4 个与准入校验/转换 Webhook 相关的开关社区 overlay 默认开启前三个字段类型作用lokiStackWebhookbool启用 LokiStack CR 的校验与转换WebhookalertingRuleWebhookbool启用 AlertingRule CR 的校验WebhookrecordingRuleWebhookbool启用 RecordingRule CR 的校验WebhookrulerConfigWebhookbool启用 RulerConfig CR 的校验Webhook这组开关在社区 overlay 中rulerConfigWebhook未显式声明默认关闭在 OpenShift overlay 中全部为true。Webhook 端口由ProjectConfig顶层的webhook.port默认9443决定。六、OpenShift 专属 Feature Gatesopenshift字段是一个嵌套结构体OpenShiftFeatureGates源码定义仅支持在 OpenShift 平台上使用其内部还有一个总开关字段JSON 键类型说明enabledenabledbool总开关声明这些特性开关针对 OpenShift Container Platform 发行版生效servingCertsServiceservingCertsServicebool仅在 lokistack-gateway 的 Service 上启用 OpenShift service-ca 注解使用平台内置 CA 为每个服务生成 TLS 证书/密钥对实现集群内传输加密ruleExtendedValidationruleExtendedValidationbool对 AlertingRule 与 RecordingRule 启用扩展校验在 OpenShift 上下文中强制租户隔离tenancyclusterTLSPolicyclusterTLSPolicybool使用API Server 中设置的 TLS 策略clusterProxyclusterProxybool使用proxy 资源中设置的代理变量集群级代理dashboardsdashboardsbool将loki-mixin 仪表盘注入 OpenShift ConsoleTokenCCOAuthEnv无 JSON 标签bool当 OpenShift 功能启用且 Operator 检测到以某种工作负载身份AWS STS、Azure WIF运行时自动置为true其中TokenCCOAuthEnv是只读/自动探测字段源码中没有json标签且不对外暴露配置由 Operator 根据运行环境自动判断用户无需也无法手动配置。七、端到端配置示例OpenShift 全量开关operator/config/overlays/openshift/controller_manager_config.yaml 展示了完整启用的参考配置覆盖监控、加密、组件、Webhook 与 OpenShift 五组能力可直接对照自己的集群逐项取舍apiVersion: config.loki.grafana.com/v1 kind: ProjectConfig health: healthProbeBindAddress: :8081 metrics: bindAddress: :8443 secure: true webhook: port: 9443 leaderElection: leaderElect: true resourceName: loki-operator.grafana.com featureGates: # # Monitoring feature gates # serviceMonitors: true serviceMonitorTlsEndpoints: true lokiStackAlerts: true # # Encryption feature gates # httpEncryption: true grpcEncryption: true builtInCertManagement: enabled: true # CA certificate validity: 5 years caValidity: 43830h # CA certificate refresh at 80% of validity caRefresh: 35064h # Target certificate validity: 90d certValidity: 2160h # Target certificate refresh at 80% of validity certRefresh: 1728h # # Component feature gates # lokiStackGateway: true grafanaLabsUsageReport: false restrictedPodSecurityStandard: true defaultNodeAffinity: true # # Webhook feature gates # lokiStackWebhook: true alertingRuleWebhook: true recordingRuleWebhook: true rulerConfigWebhook: true # # OpenShift feature gates # openshift: enabled: true servingCertsService: true ruleExtendedValidation: true clusterTLSPolicy: true clusterProxy: true dashboards: true需要注意本示例中metrics.secure: true且监听:8443与社区版的非安全指标端口不同同时未声明tlsProfile此时按 Operator 默认行为处理。若需限定 TLS 档位可在featureGates下追加tlsProfile: Intermediate或Modern/Old。八、Feature Gates 的源码落地路径理解开关如何从配置流到最终资源有助于排查开关已开但未生效的问题。从源码结构看整条链路大致如下定义operator/api/config/v1/projectconfig_types.go 定义FeatureGates及其全部字段ProjectConfig.Gates承载实例深度拷贝实现位于 operator/api/config/v1/zz_generated.deepcopy.go。加载Operator 启动时读取controller_manager_config.yaml各 overlay 见 operator/config/overlays反序列化为ProjectConfig。传递开关随Options.Gates传入 manifests 生成层见 operator/internal/manifests/options.go 中Gates configv1.FeatureGates字段。消费各 manifest 构建函数按需读取开关——例如网关租户与 ServiceMonitor 配置operator/internal/manifests/gateway_tenants.go、网关处理器operator/internal/handlers/internal/gateway/gateway.go、存储处理器operator/internal/handlers/internal/storage/storage.go。特殊逻辑证书轮换与过期检查分别由 operator/internal/handlers/lokistack_rotate_certs.go 与 operator/internal/handlers/lokistack_check_cert_expiry.go 驱动并在 operator/internal/handlers/lokistack_rotate_certs_test.go、operator/internal/handlers/lokistack_check_cert_expiry_test.go 中有对应测试覆盖。九、配置速查与建议分组开关默认未声明时典型启用场景组件lokiStackGatewayfalse多租户认证/授权网关监控serviceMonitorsfalse接入 Prometheus-Operator 指标采集监控serviceMonitorTlsEndpointsfalse指标端点加密监控lokiStackAlertsfalse内置 Loki 告警规则加密httpEncryption/grpcEncryptionfalse服务间传输加密需自行提供证书/CA Bundle加密builtInCertManagementfalse自动生成与轮换 mTLS 证书gateway 除外加密tlsProfile空指定 TLS 档位Old/Intermediate/Modern组件grafanaLabsUsageReportfalse用量上报组件restrictedPodSecurityStandardfalse满足受限 Pod 安全标准组件defaultNodeAffinityfalse限制调度到 Linux 节点WebhooklokiStackWebhook等 4 项false启用 CR 准入校验OpenShiftopenshift.*false仅在 OpenShift 平台启用实践要点逐项验证依赖serviceMonitorTlsEndpoints依赖serviceMonitorstlsProfile只有在开启httpEncryption/grpcEncryption时才被强制执行builtInCertManagement与手工提供证书的httpEncryption/grpcEncryption属于两条不同路线注意区分。Secret 与 ConfigMap 先行手工加密模式下每个服务必须先就绪tls.crt/tls.keySecret 与CR 名-ca-bundleConfigMap否则服务无法正常启动。以 overlay 为基准社区版请参考 community 配置OpenShift 版请参考 openshift 配置其中已包含经过验证的证书轮换时长取值。【免费下载链接】lokiLike Prometheus, but for logs.项目地址: https://gitcode.com/GitHub_Trending/lok/loki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门