diff --git a/deploy/crds/crd-qdrantcluster.yaml b/deploy/crds/crd-qdrantcluster.yaml index 5800f51..15baffb 100644 --- a/deploy/crds/crd-qdrantcluster.yaml +++ b/deploy/crds/crd-qdrantcluster.yaml @@ -45,10 +45,6 @@ spec: x-kubernetes-validations: - rule: (self.apikey == 'false' && self.readApikey == 'false') || ( self.apikey != 'false') message: "spec.readApikey can be used only with spec.apikey enabled" - - rule: (self.tls.enabled == false && self.tls.mtls == false) || ( self.tls.enabled != false) - message: "spec.tls.mtls can be used only with spec.tls.enabled" - - rule: (self.tls.enabled == false && self.tls.internodeEnabled == false) || ( self.tls.enabled != false) - message: "spec.tls.internodeEnabled can be used only with spec.tls.enabled" required: ["replicas","image"] properties: apikey: @@ -114,14 +110,6 @@ spec: default: false secretName: type: string - internodeEnabled: - type: boolean - default: false - mtls: - type: boolean - default: false - clientSecretName: - type: string # scheduling options tolerations: type: array diff --git a/deploy/operator.yaml b/deploy/operator.yaml index 61d526b..31c3e0e 100644 --- a/deploy/operator.yaml +++ b/deploy/operator.yaml @@ -27,6 +27,9 @@ rules: - apiGroups: ["apps"] resources: ["statefulsets"] verbs: ["get", "list", "create", "update", "delete", "patch", "watch"] + - apiGroups: ["policy"] + resources: ["poddisruptionbudgets"] + verbs: ["get", "list", "create", "update", "delete", "patch", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -71,7 +74,7 @@ spec: serviceAccountName: qdrant-operator-sa containers: - name: operator - image: docker.io/dganochenko/qdrant-operator:0.1.2 + image: docker.io/dganochenko/qdrant-operator:0.1.3 imagePullPolicy: Always # debug # command: ["/bin/sh"] diff --git a/docs/qdrantclusters-api.md b/docs/qdrantclusters-api.md index 89273db..71ab9df 100644 --- a/docs/qdrantclusters-api.md +++ b/docs/qdrantclusters-api.md @@ -24,8 +24,6 @@ spec: storageClassName: default tls: enabled: true - internodeEnabled: true - mtls: true resources: requests: cpu: 10m diff --git a/docs/tls.md b/docs/tls.md new file mode 100644 index 0000000..8337977 --- /dev/null +++ b/docs/tls.md @@ -0,0 +1,84 @@ +# Qdrant TLS Guide + +In this guide you create a Qdrant cluster with enabled TLS encryption. + +1. Create Qdrant Cluster + +```bash +cat < { return { certificate: pemServerCert, privateKey: pemServerKey, - notAfter: newServerCert.validity.notBefore, + notBefore: newServerCert.validity.notBefore, notAfter: newServerCert.validity.notAfter }; }; @@ -154,6 +154,7 @@ export const generateCert = async (apiObj) => { name + '-headless', name + '.' + namespace, name + '-headless.' + namespace, + '*.' + name + '-headless.' + namespace, '*.' + namespace + '.svc.' + clusterDomain ], CA diff --git a/src/cluster-ops.js b/src/cluster-ops.js index b66c697..93d991f 100644 --- a/src/cluster-ops.js +++ b/src/cluster-ops.js @@ -50,9 +50,6 @@ export const applyCluster = async (apiObj, k8sAppsApi, k8sCoreApi) => { const name = apiObj.metadata.name; const namespace = apiObj.metadata.namespace; - if (typeof apiObj.spec.tls == 'undefined') { - apiObj.spec.tls = { enabled: false }; - } if ( apiObj.spec.tls.enabled && typeof apiObj.spec.tls.secretName == 'undefined' @@ -351,7 +348,7 @@ export const applyPdbCluster = async (apiObj, k8sPolicyApi) => { try { k8sPolicyApi.createNamespacedPodDisruptionBudget( `${namespace}`, - newPDBClusterTemplate + newPdbClusterTemplate ); log(`PDB "${name}" was successfully created!`); } catch (err) { diff --git a/src/templates/configmap.jsr b/src/templates/configmap.jsr index 7314f4e..3dfce6d 100644 --- a/src/templates/configmap.jsr +++ b/src/templates/configmap.jsr @@ -14,8 +14,8 @@ data: SET_INDEX=${HOSTNAME##*-} echo "Starting initializing for pod $SET_INDEX" if [ "$SET_INDEX" = "0" ]; then - exec ./entrypoint.sh --uri 'http://{{:metadata.name}}-0.{{:metadata.name}}-headless:6335' + exec ./entrypoint.sh --uri 'http://{{:metadata.name}}-0.{{:metadata.name}}-headless.{{:metadata.namespace}}:6335' else - exec ./entrypoint.sh --bootstrap 'http://{{:metadata.name}}-0.{{:metadata.name}}-headless:6335' --uri 'http://{{:metadata.name}}-'"$SET_INDEX"'.{{:metadata.name}}-headless:6335' + exec ./entrypoint.sh --bootstrap 'http://{{:metadata.name}}-0.{{:metadata.name}}-headless.{{:metadata.namespace}}:6335' --uri 'http://{{:metadata.name}}-'"$SET_INDEX"'.{{:metadata.name}}-headless.{{:metadata.namespace}}:6335' fi production.yaml: '' diff --git a/src/templates/secret-client-cert.jsr b/src/templates/secret-client-cert.jsr new file mode 100644 index 0000000..7bb0c66 --- /dev/null +++ b/src/templates/secret-client-cert.jsr @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{:metadata.name}}-client-cert + namespace: {{:metadata.namespace}} + ownerReferences: + - apiVersion: {{:apiVersion}} + kind: {{:kind}} + name: {{:metadata.name}} + uid: {{:metadata.uid}} +data: + cert.pem: '' + key.pem: '' + cacert.pem: '' diff --git a/src/templates/statefulset.jsr b/src/templates/statefulset.jsr index 91a36ac..1d82f47 100644 --- a/src/templates/statefulset.jsr +++ b/src/templates/statefulset.jsr @@ -49,12 +49,8 @@ spec: - name: p2p containerPort: 6335 readinessProbe: - httpGet: - path: / + tcpSocket: port: 6333 - {{if spec.tls.enabled }} - scheme: HTTPS - {{/if}} initialDelaySeconds: 5 periodSeconds: 10 timeoutSeconds: 1