diff --git a/.gitignore b/.gitignore index 195315528..5427db7cc 100644 --- a/.gitignore +++ b/.gitignore @@ -94,3 +94,5 @@ logs # locally packaged chart mongodb-kubernetes-*.tgz + +scripts/code_snippets/tests/outputs/* diff --git a/controllers/searchcontroller/mongodbsearch_reconcile_helper.go b/controllers/searchcontroller/mongodbsearch_reconcile_helper.go index d3a5c32a0..84318afc9 100644 --- a/controllers/searchcontroller/mongodbsearch_reconcile_helper.go +++ b/controllers/searchcontroller/mongodbsearch_reconcile_helper.go @@ -272,7 +272,7 @@ func (r *MongoDBSearchReconcileHelper) ensureEgressTlsConfig(ctx context.Context mongotModification := func(config *mongot.Config) { config.SyncSource.ReplicaSet.TLS = ptr.To(true) - config.SyncSource.CertificateAuthorityFile = ptr.To(tls.CAMountPath + "/" + tlsSourceConfig.CAFileName) + config.SyncSource.CertificateAuthorityFile = ptr.To(tls.CAMountPath + tlsSourceConfig.CAFileName) // if the gRPC server is configured to accept TLS connections then toggle mTLS as well if config.Server.Grpc.TLS.Mode == mongot.ConfigTLSModeTLS { diff --git a/docs/search/01-search-community-deploy/code_snippets/01_0040_validate_env.sh b/docs/search/01-search-community-deploy/code_snippets/01_0040_validate_env.sh new file mode 100644 index 000000000..f7a95e268 --- /dev/null +++ b/docs/search/01-search-community-deploy/code_snippets/01_0040_validate_env.sh @@ -0,0 +1,25 @@ +required=( + K8S_CTX + MDB_NS + MDB_RESOURCE_NAME + MDB_VERSION + MDB_MEMBERS + CERT_MANAGER_NAMESPACE + MDB_TLS_CA_SECRET_NAME + MDB_TLS_SERVER_CERT_SECRET_NAME + MDB_SEARCH_TLS_SECRET_NAME + MDB_ADMIN_USER_PASSWORD + MDB_SEARCH_SYNC_USER_PASSWORD + MDB_USER_PASSWORD + OPERATOR_HELM_CHART +) + +missing_req=() +for v in "${required[@]}"; do [[ -n "${!v:-}" ]] || missing_req+=("${v}"); done + +if (( ${#missing_req[@]} )); then + echo "ERROR: Missing required environment variables:" >&2 + for m in "${missing_req[@]}"; do echo " - ${m}" >&2; done +else + echo "All required environment variables present." +fi diff --git a/docs/search/01-search-community-deploy/code_snippets/01_0305_create_mongodb_community_user_secrets.sh b/docs/search/01-search-community-deploy/code_snippets/01_0305_create_mongodb_community_user_secrets.sh index 6e28372b7..80b655277 100755 --- a/docs/search/01-search-community-deploy/code_snippets/01_0305_create_mongodb_community_user_secrets.sh +++ b/docs/search/01-search-community-deploy/code_snippets/01_0305_create_mongodb_community_user_secrets.sh @@ -1,12 +1,16 @@ -kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ - create secret generic mdb-admin-user-password \ - --from-literal=password="${MDB_ADMIN_USER_PASSWORD}" +# Create admin user secret +kubectl create secret generic mdb-admin-user-password \ + --from-literal=password="${MDB_ADMIN_USER_PASSWORD}" \ + --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f - -kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ - create secret generic mdbc-rs-search-sync-source-password \ - --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}" +# Create search sync source user secret +kubectl create secret generic "${MDB_RESOURCE_NAME}-search-sync-source-password" \ + --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}" \ + --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f - -kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ - create secret generic mdb-user-password \ - --from-literal=password="${MDB_USER_PASSWORD}" +# Create regular user secret +kubectl create secret generic mdb-user-password \ + --from-literal=password="${MDB_USER_PASSWORD}" \ + --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f - +echo "User secrets created." diff --git a/docs/search/01-search-community-deploy/code_snippets/01_0306_install_cert_manager.sh b/docs/search/01-search-community-deploy/code_snippets/01_0306_install_cert_manager.sh new file mode 100755 index 000000000..0e92edf54 --- /dev/null +++ b/docs/search/01-search-community-deploy/code_snippets/01_0306_install_cert_manager.sh @@ -0,0 +1,15 @@ +helm upgrade --install \ + cert-manager \ + oci://quay.io/jetstack/charts/cert-manager \ + --kube-context "${K8S_CTX}" \ + --namespace "${CERT_MANAGER_NAMESPACE}" \ + --create-namespace \ + --set crds.enabled=true + +for deployment in cert-manager cert-manager-cainjector cert-manager-webhook; do + kubectl --context "${K8S_CTX}" \ + -n "${CERT_MANAGER_NAMESPACE}" \ + wait --for=condition=Available "deployment/${deployment}" --timeout=300s +done + +echo "cert-manager is ready in namespace ${CERT_MANAGER_NAMESPACE}." diff --git a/docs/search/01-search-community-deploy/code_snippets/01_0307_prepare_cert_manager_issuer.sh b/docs/search/01-search-community-deploy/code_snippets/01_0307_prepare_cert_manager_issuer.sh new file mode 100755 index 000000000..ae9387bca --- /dev/null +++ b/docs/search/01-search-community-deploy/code_snippets/01_0307_prepare_cert_manager_issuer.sh @@ -0,0 +1,60 @@ +# Bootstrap a self-signed ClusterIssuer that will mint the CA material consumed by +# the MongoDBCommunity deployment. +kubectl apply --context "${K8S_CTX}" -f - < "${TMP_CA_CERT}" + +# Expose the CA bundle through a ConfigMap for workloads and the MongoDBCommunity resource. +kubectl --context "${K8S_CTX}" create configmap "${MDB_TLS_CA_CONFIGMAP}" -n "${MDB_NS}" \ + --from-file=ca-pem="${TMP_CA_CERT}" --from-file=mms-ca.crt="${TMP_CA_CERT}" \ + --from-file=ca.crt="${TMP_CA_CERT}" \ + --dry-run=client -o yaml | kubectl --context "${K8S_CTX}" apply -f - + +echo "Cluster-wide CA issuer ${MDB_TLS_CA_ISSUER} is ready." diff --git a/docs/search/01-search-community-deploy/code_snippets/01_0308_issue_tls_certificates.sh b/docs/search/01-search-community-deploy/code_snippets/01_0308_issue_tls_certificates.sh new file mode 100755 index 000000000..68b8a1e7f --- /dev/null +++ b/docs/search/01-search-community-deploy/code_snippets/01_0308_issue_tls_certificates.sh @@ -0,0 +1,70 @@ +server_certificate="${MDB_RESOURCE_NAME}-server-tls" +search_certificate="${MDB_RESOURCE_NAME}-search-tls" + +mongo_dns_names=() +for ((member = 0; member < MDB_MEMBERS; member++)); do + mongo_dns_names+=("${MDB_RESOURCE_NAME}-${member}") + mongo_dns_names+=("${MDB_RESOURCE_NAME}-${member}.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local") +done +mongo_dns_names+=( + "${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local" + "*.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local" +) + +search_dns_names=( + "${MDB_RESOURCE_NAME}-search-svc.${MDB_NS}.svc.cluster.local" +) + +render_dns_list() { + local dns_list=("$@") + for dns in "${dns_list[@]}"; do + printf " - \"%s\"\n" "${dns}" + done +} + +kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <&2 + for m in "${missing_req[@]}"; do echo " - ${m}" >&2; done +else + echo "All required environment variables present." +fi diff --git a/docs/search/02-search-enterprise-deploy/code_snippets/02_0301_install_cert_manager.sh b/docs/search/02-search-enterprise-deploy/code_snippets/02_0301_install_cert_manager.sh new file mode 100644 index 000000000..0e92edf54 --- /dev/null +++ b/docs/search/02-search-enterprise-deploy/code_snippets/02_0301_install_cert_manager.sh @@ -0,0 +1,15 @@ +helm upgrade --install \ + cert-manager \ + oci://quay.io/jetstack/charts/cert-manager \ + --kube-context "${K8S_CTX}" \ + --namespace "${CERT_MANAGER_NAMESPACE}" \ + --create-namespace \ + --set crds.enabled=true + +for deployment in cert-manager cert-manager-cainjector cert-manager-webhook; do + kubectl --context "${K8S_CTX}" \ + -n "${CERT_MANAGER_NAMESPACE}" \ + wait --for=condition=Available "deployment/${deployment}" --timeout=300s +done + +echo "cert-manager is ready in namespace ${CERT_MANAGER_NAMESPACE}." diff --git a/docs/search/02-search-enterprise-deploy/code_snippets/02_0302_configure_tls_prerequisites.sh b/docs/search/02-search-enterprise-deploy/code_snippets/02_0302_configure_tls_prerequisites.sh new file mode 100644 index 000000000..102c4ff0a --- /dev/null +++ b/docs/search/02-search-enterprise-deploy/code_snippets/02_0302_configure_tls_prerequisites.sh @@ -0,0 +1,53 @@ +# Bootstrap a self-signed ClusterIssuer to mint the CA secret consumed by application workloads. +kubectl apply --context "${K8S_CTX}" -f - < "${TMP_CA_CERT}" + +kubectl --context "${K8S_CTX}" create configmap "${MDB_TLS_CA_CONFIGMAP}" -n "${MDB_NS}" \ + --from-file=ca-pem="${TMP_CA_CERT}" --from-file=mms-ca.crt="${TMP_CA_CERT}" \ + --from-file=ca.crt="${TMP_CA_CERT}" \ + --dry-run=client -o yaml | kubectl --context "${K8S_CTX}" apply -f - diff --git a/docs/search/02-search-enterprise-deploy/code_snippets/02_0304_generate_tls_certificates.sh b/docs/search/02-search-enterprise-deploy/code_snippets/02_0304_generate_tls_certificates.sh new file mode 100644 index 000000000..1f6965a66 --- /dev/null +++ b/docs/search/02-search-enterprise-deploy/code_snippets/02_0304_generate_tls_certificates.sh @@ -0,0 +1,47 @@ +kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <