2.2. Loki 对象存储


Loki Operator 支持 AWS S3,以及 MinioOpenShift Data Foundation 等其他 S3 兼容对象存储。AzureGCSSwift 也支持。

对于 Loki 存储,推荐的 nomenclature 是 logging-loki-<your_storage_provider>

下表显示了每个存储供应商 LokiStack 自定义资源(CR) 中的 type 值。如需更多信息,请参阅存储供应商部分。

Expand
表 2.2. Secret 类型快速参考
存储供应商Secret type

AWS

s3

Azure

azure

Google Cloud

gcs

Minio

s3

OpenShift Data Foundation

s3

Swift

swift

2.2.1. AWS 存储

先决条件

流程

  • 运行以下命令,创建一个名为 logging-loki-aws 的对象存储 secret:

    $ oc create secret generic logging-loki-aws \
      --from-literal=bucketnames="<bucket_name>" \
      --from-literal=endpoint="<aws_bucket_endpoint>" \
      --from-literal=access_key_id="<aws_access_key_id>" \
      --from-literal=access_key_secret="<aws_access_key_secret>" \
      --from-literal=region="<aws_region_of_your_bucket>"
    Copy to Clipboard Toggle word wrap

2.2.1.1. 启用 STS 的集群的 AWS 存储

如果您的集群启用了 STS,Cloud Credential Operator (CCO) 支持使用 AWS 令牌进行短期身份验证。

您可以运行以下命令来手动创建 Loki 对象存储 secret:

$ oc -n openshift-logging create secret generic "logging-loki-aws" \
  --from-literal=bucketnames="<s3_bucket_name>" \
  --from-literal=region="<bucket_region>" \
  --from-literal=audience="<oidc_audience>" 
1
Copy to Clipboard Toggle word wrap
1
可选注解,默认值为 openshift

2.2.2. Azure 存储

先决条件

  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。
  • 您在 Azure 上创建了存储桶

流程

  • 运行以下命令,使用名称 logging-loki-azure 创建对象存储 secret:

    $ oc create secret generic logging-loki-azure \
      --from-literal=container="<azure_container_name>" \
      --from-literal=environment="<azure_environment>" \ 
    1
    
      --from-literal=account_name="<azure_account_name>" \
      --from-literal=account_key="<azure_account_key>"
    Copy to Clipboard Toggle word wrap
    1
    支持的环境值包括 AzureGlobalAzureChinaCloudAzureGermanCloudAzureUSGovernment

如果您的集群启用了 Microsoft Entra Workload ID,Cloud Credential Operator (CCO) 支持使用 Workload ID 进行短期身份验证。

您可以运行以下命令来手动创建 Loki 对象存储 secret:

$ oc -n openshift-logging create secret generic logging-loki-azure \
--from-literal=environment="<azure_environment>" \
--from-literal=account_name="<storage_account_name>" \
--from-literal=container="<container_name>"
Copy to Clipboard Toggle word wrap

2.2.3. Google Cloud Platform 存储

先决条件

  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。
  • 您在 Google Cloud Platform (GCP)上创建了一个 项目
  • 您在同一项目中创建了存储桶
  • 您在用于 GCP 身份验证的同一项目中创建了服务帐户

流程

  1. 将从 GCP 接收的服务帐户凭证复制到名为 key.json 的文件中。
  2. 运行以下命令,使用名称 logging-loki-gcs 创建对象存储 secret:

    $ oc create secret generic logging-loki-gcs \
      --from-literal=bucketname="<bucket_name>" \
      --from-file=key.json="<path/to/key.json>"
    Copy to Clipboard Toggle word wrap

2.2.4. Minio 存储

先决条件

  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。
  • 在集群中部署了 Minio
  • 您在 Minio 上创建了存储桶

流程

  • 运行以下命令,创建一个名为 logging-loki-minio 的对象存储 secret:

    $ oc create secret generic logging-loki-minio \
      --from-literal=bucketnames="<bucket_name>" \
      --from-literal=endpoint="<minio_bucket_endpoint>" \
      --from-literal=access_key_id="<minio_access_key_id>" \
      --from-literal=access_key_secret="<minio_access_key_secret>"
    Copy to Clipboard Toggle word wrap

