Antes de crear una implementación de MongoDB en un clúster de Kubernetes múltiple mediante el inicio rápido o un procedimiento de implementación, complete las siguientes tareas.
Para obtener más información sobre los requisitos previos específicos del inicio rápido, consulte Requisitos previos de inicio rápido.
Revisar las arquitecturas de hardware compatibles
Clonar los controladores MongoDB para el repositorio de operadores de Kubernetes
Clonar el Repositorio de operadores de controladores MongoDB para Kubernetes:
git clone https://github.com/mongodb/mongodb-kubernetes.git
Establecer variables de entorno
Establezca las variables de entorno con los nombres de clúster donde implementa los clústeres, como en este ejemplo:
export MDB_CENTRAL_CLUSTER_FULL_NAME="mdb-central" export MDB_CLUSTER_1_FULL_NAME="mdb-1" export MDB_CLUSTER_2_FULL_NAME="mdb-2" export MDB_CLUSTER_3_FULL_NAME="mdb-3"
Instalar Go y Helm
Instala las siguientes herramientas:
Instalar Go 1v.17 o posterior.
Comprender los roles y las vinculaciones de roles de Kubernetes
Para utilizar una implementación de MongoDB en un clúster de Kubernetes múltiple, debe tener un conjunto específico de roles deKubernetes, ClusterRoles, RoleBindings, ClusterRoleBindings y ServiceAccounts, que puede configurar de cualquiera de las siguientes maneras:
Siga el Inicio rápido de múltiples clústeres de Kubernetes, que le indica cómo usar el complemento MongoDB para crear automáticamente los objetos necesarios y aplicarlos a los clústeres adecuados dentro de su implementación de MongoDB de múltiples clústeres de Kubernetes.
Utilice Helm para configurar los roles de Kubernetes y las cuentas de servicio necesarios para cada clúster miembro:
helm template --show-only \ templates/database-roles.yaml \ mongodb/mongodb-kubernetes \ --set namespace=mongodb | \ kubectl apply -f - \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb helm template --show-only \ templates/database-roles.yaml \ mongodb/mongodb-kubernetes \ --set namespace=mongodb | \ kubectl apply -f - \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb helm template --show-only \ templates/database-roles.yaml \ mongodb/mongodb-kubernetes \ --set namespace=mongodb | \ kubectl apply -f - \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb Crear manualmente un objeto de Kubernetes
.yamlArchivos y agregue los roles de Kubernetes y las cuentas de servicio necesarios a su implementación de MongoDB con varios clústeres de Kubernetes mediante el comandokubectl apply. Esto puede ser necesario para ciertos flujos de trabajo altamente automatizados. MongoDB proporciona archivos de configuración de ejemplo.Para recursos personalizados limitados a un subconjunto de espacios de nombres:
Roles, vinculaciones de roles y cuentas de servicio para su clúster de operadores
Roles, vinculaciones de roles y cuentas de servicio para sus clústeres de miembros
Para recursos personalizados cuyo ámbito es un espacio de nombres de todo el clúster:
ClusterRoles, ClusterRoleBindings y ServiceAccounts para su clúster de operadores
ClusterRoles, ClusterRoleBindings y ServiceAccounts para su clúster miembro
Cada archivo define varios recursos. Para facilitar su implementación, debe reemplazar los valores de marcador de posición en los siguientes campos:
subjects.namespaceen cada recursoRoleBindingoClusterRoleBindingmetadata.namespaceen cada recursoServiceAccount
Después de modificar las definiciones, aplíquelas ejecutando el siguiente comando para cada archivo:
kubectl apply -f <fileName>
Establecer el alcance de la implementación
Por defecto, el operador de Kubernetes multiclúster está limitado al namespace en el que se instala. El Kubernetes operador concilia el recurso MongoDBMultiCluster implementado en el mismo namespace que el Kubernetes operador.
Cuando ejecuta el complemento kubectl de MongoDB como parte del inicio rápido de múltiples clústeres y no modifica la kubectl mongodb configuración del complemento, el complemento:
Crea un ConfigMap
mongodb-kubernetes-operator-member-listpredeterminado llamado que contiene todos los clústeres miembros de la implementación de MongoDB con clústeres multi-Kubernetes. Este nombre está predefinido y no se puede cambiar.Consulte Problemas conocidos.Crea ServiceAccounts, Roles, ClusterRoles, RoleBindings y ClusterRoleBindings en el clúster de operador y cada clúster nodo.
Aplica los permisos correctos para las cuentas de servicio.
Utilice las configuraciones anteriores para crear su implementación de MongoDB en varios clústeres de Kubernetes.
Una vez que MongoDB el mongodb operador de Kubernetes crea la implementación de MongoDB en varios clústeres de Kubernetes, comienza a monitorear los recursos en el espacio de nombres.
Para configurar el operador de Kubernetes con los permisos correctos para implementar en un subconjunto o en todos los espacios de nombres, ejecute el siguiente comando y especifique los espacios de nombres que desea que el operador de Kubernetes supervise.
kubectl mongodb multicluster setup \ --central-cluster="${MDB_CENTRAL_CLUSTER_FULL_NAME}" \ --member-clusters="${MDB_CLUSTER_1_FULL_NAME},${MDB_CLUSTER_2_FULL_NAME},${MDB_CLUSTER_3_FULL_NAME}" \ --member-cluster-namespace="mongodb2" \ --central-cluster-namespace="mongodb2" \ --create-service-account-secrets \ --cluster-scoped="true"
Al instalar la implementación de MongoDB de varios clústeres de Kubernetes en varios o todos los espacios de nombres, puede configurar el operador de Kubernetes para:
Nota
Instale y configure una sola instancia de un operador de Kubernetes y configúrela para monitorear uno, varios o todos los recursos personalizados en diferentes subconjuntos de namespaces que no se superpongan. Ver también ¿MongoDB admite ejecutar más de una instancia de Kubernetes operador?
Vigila recursos en varios espacios de nombres
Si establece el alcance para la implementación de MongoDB en varios clústeres de Kubernetes en muchos espacios de nombres, puede configurar el operador de Kubernetes para vigilar MongoDB recursos en estos espacios de nombres en la implementación de MongoDB en varios clústeres de Kubernetes.
Establezca spec.template.spec.containers.name.env.name:WATCH_NAMESPACE en el archivo mongodb-kubernetes.yaml del repositorio de GitHub de controladores MongoDB para el operador de Kubernetes en la lista separada por comas de espacios de nombres que desea que el operador de Kubernetes observe:
WATCH_NAMESPACE: "$namespace1,$namespace2,$namespace3"
Ejecute el siguiente comando y reemplace los valores en la última línea con los espacios de nombres que desea que el operador de Kubernetes observe.
helm upgrade \ --install \ mongodb-kubernetes-operator-multi-cluster \ mongodb/mongodb-kubernetes \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version>\ --set operator.name=mongodb-kubernetes-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={$MDB_CLUSTER_1_FULL_NAME,$MDB_CLUSTER_2_FULL_NAME,$MDB_CLUSTER_3_FULL_NAME}" \ --set operator.watchNamespace="$namespace1,$namespace2,$namespace3"
Ver recursos en todos los espacios de nombres
Si establece el alcance para la implementación de MongoDB del clúster multi-Kubernetes en todos los espacios de nombres en lugar del espacio de mongodb nombres predeterminado, puede configurar el operador de Kubernetes para vigilar MongoDB los recursos en todos los espacios de nombres en la implementación de MongoDB del clúster multi-Kubernetes.
Establezca spec.template.spec.containers.name.env.name:WATCH_NAMESPACE en mongodb-kubernetes.yaml "*"como. Debe incluir las comillas dobles" () alrededor del asterisco* () en el archivo YAML.
WATCH_NAMESPACE: "*"
Ejecuta el siguiente comando:
helm upgrade \ --install \ mongodb-kubernetes-operator-multi-cluster \ mongodb/mongodb-kubernetes \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version>\ --set operator.name=mongodb-kubernetes-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={$MDB_CLUSTER_1_FULL_NAME,$MDB_CLUSTER_2_FULL_NAME,$MDB_CLUSTER_3_FULL_NAME}" \ --set operator.watchNamespace="*"
Plan de conectividad externa: ¿Debería utilizar una malla de servicios?
Una malla de servicios permite la comunicación entre clústeres entre los miembros del conjunto de réplicas implementados en diferentes clústeres de Kubernetes. Usar una malla de servicios simplifica enormemente la creación de implementaciones de MongoDB en varios clústeres de Kubernetes y es la forma recomendada de implementar MongoDB en varios clústeres de Kubernetes. Sin embargo, si su organización de TI no utiliza una malla de servicios, puede implementar un conjunto de réplicas en una implementación de MongoDB en varios clústeres de Kubernetes sin ella.
Dependiendo de su entorno, haga lo siguiente:
Si puede utilizar una malla de servicio, instale Istio.
Si no puede utilizar una malla de servicio:
¿Cómo establece el operador de Kubernetes la conectividad?
Independientemente del tipo de implementación, una implementación de MongoDB en Kubernetes debe establecer las siguientes conexiones:
Desde el agente MongoDB de Ops Manager en el pod hasta su proceso
mongod, para habilitar la administración y el monitoreo del ciclo de vida de la implementación de MongoDB.Desde el agente MongoDB de Ops Manager en el pod a la instancia de Ops Manager, para habilitar la automatización.
Entre todos los procesos
mongod, para permitir la replicación.
Cuando el operador de Kubernetes implementa los recursos de MongoDB, trata estos requisitos de conectividad de las siguientes maneras, según el tipo de implementación:
En una única implementación de clúster de Kubernetes, el operador de Kubernetes configura los nombres de host en el conjunto de réplicas como FQDNde un servicio sin interfaz gráfica. Este servicio único resuelve el DNS de una dirección IP directa de cada pod que aloja una instancia de MongoDB mediante el FQDN del pod, como se indica a
<pod-name>.<replica-set-name>-svc.<namespace>.svc.cluster.localcontinuación:.En una implementación de MongoDB con varios clústeres de Kubernetes que utiliza una malla de servicios, el operador de Kubernetes crea un StatefulSet independiente para cada miembro del conjunto de réplicas de MongoDB en el clúster de Kubernetes. Una malla de servicios permite la comunicación entre
mongodprocesos en distintos clústeres de Kubernetes.El uso de una malla de servicio permite que la implementación de MongoDB en múltiples clústeres Kubernetes:
Logre la resolución global de nombres de host DNS en todos los clústeres de Kubernetes y establezca la conectividad entre ellos. Para cada pod de implementación de MongoDB en cada clúster de Kubernetes, el operador de Kubernetes crea un servicio ClusterIP mediante la
spec.duplicateServiceObjects: trueconfiguración en elMongoDBMultiClusterrecurso. Cada proceso tiene un nombre de host definido para el FQDN de este<pod-name>-svc.<namespace>.svc.cluster.localservicio:. Estos nombres de host se resuelven desde DNS al ClusterIP de un servicio en cada clúster miembro.Establezca comunicación entre pods en diferentes clústeres de Kubernetes. Como resultado, los miembros del conjunto de réplicas alojados en diferentes clústeres forman un único conjunto de réplicas en todos ellos.
En una implementación de MongoDB con varios clústeres de Kubernetes sin una malla de servicios, el operador de Kubernetes utiliza la siguiente configuración de recursos
MongoDBMultiClusterpara exponer todos sus procesosmongodexternamente. Esto permite la resolución DNS de nombres de host entre distintos clústeres de Kubernetes y establece la conectividad entre los pods enrutados a través de las redes que conectan estos clústeres.
Opcional: Instalar Istio
Instale Istio en modo multiprincipal en diferentes redes, utilizando la documentación de Istio. Istio es una malla de servicios que simplifica la resolución de DNS y ayuda a establecer la comunicación entre clústeres de Kubernetes miembros en una implementación de MongoDB con varios clústeres de Kubernetes. Si decide usar una malla de servicios, debe instalarla. Si no puede usar una malla de servicios, omita esta sección y use dominios externos y configure DNS para habilitar la conectividad externa.
Además, ofrecemos el script de ejemplo install_istio_separate_network. Este script se basa en la documentación de Istio y proporciona un ejemplo de instalación que utiliza el modo multiprincipal en diferentes redes. No garantizamos el mantenimiento del script con futuras versiones de Istio. Si decide usar el script, revise la documentación más reciente de Istio para instalar un multiclúster y, si es necesario, ajústelo para que coincida con la documentación y su implementación. Si utiliza otra solución de malla de servicios, cree su propio script para configurar redes independientes y facilitar la resolución de DNS.
Habilitar la conectividad externa a través de dominios externos y zonas DNS
Si no utiliza una malla de servicio, haga lo siguiente para habilitar la conectividad externa hacia y entre los procesos mongod y el agente MongoDB de Ops Manager:
Al crear una implementación de MongoDB con varios clústeres de Kubernetes, utilice la configuración spec.clusterSpecList.externalAccess.externalDomain para especificar un dominio externo e indicar al operador de Kubernetes que configure nombres de host para
mongodprocesos en el siguiente patrón:<pod-name>.<externalDomain> Nota
Solo puedes especificar dominios externos para nuevas implementaciones. No puedes cambiarlos después de configurar una implementación de MongoDB en un clúster de varios Kubernetes.
Después de configurar un dominio externo de esta manera, los agentes MongoDB de Ops Manager y los procesos
mongodusan este dominio para conectarse entre sí.Personaliza los servicios externos que el operador de Kubernetes crea para cada pod en el clúster de Kubernetes. Utiliza la configuración global dentro de spec.externalAccess configuraciones y las anulaciones específicas del clúster de Kubernetes en spec.clusterSpecList.externalAccess.externalService configuraciones.
Configure los nombres de host de los pods en una zona DNS para garantizar que cada pod de Kubernetes que aloje un
mongodproceso permita establecer una conexión externa con los demásmongodprocesos en una implementación de MongoDB con varios clústeres de Kubernetes. Un pod se considera "expuesto externamente" cuando se puede conectar a unmongodproceso mediante el<pod-name>.<externalDomain>nombre de host en los puertos 27017 (este es el puerto predeterminado de la base de datos) y 27018 (este es el puerto de la base de datos 1 +). También podría ser necesario configurar reglas de firewall para permitir el tráfico TCP en 27017 los puertos 27018 y.
Después de completar estos requisitos previos, puede implementar un clúster de varios Kubernetes sin una malla de servicios.
Comprobar la conectividad entre clústeres
Siga los pasos de este procedimiento para verificar que los FQDNdel servicio sean accesibles en todos los clústeres de Kubernetes.
En este ejemplo, se implementa una aplicación de muestra definida en sample-service.yaml en dos clústeres de Kubernetes.
Crea un namespace en cada clúster.
Cree un espacio de nombres en cada uno de los clústeres de Kubernetes para implementar sample-service.yaml.
kubectl create --context="${CTX_CLUSTER_1}" namespace sample kubectl create --context="${CTX_CLUSTER_2}" namespace sample
Nota
En ciertas soluciones de malla de servicios, es posible que sea necesario anotar o etiquetar el espacio de nombres.
Verifique CLUSTER_1 que pueda conectarse CLUSTER_2 a.
Implemente el Pod en CLUSTER_1 y verifique que pueda acceder a la aplicación de muestra en CLUSTER_2.
kubectl run --context="${CTX_CLUSTER_1}" \ -n sample \ curl --image=radial/busyboxplus:curl \ -i --tty \ curl -sS helloworld2.sample:5000/hello
Debería ver un resultado similar a este ejemplo:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Verifique CLUSTER_2 que pueda conectarse CLUSTER_1 a.
Implemente el Pod en CLUSTER_2 y verifique que pueda acceder a la aplicación de muestra en CLUSTER_1.
kubectl run --context="${CTX_CLUSTER_2}" \ -n sample \ curl --image=radial/busyboxplus:curl \ -i --tty \ curl -sS helloworld1.sample:5000/hello
Debería ver un resultado similar a este ejemplo:
Hello version: v1, instance: helloworld-v1-758dd55874-6x4t8
Revise los requisitos para implementar Ops Manager
Como parte del inicio rápido, implementa un recurso de Ops Manager en el clúster central.
Prepárese para conexiones cifradas con TLS
Si planea proteger su implementación de MongoDB en varios clústeres de Kubernetes mediante cifrado TLS, complete las siguientes tareas para habilitar la autenticación interna del clúster y generar certificados TLS para los clústeres miembro y el Agente MongoDB:
Nota
Debe poseer el certificado CA y la clave que utilizó para firmar sus certificados TLS.
Genere un certificado TLS para los servicios de Kubernetes.
Utilice una de las siguientes opciones:
Genere un certificado TLS comodín que cubra los nombres de host de los servicios que el operador de Kubernetes crea para cada pod en la implementación.
Si generas certificados wildcard, puedes seguir usando los mismos certificados cuando aumentes el tamaño o rebalancees nodos en los clústeres miembros de Kubernetes, por ejemplo para recuperación ante desastres.
Por ejemplo, agregue un nombre de host similar al siguiente formato a la SAN:
*.<namespace>.svc.cluster.local Para cada servicio de Kubernetes que el operador de Kubernetes genere, correspondiente a cada pod de cada clúster miembro, agregue SANal certificado. En su certificado TLS, la SAN de cada servicio de Kubernetes debe usar el siguiente formato:
<metadata.name>-<member_cluster_index>-<n>-svc.<namespace>.svc.cluster.local donde
nvaría de0aclusterSpecList[member_cluster_index].members - 1.
Genere un certificado TLS para los agentes MongoDB de su proyecto.
Para el certificado TLS del MongoDB Agent:
El Nombre Común en el certificado TLS no debe estar vacío.
La organización y la unidad organizativa combinadas en cada certificado TLS deben ser diferentes de la organización y la unidad organizativa en el certificado TLS de los miembros de su conjunto de réplicas.
Para agilizar la creación de certificados TLS para los clústeres miembros de Kubernetes, ofrecemos el script setup_tls. No garantizamos su mantenimiento. Si decide usarlo, pruébelo y ajústelo a sus necesidades. El script hace lo siguiente:
Crea el
cert-managerespacio de nombres en el clúster conectado e instala cert-manager usando Helm en elcert-managerespacio de nombres.Instala una CA local usando mkcert.
Descarga certificados TLS de
downloads.mongodb.comy los concatena con el nombre del archivo CAca-chainy.Crea un ConfigMap que incluye los archivos
ca-chain.Crea un recurso
Issuer, que cert-manager utiliza para generar certificados.Crea un recurso
Certificate, que cert-manager utiliza para crear un objeto clave para los certificados.
Para utilizar el script:
mkcertInstalar.
Instale mkcert en la máquina donde planea ejecutar este script.
Ejecute el setup_tls script.
curl https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/scripts/release/kubectl-mongodb/setup_tls.sh -o setup_tls.sh
La salida incluye:
Un secreto que contiene la CA
ca-key-pairdenominada.Un secreto que contiene los certificados del servidor en el n central
clustercert-${resource}-cert.Un ConfigMap que contiene los certificados CA
issuer-cadenominados.
Genere un certificado TLS para los agentes MongoDB de su proyecto.
Para el certificado TLS del MongoDB Agent:
El Nombre Común en el certificado TLS no debe estar vacío.
La organización y la unidad organizativa combinadas en cada certificado TLS deben ser diferentes de la organización y la unidad organizativa en el certificado TLS de los miembros de su conjunto de réplicas.
Genere un certificado TLS para nombres de host SAN.
Utilice una de las siguientes opciones:
Genere un certificado TLS comodín que contenga todos los dominios externos creados en la SAN. Por ejemplo, agregue los nombres de host con un formato similar al siguiente a la SAN:
*.cluster-0.example.com, *.cluster-1.example.com Si genera certificados comodín, puede seguir usándolos cuando escale o reequilibre los nodos en los clústeres miembros de Kubernetes, por ejemplo, para la recuperación ante desastres.
Genere un certificado TLS para cada nombre de host de miembro del conjunto de réplicas de MongoDB en la SAN. Por ejemplo, agregue nombres de host similares a los siguientes a la SAN:
my-replica-set-0-0.cluster-0.example.com, my-replica-set-0-1.cluster-0.example.com, my-replica-set-1-0.cluster-1.example.com, my-replica-set-1-1.cluster-1.example.com Si genera un certificado TLS individual que contiene todos los nombres de host específicos, debe crear un nuevo certificado cada vez que amplíe o reequilibre los nodos en los clústeres miembros de Kubernetes, por ejemplo, para la recuperación ante desastres.
Genere un certificado TLS para los agentes MongoDB de su proyecto.
Para el certificado TLS del MongoDB Agent:
El Nombre Común en el certificado TLS no debe estar vacío.
La organización y la unidad organizativa combinadas en cada certificado TLS deben ser diferentes de la organización y la unidad organizativa en el certificado TLS de los miembros de su conjunto de réplicas.
Importante
El operador de Kubernetes utiliza kubernetes.io/tls secretos para almacenar TLS certificados y llaves privadas para Ops Manager y recursos de MongoDB. A partir de la versión 1.17.0 del operador de Kubernetes, el operador de Kubernetes no admite archivos PEM concatenados almacenados como secretos opacos.
Elija GitOps o el plugin kubectl de MongoDB
Puede elegir crear y mantener los archivos de recursos necesarios para la implementación de recursos MongoDBMultiCluster en un entorno de GitOps.
Si usa un flujo de trabajo de GitOps, no puede usar el complemento kubectl de mongodb, que configura automáticamente el control de acceso basado en roles (RBAC) y crea el archivo kubeconfig que permite que el clúster de operadores se comunique con sus clústeres miembros. En su lugar, debe configurar manualmente o crear su propia automatización para configurar el RBAC y los kubeconfig archivos según el procedimiento y los ejemplos de Configurar recursos para GitOps.
Las siguientes secciones de requisitos previos describen cómo instalar el complemento MongoDB de kubectl si no usa GitOps o configurar recursos para GitOps si lo hace.
Instala el plugin MongoDB kubectl
Utilice el complemento kubectl mongodb para:
Nota
Si usa GitOps, no puede usar el kubectl mongodb complemento. En su lugar, siga el procedimiento descrito en Configurar recursos para GitOps.
Para instalar el complemento kubectl mongodb:
Descargue la versión del paquete Kubernetes Operator que desee.
Descargue la versión del paquete Kubernetes Operator que desee desde la página de lanzamiento del repositorio de controladores MongoDB para operadores de Kubernetes.
El nombre del paquete utiliza este patrón: kubectl-mongodb_{{ .Version }}_{{ .Os }}_{{ .Arch }}.tar.gz.
Utilice uno de los siguientes paquetes:
kubectl-mongodb_{{ .Version }}_darwin_amd64.tar.gzkubectl-mongodb_{{ .Version }}_darwin_arm64.tar.gzkubectl-mongodb_{{ .Version }}_linux_amd64.tar.gzkubectl-mongodb_{{ .Version }}_linux_arm64.tar.gz
Localice el kubectl mongodb binario del complemento y cópielo en su destino deseado.
Busque el binario kubectl-mongodb en el directorio descomprimido y muévalo a su destino deseado, dentro de PATH para el usuario Operador de Kubernetes, como se muestra en el siguiente ejemplo:
mv kubectl-mongodb /usr/local/bin/kubectl-mongodb
Ahora puedes ejecutar el complemento kubectl mongodb usando los siguientes comandos:
kubectl mongodb multicluster setup kubectl mongodb multicluster recover
Para obtener más información sobre los indicadores admitidos, consulte la Referencia del complemento kubectl de MongoDB.
Configurar recursos para GitOps
Si usa un flujo de trabajo de GitOps, no podrá usar el complemento kubectl de MongoDB para configurar automáticamente el control de acceso basado en roles (RBAC) ni el archivo kubeconfig que permite que el clúster de operadores se comunique con sus clústeres miembros. En su lugar, deberá configurar y aplicar manualmente los siguientes archivos de recursos o crear su propia automatización basándose en la información a continuación.
Nota
Para saber cómo el kubectl mongodb complemento automatiza los siguientes pasos, vea el código en GitHub.
Para configurar RBAC y el kubeconfig para GitOps:
Crear y aplicar recursos RBAC a cada clúster.
Utiliza estos ejemplos de recursos de RBAC para crear los tuyos propios. Para obtener más información sobre estos recursos RBAC, consulta Comprende los Roles y Vínculos de Roles de Kubernetes.
Para aplicarlos a sus clústeres centrales y miembros con GitOps, puede utilizar una herramienta como Argo CD.
Cree y aplique el archivo ConfigMap.
El operador de Kubernetes realiza un seguimiento de sus clústeres miembros mediante un archivo ConfigMap. Copie, modifique y aplique el siguiente ConfigMap de ejemplo:
apiVersion: v1 kind: ConfigMap data: cluster1: "" cluster2: "" metadata: namespace: <namespace> name: mongodb-kubernetes-operator-member-list labels: multi-cluster: "true"
Configure el kubeconfig secreto para el operador de Kubernetes.
El operador de Kubernetes, que se ejecuta en el clúster de operadores, se comunica con los pods de los clústeres miembros a través de la API de Kubernetes. Para que esto funcione, el operador de Kubernetes necesita un archivo kubeconfig que contenga los tokens de las cuentas de servicio de los clústeres miembros. Cree este kubeconfig archivo siguiendo estos pasos:
Obtenga una lista de las cuentas de servicio configuradas en el espacio de nombres del operador de Kubernetes. Por ejemplo, si eligió usar el espacio de
mongodbnombres predeterminado, puede obtener las cuentas de servicio con el siguiente comando:kubectl get serviceaccounts -n mongodb Obtenga el secreto de cada cuenta de servicio que pertenece a un clúster miembro.
kubectl get secret <service-account-name> -n mongodb -o yaml En cada secreto de cuenta de servicio, copie el certificado y el token de la CA. Por ejemplo, copie
<ca_certificate>y<token>del secreto, como se muestra en el siguiente ejemplo:apiVersion: v1 kind: Secret metadata: name: my-service-account namespace: mongodb data: ca.crt: <ca_certificate> token: <token> Copie el siguiente ejemplo
kubeconfigpara el clúster de operadores y reemplace los marcadores de posición con<ca_certificate>y<token>que copió de los secretos de la cuenta de servicio ejecutando los comandos que se enumeran a continuación.apiVersion: v1 clusters: - cluster: certificate-authority: server: https:// name: kind-e2e-cluster-1 - cluster: certificate-authority: server: https:// name: kind-e2e-cluster-2 contexts: - context: cluster: kind-e2e-cluster-1 namespace: mongodb user: kind-e2e-cluster-1 name: kind-e2e-cluster-1 - context: cluster: kind-e2e-cluster-2 namespace: mongodb user: kind-e2e-cluster-2 name: kind-e2e-cluster-2 kind: Config users: - name: kind-e2e-cluster-1 user: token: - name: kind-e2e-cluster-2 user: token: Complete los siguientes comandos
kubectlcon los valores correctos y ejecútelos para actualizar su archivo de ejemplokubeconfig.kubectl config --kubeconfig=kubeconfig set-cluster kind-e2e-cluster-1 --certificate-authority=<cluster-1-ca.crt> kubectl config --kubeconfig=kubeconfig set-cluster kind-e2e-cluster-2 --certificate-authority=<cluster-2-ca.crt> kubectl config --kubeconfig=kubeconfig set-credentials kind-e2e-cluster-1 --token=<cluster-1-token> kubectl config --kubeconfig=kubeconfig set-credentials kind-e2e-cluster-2 --token=<cluster-2-token> Cree un secreto en el clúster de operadores que monte en el operador de Kubernetes, como se ilustra en el diagrama de Helm de referencia. Por ejemplo:
kubectl --context="${CTX_CENTRAL_CLUSTER}" -n <operator-namespace> create secret --from-file=kubeconfig=<path-to-kubeconfig-file> <kubeconfig-secret-name>