文档文档

在 InfluxDB 集群中设置 TLS

在 InfluxDB 集群中设置 TLS,以确保传入和传出的数据均已加密且安全。我们建议使用 TLS 加密以下通信:

  • 到您集群的 Ingress
  • 与您的对象存储的连接
  • 与您的 Catalog(PostgreSQL 兼容)数据库的连接

设置 Ingress TLS

Kubernetes 支持许多不同的 Ingress 控制器,其中一些控制器提供了用于创建和管理 TLS 证书的简单机制。如果使用 InfluxDB 定义的 Ingress 和 Nginx Ingress Controller,请将有效的 TLS 证书作为 Secret 添加到集群。提供 TLS 证书文件和密钥文件的路径

kubectl create secret tls ingress-tls \
  --namespace influxdb \
  --cert 
TLS_CERT_PATH
\
--key
TLS_KEY_PATH

替换以下内容

  • TLS_CERT_PATH:本地计算机上证书文件的路径。
  • TLS_KEY_PATH:本地计算机上证书密钥文件的路径。

配置 Ingress 步骤中,将 TLS 证书 Secret 提供给 InfluxDB 配置。

配置 Ingress

更新您的 AppInstance 资源以引用 包含您的 TLS 证书和密钥的 Secret。以下示例使用名称 ingress-tls

  • 如果直接修改 AppInstance 资源,请在 spec.package.spec.ingress.tlsSecretName 属性中引用 TLS Secret。
  • 如果使用 InfluxDB Clustered Helm chart,请在 values.yaml 中的 ingress.tlsSecretName 属性中引用 TLS Secret。

tlsSecretName 字段是可选的。如果您已经有 DNS 名称的 TLS 证书,则可能需要使用它。

使用 cert-manager 和 Let’s Encrypt 管理 TLS 证书

apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      # ...
      ingress:
        hosts:
          - cluster-host.com
        tlsSecretName: ingress-tls
ingress:
  hosts:
    - cluster-host.com
  tlsSecretName: ingress-tls

在对象存储上要求 HTTPS

某些对象存储提供商在访问对象存储时允许不安全连接。请参阅您的对象存储提供商的文档,了解有关安装 TLS 证书和确保所有连接安全的信息。

如果使用 AWS S3 或 S3 兼容 对象存储,请在您的 AppInstance 资源中将以下属性设置为 false,以禁止与您的对象存储建立不安全连接

  • 如果直接修改 AppIsntance 资源:
    spec.package.spec.objectStore.s3.allowHttp
  • 如果使用 InfluxDB Clustered Helm chart:
    objectStore.s3.allowHttp 在您的 values.yaml
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      objectStore:
        s3:
          # ...
          allowHttp: 'false'
objectStore:
  s3:
    # ...
    allowHttp: 'false'

在您的 Catalog 数据库上要求 TLS

请参阅您的 PostgreSQL 兼容数据库提供商的文档,了解有关安装 TLS 证书和确保安全连接的信息。

如果当前使用与您的 Catalog 数据库的不安全连接,请更新您的 Catalog 数据源名称 (DSN) 以删除 sslmode=disable 查询参数

postgres://username:passw0rd@mydomain:5432/influxdb?sslmode=disable

提供自定义证书颁发机构捆绑包

InfluxDB 尝试与其依赖的服务(特别是 Catalog对象存储)建立 TLS 连接。InfluxDB 验证所有连接的证书。

如果您自己托管依赖服务,并且您使用私有或不太知名的证书颁发机构来为其颁发证书,则 InfluxDB 将无法识别颁发者,也无法验证证书。 要允许 InfluxDB 验证来自您的自定义 CA 的证书,请配置 AppInstance 资源以使用包含您的自定义证书颁发机构链的 PEM 证书捆绑包

  1. 使用 kubectl 创建一个 ConfigMap,其中包含您的 PEM 格式的证书捆绑包文件。您的证书颁发机构管理员应为您提供 PEM 格式的捆绑包文件。

    此 PEM 捆绑包文件为 InfluxDB 依赖的外部服务建立信任链。它不是 InfluxDB 用于托管其自己的 TLS 端点的证书。

    在该示例中,将 /path/to/private_ca.pem 替换为您的 PEM 格式证书捆绑包文件的路径

    kubectl --namespace influxdb create configmap custom-ca --from-file=certs.pem=/path/to/private_ca.pem
    

    捆绑多个证书

    您可以将多个证书附加到同一捆绑包中。当您需要包含中间证书或显式包含叶证书时,此方法很有帮助。

    按以下顺序在捆绑包中包含证书

    1. 叶证书
    2. 叶证书所需的中间证书
    3. 根证书
  2. 更新您的 AppInstance 资源以引用 custom-ca ConfigMap。

    • 如果直接修改 AppInstance 资源:
      将 ConfigMap 添加到 .spec.package.spec.egress 属性。
    • 如果使用 InfluxDB Clustered Helm chart:
      useCustomEgress 设置为 true 并更新 egress 属性以引用 ConfigMap。
    apiVersion: kubecfg.dev/v1alpha1
    kind: AppInstance
    # ...
    spec:
      package:
        spec:
          egress:
            customCertificates:
              valueFrom:
                configMapKeyRef:
                  key: ca.pem
                  name: custom-ca
    
    useCustomEgress: true
    egress:
      customCertificates:
        valueFrom:
          configMapKeyRef:
            key: ca.pem
            name: custom-ca
    

将更改应用到您的集群

使用 kubectlhelm(如果使用 InfluxDB Clustered Helm chart),将配置更改应用到您的集群

kubectl apply \
  --filename myinfluxdb.yml \
  --namespace influxdb
helm upgrade \
  influxdata/influxdb3-clustered \
  -f ./values.yml \
  --namespace influxdb

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在一样使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源版现已发布公开 Alpha 版本

InfluxDB 3 开源版现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两种产品作为 Alpha 版本的一部分。

InfluxDB 3 Core 是我们新的开源产品。它是用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始使用的更多信息,请查看