2.2.5. OpenShift Data Foundation 存储

先决条件

流程

  1. openshift-logging 命名空间中创建 ObjectBucketClaim 自定义资源:

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: loki-bucket-odf
      namespace: openshift-logging
    spec:
      generateBucketName: loki-bucket-odf
      storageClassName: openshift-storage.noobaa.io
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,从关联的 ConfigMap 对象获取存储桶属性:

    BUCKET_HOST=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_HOST}')
    BUCKET_NAME=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_NAME}')
    BUCKET_PORT=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_PORT}')
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,从关联的 secret 获取存储桶访问密钥:

    ACCESS_KEY_ID=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 -d)
    SECRET_ACCESS_KEY=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 -d)
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,创建一个名为 logging-loki-odf 的对象存储 secret:

    $ oc create -n openshift-logging secret generic logging-loki-odf \
    --from-literal=access_key_id="<access_key_id>" \
    --from-literal=access_key_secret="<secret_access_key>" \
    --from-literal=bucketnames="<bucket_name>" \
    --from-literal=endpoint="https://<bucket_host>:<bucket_port>"
    Copy to Clipboard Toggle word wrap

2.2.6. Swift 存储

先决条件

  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。
  • 您在 Swift 上创建了一个存储桶

流程

  • 运行以下命令,创建一个名为 logging-loki-swift 的对象存储 secret:

    $ oc create secret generic logging-loki-swift \
      --from-literal=auth_url="<swift_auth_url>" \
      --from-literal=username="<swift_usernameclaim>" \
      --from-literal=user_domain_name="<swift_user_domain_name>" \
      --from-literal=user_domain_id="<swift_user_domain_id>" \
      --from-literal=user_id="<swift_user_id>" \
      --from-literal=password="<swift_password>" \
      --from-literal=domain_id="<swift_domain_id>" \
      --from-literal=domain_name="<swift_domain_name>" \
      --from-literal=container_name="<swift_container_name>"
    Copy to Clipboard Toggle word wrap
  • 您可以通过运行以下命令来提供项目特定数据、区域或两者:

    $ oc create secret generic logging-loki-swift \
      --from-literal=auth_url="<swift_auth_url>" \
      --from-literal=username="<swift_usernameclaim>" \
      --from-literal=user_domain_name="<swift_user_domain_name>" \
      --from-literal=user_domain_id="<swift_user_domain_id>" \
      --from-literal=user_id="<swift_user_id>" \
      --from-literal=password="<swift_password>" \
      --from-literal=domain_id="<swift_domain_id>" \
      --from-literal=domain_name="<swift_domain_name>" \
      --from-literal=container_name="<swift_container_name>" \
      --from-literal=project_id="<swift_project_id>" \
      --from-literal=project_name="<swift_project_name>" \
      --from-literal=project_domain_id="<swift_project_domain_id>" \
      --from-literal=project_domain_name="<swift_project_domain_name>" \
      --from-literal=region="<swift_region>"
    Copy to Clipboard Toggle word wrap

对于某些存储供应商,您可以在安装过程中使用 Cloud Credential Operator 实用程序(ccoctl)来实现短期凭证。这些凭证在 OpenShift Container Platform 集群外创建和管理。如需更多信息,请参阅组件 的带有简短凭证的手动模式

注意

在使用此凭证策略的集群上,必须在 Loki Operator 的新安装过程中配置短期凭证身份验证。您无法重新配置使用不同凭证策略的现有集群,以使用此功能。

您可以使用带有简短令牌的工作负载身份联合来对基于云的日志存储进行身份验证。使用工作负载身份联邦时,您不必在集群中存储长期凭证,这降低了凭证泄漏的风险,并简化 secret 管理。

先决条件

  • 有管理员权限。

