Как настроить шифрование TLS/SSL для Cassandra в K8ssandra?

я новичок в kubernetes/helm. Я пытаюсь настроить шифрование TLS/SSL для Cassandra в K8ssandra? Я видел этот пример, но не могу продвинуться дальше. Нажмите здесь !

Я выполняю следующие шаги, как описано в этом руководстве. Нажмите здесь !

      helm repo add k8ssandra https://helm.k8ssandra.io/stable
helm repo update
      cd ~/github
git clone https://github.com/k8ssandra/k8ssandra-operator.git
cd k8ssandra-operator
      scripts/setup-kind-multicluster.sh --clusters 1 --kind-worker-nodes 4
      helm repo add jetstack https://charts.jetstack.io
helm repo update
kubectl config use-context kind-k8ssandra-0
      helm install cert-manager jetstack/cert-manager \
     --namespace cert-manager --create-namespace --set installCRDs=true
      helm install k8ssandra-operator k8ssandra/k8ssandra-operator -n k8ssandra-operator --create-namespace
      cat <<EOF | kubectl -n k8ssandra-operator apply -f -
    apiVersion: k8ssandra.io/v1alpha1
    kind: K8ssandraCluster
    metadata:
      name: demo
    spec:
      cassandra:
    serverVersion: "4.0.1"
    datacenters:
      - metadata:
          name: dc1
        size: 3
        storageConfig:
          cassandraDataVolumeClaimSpec:
            storageClassName: standard
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 5Gi
        config:
          jvmOptions:
            heapSize: 512M
        stargate:
          size: 1
          heapSize: 256M
EOF
      CASS_USERNAME=$(kubectl get secret demo-superuser -n k8ssandra-operator -o=jsonpath='{.data.username}' | base64 --decode)
echo $CASS_USERNAME


CASS_PASSWORD=$(kubectl get secret demo-superuser -n k8ssandra-operator -o=jsonpath='{.data.password}' | base64 --decode)
echo $CASS_PASSWORD
      kubectl exec -it demo-dc1-default-sts-0 -n k8ssandra-operator -c cassandra -- nodetool -u $CASS_USERNAME -pw $CASS_PASSWORD status
kubectl exec -it demo-dc1-default-sts-0 -n k8ssandra-operator -c cassandra -- cqlsh -u $CASS_USERNAME -p $CASS_PASSWORD -e "CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};"

kubectl exec -it demo-dc1-default-sts-0 -n k8ssandra-operator -c cassandra -- cqlsh -u $CASS_USERNAME -p $CASS_PASSWORD -e "insert into test.users (email, name, state) values ('john@gamil.com', 'John Smith', 'NC');"
kubectl exec -it demo-dc1-default-sts-0 -n k8ssandra-operator -c cassandra -- cqlsh -u $CASS_USERNAME -p $CASS_PASSWORD -e "insert into test.users (email, name, state) values ('joe@gamil.com', 'Joe Jones', 'VA');"
kubectl exec -it demo-dc1-default-sts-0 -n k8ssandra-operator -c cassandra -- cqlsh -u $CASS_USERNAME -p $CASS_PASSWORD -e "insert into test.users (email, name, state) values ('sue@help.com', 'Sue Sas', 'CA');"
kubectl exec -it demo-dc1-default-sts-0 -n k8ssandra-operator -c cassandra -- cqlsh -u $CASS_USERNAME -p $CASS_PASSWORD -e "insert into test.users (email, name, state) values ('tom@yes.com', 'Tom and Jerry', 'NV');"

Файлы truststore.jks и keystore.jks хранятся локально на ПК в каталогах ./mnt/keystore/... и ./mnt/truststore/.... Здесь я создаю секреты keystoreSecret и truststoreSecret.

      kubectl create secret generic keystore --from-file=./mnt/keystore/keystore.jks -n k8ssandra-operator  
kubectl create secret generic truststore --from-file=./mnt/truststore/truststore.jks -n k8ssandra-operator  

Теперь я запустил приведенные выше примеры. Это значение.yaml

      cassandra:
  version: 4.0.1
  cassandraYamlConfigMap: cassandra-config
  encryption:
    keystoreSecret: keystore
    keystoreMountPath: /mnt/keystore
    truststoreSecret: truststore
    truststoreMountPath: /mnt/truststore
  heap:
    size: 512M
  datacenters:
  - name: dc1
    size: 1

Я пытаюсь запустить этот пример следующим образом.

      helm upgrade  k8ssandra-operator k8ssandra/k8ssandra-operator -n k8ssandra-operator  -f  value.yaml

Теперь я пытаюсь запустить файл configmap. config-file.yaml

      apiVersion: v1
kind: ConfigMap
metadata:
  name: cassandra-config
data:
  cassandra.yaml: |-
    server_encryption_options:
      internode_encryption: all
      keystore: /mnt/keystore/keystore.jks
      keystore_password: cassandra
      truststore: /mnt/truststore/truststore.jks
      truststore_password: cassandra
      kubectl apply -f config-file.yaml -n k8ssandra-operator

я могу без проблем переключиться на cassandra bash

      kubectl exec -it demo-dc1-default-sts-0 -n k8ssandra-operator -- /bin/bash

В среде cassandra bash я не могу найти файлы хранилища доверенных сертификатов и ключей в каталогах /mnt/truststore/truststore.jks и /mnt/keystore/keystore.jks.

Я пытаюсь войти в cassandra с помощью ssl, но не могу.

      cassandra@demo-dc1-default-sts-0:/$ cqlsh --ssl -u demo-superuser -p JKv59QPynp3s0qGSf1DZ demo-dc1-stargate-service
Validation is enabled; SSL transport factory requires a valid certfile to be specified. Please provide path to the certfile in [ssl] section as 'certfile' option in /home/cassandra/.cassandra/cqlshrc (or use [certfiles] section) or set SSL_CERTFILE environment variable.

1 ответ

Вы проверили этот документ ? Это относится к k8ssandra-operator (считается K8ssandra v2), а ссылки, которые вы нашли, относятся к K8ssandra v1 (где все было рулем).

Дайте мне знать, если это работает для вас.

Другие вопросы по тегам