TLS + ReplicaSet (double secure)

जर तुम्हाला MongoDB ReplicaSet setup हवाय त्यामध्ये TLS encryption आणि node-level authentication (double secure) असेल, तर खालील प्रोडक्शन-ग्रेड YAML + deployment guide प्रमाणे तुम्ही setup करू शकता:

🔐 TLS + ReplicaSet: Full Secure Configuration (StatefulSet) 🚀

1. Certificates तयार करा (Self Signed CA + Node Certs)

  • एक Root CA (ca.pem, ca-key.pem)
  • प्रत्येक Replica node साठी अल्‍ग certificate signed by CA
  • प्रत्येक PEM फाईलमध्ये private key आणि signed certificate एकत्र (node.pem)
  • CN किंवा SAN मध्ये Pod hostnames वापरा (उदा. mongodb-0.mongodb.default.svc.cluster.local)

2. Kubernetes Secrets (TLS Certificates) तयार करा

kubectl create secret tls mongodb-tls-cert \

  –cert=ca.pem \

  –key=ca-key.pem

kubectl create secret generic mongodb-node-0-cert –from-file=node0.pem=./node0.pem \

# आणि बाकी nodes साठीही

  • tls-cert secret मध्ये CA certificate असावा
  • प्रत्येक node साठी अल्‍ग secret ठेवू शकतो

3. Headless Service (DNS + Pod Discovery)

apiVersion: v1

kind: Service

metadata:

  name: mongodb

spec:

  clusterIP: None

  selector:

    app: mongodb

  ports:

    – port: 27017

4. StatefulSet with TLS and ReplicaSet flags

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: mongodb

spec:

  serviceName: “mongodb”

  replicas: 3

  selector:

    matchLabels:

      app: mongodb

  template:

    metadata:

      labels:

        app: mongodb

    spec:

      containers:

      – name: mongod

        image: mongo:5.0

        command:

          – mongod

          – “–replSet=rs0”

          – “–bind_ip_all”

          – “–tlsMode”

          – “requireTLS”

          – “–tlsCertificateKeyFile”

          – “/tls/node.pem”

          – “–tlsCAFile”

          – “/tls/ca.pem”

– “–auth”

          – “–clusterAuthMode”

          – “x509”

        ports:

          – containerPort: 27017

        volumeMounts:

          – name: tls-volume

            mountPath: /tls

            readOnly: true

          – name: mongo-data

            mountPath: /data/db

      volumes:

        – name: tls-volume

          projected:

            sources:

              – secret:

                  name: mongodb-node-0-cert

                  items:

                    – key: node0.pem

                      path: node.pem

              – secret:

                  name: mongodb-tls-cert

                  items:

                    – key: ca.pem

                      path: ca.pem

  volumeClaimTemplates:

    – metadata:

        name: mongo-data

      spec:

        accessModes: [“ReadWriteOnce”]

        resources:

          requests:

            storage: 2Gi

(Pods ordinal नुसार secret name अद्यतन करा)

5. ReplicaSet Initialization (once)

kubectl exec -it mongodb-0 — mongo –tls –tlsCAFile /tls/ca.pem \

  –tlsCertificateKeyFile /tls/node.pem \

  –eval ‘

rs.initiate({

  _id: “rs0”,

  members: [

    { _id: 0, host: “mongodb-0.mongodb.default.svc.cluster.local:27017” },

    { _id: 1, host: “mongodb-1.mongodb.default.svc.cluster.local:27017” },

    { _id: 2, host: “mongodb-2.mongodb.default.svc.cluster.local:27017” }

  ]

})’

6. Client side connection (TLS enabled)

mongosh”mongodb://mongodb0.mongodb.default.svc.cluster.local:27017, mongodb-1.mongodb.default.svc.cluster.local:27017, mongodb-2.mongodb.default.svc.cluster.local:27017/?replicaSet=rs0″ \

  –tls –tlsCAFile ./ca.pem –tlsCertificateKeyFile ./client.pem

  • client.pem हा client certificate असावा, वाढवलेले CN किंवा SAN मध्ये hostnames सॅन एण्ड या म्हणून sign झालेला.
    (github.com)

✅ सुरक्षेचे लाभ:

  • Transport encryption: traffic सर्व pods आणि clients मध्ये सुरक्षित (TLS).
  • Authentication between nodes: clusterAuthMode: x509 वापरून nodes एकमेकांशी प्रमाणित होतात.
  • Credentials-free clustering: username/password ऐवजी certificates वापरून auth होते.
  • ReplicaSet high availability: primary-secondary failover support.