流程

  • 使用以下选项之一启用身份验证:

    • 如果您使用 OpenShift Container Platform Web 控制台安装 Loki Operator,系统会自动检测到使用简短令牌的集群。系统将提示您创建角色,并提供 Loki Operator 所需的数据,以创建 CredentialsRequest 对象,该对象填充 secret。
    • 如果使用 OpenShift CLI (oc)安装 Loki Operator,则必须手动创建 Subscription 对象。如以下示例所示,为您的存储供应商使用适当的模板。此身份验证策略仅支持示例中所示的存储供应商。

      Microsoft Azure 示例订阅

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: loki-operator
        namespace: openshift-operators-redhat
      spec:
        channel: "stable-6.2"
        installPlanApproval: Manual
        name: loki-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        config:
          env:
            - name: CLIENTID
              value: <your_client_id>
            - name: TENANTID
              value: <your_tenant_id>
            - name: SUBSCRIPTIONID
              value: <your_subscription_id>
            - name: REGION
              value: <your_region>
      Copy to Clipboard Toggle word wrap

      Amazon Web Services (AWS)示例订阅

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: loki-operator
        namespace: openshift-operators-redhat
      spec:
        channel: "stable-6.2"
        installPlanApproval: Manual
        name: loki-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        config:
          env:
          - name: ROLEARN
            value: <role_ARN>
      Copy to Clipboard Toggle word wrap

      Google Cloud Platform (GCP)示例订阅

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: loki-operator
        namespace: openshift-operators-redhat
      spec:
        channel: "stable-6.2"
        installPlanApproval: Manual
        name: loki-operator
        source:  redhat-operators
        sourceNamespace: openshift-marketplace
        config:
          env:
          - name: PROJECT_NUMBER
            value: <your_project_number>
          - name: POOL_ID
            value: <your_pool_id>
          - name: PROVIDER_ID
            value: <your_provider_id>
          - name: SERVICE_ACCOUNT_EMAIL
            value: example@mydomain.iam.gserviceaccount.com
      Copy to Clipboard Toggle word wrap

您可以使用 OpenShift Container Platform Web 控制台创建 LokiStack 自定义资源(CR)。

先决条件

  • 有管理员权限。
  • 访问 OpenShift Container Platform web 控制台。
  • 已安装 Loki Operator。

流程

  1. 进入 Operators Installed Operators 页面。点 All instances 选项卡。
  2. Create new 下拉列表中,选择 LokiStack
  3. 选择 YAML 视图,然后使用以下模板来创建 LokiStack CR:

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki 
    1
    
      namespace: openshift-logging
    spec:
      size: 1x.small 
    2
    
      storage:
        schemas:
          - effectiveDate: '2023-10-15'
            version: v13
        secret:
          name: logging-loki-s3 
    3
    
          type: s3 
    4
    
          credentialMode: 
    5
    
      storageClassName: <storage_class_name> 
    6
    
      tenants:
        mode: openshift-logging
    Copy to Clipboard Toggle word wrap
    1
    使用名称 logging-loki
    2
    指定部署大小。在日志记录 5.8 及更新的版本中,Loki 实例支持的大小选项为 1x.extra-small1x.small1x.medium
    3
    指定用于日志存储的 secret。
    4
    指定对应的存储类型。
    5
    可选字段,日志记录 5.9 及更新的版本。支持的用户配置值如下:static 是所有受支持的对象存储类型的默认身份验证模式,使用存储在 Secret 中的凭证。token 是从凭证源检索的短期令牌。在这个模式中,静态配置不包含对象存储所需的凭证。相反,它们会使用服务在运行时生成,允许提供较短的凭证,以及更精细的控制。并不是所有对象存储类型都支持这个身份验证模式。当 Loki 在受管 STS 模式下运行并使用 CCO on STS/WIF 集群时,token-cco 是默认值。
    6
    为临时存储输入存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用 oc get storageclasses 命令列出集群的可用存储类。

2.2.7.3. 使用 CLI 为 Loki 对象存储创建 secret

要配置 Loki 对象存储,您必须创建一个 secret。您可以使用 OpenShift CLI (oc)完成此操作。

先决条件

  • 有管理员权限。
  • 已安装 Loki Operator。
  • 已安装 OpenShift CLI(oc)。

流程

  • 运行以下命令,在包含您的证书和密钥文件的目录中创建 secret:

    $ oc create secret generic -n openshift-logging <your_secret_name> \
     --from-file=tls.key=<your_key_file>
     --from-file=tls.crt=<your_crt_file>
     --from-file=ca-bundle.crt=<your_bundle_file>
     --from-literal=username=<your_username>
     --from-literal=password=<your_password>
    Copy to Clipboard Toggle word wrap
