Kubernetes上StatefulSet部署的Cassandra集群如何实现internode安全配置
针对K8s StatefulSet部署Cassandra集群的节点间安全配置说明
完全可以为该集群配置安全策略,节点间(internode)通信安全是核心可配置项之一,具体落地方案如下:
核心配置项
1. 节点间TLS传输加密
这是internode安全的基础配置,通过修改cassandra.yaml的server_encryption_options字段即可开启,示例配置如下:
server_encryption_options: internode_encryption: all # 可选值:none(关闭)、dc(仅跨DC加密)、rack(仅跨机架加密)、all(全量加密) keystore: /etc/cassandra/security/keystore.jks keystore_password: <你的密钥库密码> truststore: /etc/cassandra/security/truststore.jks truststore_password: <你的信任库密码> require_client_auth: true # 开启双向认证,禁止未授权节点接入集群
K8s侧操作步骤:
- 将生成的JKS格式证书、密钥文件存储为K8s Secret
- 修改StatefulSet编排,将Secret挂载到所有Cassandra Pod的对应路径下
- 滚动更新StatefulSet生效配置
2. K8s层网络隔离
配套配置K8s原生NetworkPolicy,限制Cassandra Pod的internode通信端口(默认7000为明文端口、7001为TLS加密端口)仅允许同集群的Cassandra节点访问,拦截未授权的外部访问请求,示例规则如下:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: cassandra-internode-allow namespace: <你的Cassandra部署命名空间> spec: podSelector: matchLabels: app: cassandra # 匹配你的Cassandra Pod标签 ingress: - from: - podSelector: matchLabels: app: cassandra ports: - protocol: TCP port: 7000 - protocol: TCP port: 7001
配置注意事项
- 滚动更新StatefulSet时需要按顺序先更新Seed节点,再更新普通节点,避免集群出现脑裂
- 生产环境开启加密前需要先在测试集群验证证书有效性、节点连通性,避免配置错误导致节点间通信中断
- 证书到期前需要提前更新Secret并滚动重载Pod,避免证书过期导致集群节点离线
内容的提问来源于stack exchange,提问作者Sudip Manandhar
相关产品推荐
相关产品推荐

