6.2.2.6. 为 Kafka sink 配置安全性

Apache Kafka 客户端和服务器使用 传输层安全性 (TLS) 来加密 Knative 和 Kafka 之间的流量,以及用于身份验证。TLS 是 Knative Kafka 唯一支持的流量加密方法。

Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户必须为 Knative 提供与 Kafka 集群通信的凭证。否则,无法生成或消耗事件。

先决条件

  • OpenShift Serverless Operator、Knative Eventing 和 KnativeKafka 自定义资源(CR)已安装在 OpenShift Container Platform 集群中。
  • KnativeKafka CR 中启用了 Kafka sink。
  • 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您有一个 Kafka 集群 CA 证书存储为一个 .pem 文件。
  • 您有一个 Kafka 集群客户端证书,并存储为 .pem 文件的密钥。
  • 已安装 OpenShift (oc) CLI。
  • 您已选择使用 SASL 的机制,例如 PLAINSCRAM-SHA-256SCRAM-SHA-512

流程

  1. 在与 KafkaSink 对象相同的命名空间中创建一个 secret:

    重要

    证书和密钥必须采用 PEM 格式。

    • 对于使用 SASL 时没有加密的身份验证:

      $ oc create secret -n <namespace> generic <secret_name> \
        --from-literal=protocol=SASL_PLAINTEXT \
        --from-literal=sasl.mechanism=<sasl_mechanism> \
        --from-literal=user=<username> \
        --from-literal=password=<password>
    • 对于使用 TLS 的 SASL 和加密进行身份验证:

      $ oc create secret -n <namespace> generic <secret_name> \
        --from-literal=protocol=SASL_SSL \
        --from-literal=sasl.mechanism=<sasl_mechanism> \
        --from-file=ca.crt=<my_caroot.pem_file_path> \ 1
        --from-literal=user=<username> \
        --from-literal=password=<password>
      1
      如果您使用公共云管理 Kafka 服务,可以省略 ca.crt 来使用系统的根 CA,如用于 Apache Kafka 的 Red Hat OpenShift Streams。
    • 使用 TLS 进行身份验证和加密:

      $ oc create secret -n <namespace> generic <secret_name> \
        --from-literal=protocol=SSL \
        --from-file=ca.crt=<my_caroot.pem_file_path> \ 1
        --from-file=user.crt=<my_cert.pem_file_path> \
        --from-file=user.key=<my_key.pem_file_path>
      1
      如果您使用公共云管理 Kafka 服务,可以省略 ca.crt 来使用系统的根 CA,如用于 Apache Kafka 的 Red Hat OpenShift Streams。
  2. 创建或修改 KafkaSink 对象,并在 auth spec 中添加对 secret 的引用:

    apiVersion: eventing.knative.dev/v1alpha1
    kind: KafkaSink
    metadata:
       name: <sink_name>
       namespace: <namespace>
    spec:
    ...
       auth:
         secret:
           ref:
             name: <secret_name>
    ...
  3. 应用 KafkaSink 对象:

    $ oc apply -f <filename>