为 Cassandra 配置 TLS

本主题介绍如何为 Cassandra 节点之间以及客户端与 Cassandra 节点之间的通信配置身份验证。

如何在运行时平面中为 Cassandra 配置 TLS

Cassandra 在客户端机器和数据库集群之间以及集群内的节点之间提供安全通信。启用加密可确保传输中的数据不会遭到破解并安全传输。在 Apigee Hybrid 中,默认情况下将为 Cassandra 节点之间以及客户端和 Cassandra 节点之间的任何通信启用 TLS。

您可以配置使用用户名/密码组合进行身份验证,方法是直接将组合放置在替换文件中,或者将组合添加到 Kubernetes Secret 中,如本主题中所述。

关于 Cassandra 用户身份验证

混合平台使用 Cassandra 作为运行时平面数据的后端数据存储区。默认情况下,与 Cassandra 的任何客户端通信都需要身份验证。与 Cassandra 进行通信的客户使用三个用户。系统可为这些用户提供默认密码,您无需更改这些密码。

这些用户(包括默认用户)如下所述:

  • DML 用户:客户端通信用于将数据读取和写入 Cassandra(KMS、KVM、Cache、Quota)。
  • DDL 用户:MART 用于任何数据定义任务,例如键空间创建、更新和删除。
  • 管理员用户:用于在 Cassandra 集群上执行的任何管理活动。
  • 默认 Cassandra 用户:启用身份验证且用户名为 cassandra 时,Cassandra 会创建默认用户。
  • JMX 用户:用于向 Cassandra JMX 接口进行身份验证并与其进行通信。
  • Jolokia 用户:用于向 Cassandra JMX API 进行身份验证并与其进行通信。

在替换文件中更改默认密码

Apigee Hybrid 为 Cassandra 用户提供默认密码。如果要更改默认用户密码,您可以在 overrides.yaml 文件中更改。添加以下配置,根据需要更改默认密码(“iloveapis123”),然后将更改应用到集群。

cassandra:
   auth:
     default:  ## the password for the new default user (static username: cassandra)
       password: "iloveapis123"
     admin: ## the password for the admin user (static username: admin_user)
       password: "iloveapis123"
     ddl: ## the password for the DDL User (static username: ddl_user)
       password: "iloveapis123"
     dml: ## the password for the DML User (static username: dml_user)
       password: "iloveapis123"
     jmx:
       username: "jmxuser" ## the username for the JMX User
       password: "iloveapis123" ## the password for the JMX User
     jolokia:
       username: "jolokiauser" ## the username to access jolokia interface
       password: "iloveapis123" ## the password for jolokia user

请注意以下事项:

  • 不支持证书授权机构 (CA) 轮替。
  • 不支持使用密码生成的服务器证书。

在 Kubernetes Secret 中设置用户名和密码

本部分介绍如何配置 Cassandra 以使用 Kubernetes Secret 进行身份验证。

创建 Secret

请使用以下模板配置 Kubernetes Secret。将模板保存到文件中,然后修改所需的属性。请注意,如果使用此选项,则必须提供用户名及其密码。

apiVersion: v1
kind: Secret
metadata:
  name: $SECRET_NAME
  namespace: $APIGEE_NAMESPACE
type: Opaque
data:
  default.password: $PASSWORD   #base64-encoded string
  admin.user: $USERNAME   #base64-encoded string
  admin.password: $PASSWORD   #base64-encoded string
  dml.user: $USERNAME   #base64-encoded string
  dml.password: $PASSWORD   #base64-encoded string
  ddl.user: $USERNAME   #base64-encoded string
  ddl.password: $PASSWORD   #base64-encoded string
  jmx.user: $USERNAME   #base64-encoded string
  jmx.password: $PASSWORD   #base64-encoded string
  jolokia.user: $USERNAME   #base64-encoded string
  jolokia.password: $PASSWORD   #base64-encoded string
  

其中,$SECRET_NAME 是您为 Secret 选择的名称,$APIGEE_NAMESPACE 是部署 Apigee pod 的命名空间(默认为 apigee),$USERNAME$PASSWORD 是每位用户的用户名和密码。请注意,用户名和密码必须采用 Base64 编码。

将 Secret 应用到集群。例如:

kubectl apply -f $SECRET_FILE

将 Secret 添加到替换文件:

cassandra:
  auth:
    secret: $SECRET_NAME

将更新后的 Cassandra 覆盖应用于集群:

$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --datastore

检查 Cassandra 日志

在 Cassandra 启动后立即检查日志。下面的日志显示了 Cassandra 客户端连接已加密。

kubectl logs apigee-cassandra-2 -n apigee -f

INFO  00:44:36 Starting listening for CQL clients on /10.0.2.12:9042 (encrypted)...
INFO  00:44:36 Binding thrift service to /10.0.2.12:9160
INFO  00:44:36 enabling encrypted thrift connections between client and server
INFO  00:44:36 Listening for thrift clients...