注意

使用通用或 opaque secret 以获得最佳结果。

验证

  • 运行以下命令验证 secret 是否已创建:

    $ oc get secrets
    Copy to Clipboard Toggle word wrap

2.2.8. 对 Loki 日志的精细访问

Red Hat OpenShift Logging Operator 默认不授予所有用户对日志的访问权限。作为管理员,您需要配置用户访问权限,除非 Operator 已升级并且以前的配置已就位。根据您的配置和需要,您可以使用以下内容配置对日志的精细访问:

  • 集群范围内的策略
  • 命名空间范围策略
  • 创建自定义 admin 组

作为管理员,您需要创建适合部署的角色绑定和集群角色绑定。Red Hat OpenShift Logging Operator 提供以下集群角色:

  • cluster-logging-application-view 授予读取应用程序日志的权限。
  • cluster-logging-infrastructure-view 授予读取基础架构日志的权限。
  • cluster-logging-audit-view 授予读取审计日志的权限。

如果您从以前的版本升级,则额外的集群角色 logging-application-logs-reader 和关联的集群角色绑定 logging-all-authenticated-application-logs-reader 提供向后兼容性,允许任何经过身份验证的用户在命名空间中读取访问权限。

注意

在查询应用程序日志时,具有命名空间权限的用户必须提供命名空间。

2.2.8.1. 集群范围内的访问

集群角色绑定资源引用集群角色,以及设置集群范围的权限。

ClusterRoleBinding 示例

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: logging-all-application-logs-reader
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-logging-application-view 
1

subjects: 
2

- kind: Group
  name: system:authenticated
  apiGroup: rbac.authorization.k8s.io
Copy to Clipboard Toggle word wrap

1
额外的 ClusterRolecluster-logging-infrastructure-viewcluster-logging-audit-view
2
指定此对象应用到的用户或组。

2.2.8.2. 命名空间访问

RoleBinding 资源可用于 ClusterRole 对象来定义用户或组可以访问日志的命名空间。

RoleBinding 示例

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: allow-read-logs
  namespace: log-test-0 
1

roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-logging-application-view
subjects:
- kind: User
  apiGroup: rbac.authorization.k8s.io
  name: testuser-0
Copy to Clipboard Toggle word wrap

1
指定此 RoleBinding 应用到的命名空间。

2.2.8.3. 自定义 admin 组访问

如果您的大型部署具有多个需要更广泛的权限的用户,您可以使用 adminGroup 字段创建一个自定义组。属于 LokiStack CR 的 adminGroups 字段中指定的任何组的成员的用户被视为管理员。

如果管理员还分配了 cluster-logging-application-view 角色,则管理员用户可以访问所有命名空间中的所有应用程序日志。

LokiStack CR 示例

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
  tenants:
    mode: openshift-logging 
1

    openshift:
      adminGroups: 
2

      - cluster-admin
      - custom-admin-group 
3
Copy to Clipboard Toggle word wrap

1
自定义管理组仅在此模式中可用。
2
为此字段输入空 list [] 值会禁用 admin 组。
3
覆盖默认组(system:cluster-admins,cluster-admin,dedicated-admin)

2.2.9. 为 cluster-admin 用户角色创建新组

重要

cluster-admin 用户身份查询多个命名空间的应用程序日志,其中集群中所有命名空间的字符总和大于 5120,会导致错误 Parse error: input size too long (XXXX > 5120)。为了更好地控制 LokiStack 中日志的访问,请使 cluster-admin 用户成为 cluster-admin 组的成员。如果 cluster-admin 组不存在,请创建它并将所需的用户添加到其中。

使用以下步骤为具有 cluster-admin 权限的用户创建新组。

流程

  1. 输入以下命令创建新组:

    $ oc adm groups new cluster-admin
    Copy to Clipboard Toggle word wrap
  2. 输入以下命令将所需的用户添加到 cluster-admin 组中:

    $ oc adm groups add-users cluster-admin <username>
    Copy to Clipboard Toggle word wrap
  3. 输入以下命令在组中添加 cluster-admin 用户角色:

    $ oc adm policy add-cluster-role-to-group cluster-admin cluster-admin
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat