You can use Helm or kubectl
to enable X.509 authentication for the
MongoDB Agent and client.
-
Add the
cert-manager
repository to yourhelm
repository list and ensure it's up to date:helm repo add jetstack https://charts.jetstack.io helm repo update
-
Install
cert-manager
:helm install cert-manager jetstack/cert-manager --namespace cert-manager \ --create-namespace --set installCRDs=true
You can use Helm to install and deploy the MongoDB Community Kubernetes Operator with X.509 Authentication enabled for the MongoDB Agent and client. To learn more, see Install the Operator using Helm.
-
To deploy the MongoDB Community Kubernetes Operator, copy and paste the following command and replace the
<namespace>
variable with the namespace:Note:
The following command deploys a sample resource with X.509 enabled for both the MongoDB Agent and client authentication. It also creates a sample X.509 user and the certificate that the user can use to authenticate.
helm upgrade --install community-operator mongodb/community-operator \ --namespace <namespace> --set namespace=<namespace> --create-namespace \ --set resource.tls.useCertManager=true --set resource.tls.enabled=true \ --set resource.tls.useX509=true --set resource.tls.sampleX509User=true \ --set createResource=true
You can use Helm to install and deploy the MongoDB Community Kubernetes Operator with X.509 Authentication enabled for the MongoDB Agent and client.
-
To install the MongoDB Community Kubernetes Operator, see Install the Operator using kubectl.
-
To create a CA, ConfigMap, secrets, issuer, and certificate, see Enable External Access to a MongoDB Deployment.
-
Create a YAML file for the MongoDB Agent certificate. For an example, see agent-certificate.yaml.
Note:
- For the
spec.issuerRef.name
parameter, specify thecert-manager
issuer that you created previously. - For the
spec.secretName
parameter, specify the same value as thespec.security.authentication.agentCertificateSecretRef
parameter in your resource. This secret should contain a signed X.509 certificate and a private key for the MongoDB agent.
- For the
-
To apply the file, copy and paste the following command and replace the
<agent-certificate>
variable with the name of your MongoDB Agent certificate and the<namespace>
variable with the namespace:kubectl apply -f <agent-certificate>.yaml --namespace <namespace>
-
Create a YAML file for your resource. For an example, see mongodb.com_v1_mongodbcommunity_x509.yaml.
Note:
-
For the
spec.security.tls.certificateKeySecretRef.name
parameter, specify a reference to the secret that contains the private key and certificate to use for TLS. The operator expects the PEM encoded key and certificate available at "tls.key" and "tls.crt". Use the same format used for the standard "kubernetes.io/tls" Secret type, but no specific type is required. Alternatively, you can provide an entry called "tls.pem" that contains the concatenation of the certificate and key. If all of "tls.pem", "tls.crt" and "tls.key" are present, the "tls.pem" entry needs to equal the concatenation of "tls.crt" and "tls.key". -
For the
spec.security.tls.caConfigMapRef.name
parameter, specify the ConfigMap that you created previously. -
For the
spec.authentication.modes
parameter, specifyX509
. -
If you have multiple authentication modes, specify the
spec.authentication.agentMode
parameter. -
The
spec.authentication.agentCertificateSecretRef
parameter defaults toagent-certs
. -
For the
spec.users.db
parameter, specify$external
. -
Do not set the
spec.users.scramCredentialsSecretName
parameter and thespec.users.passwordSecretRef
parameters.
-
-
To apply the file, copy and paste the following command and replace the
<replica-set>
variable with your resource and the<namespace>
variable with the namespace:kubectl apply -f <replica-set>.yaml --namespace <namespace>
-
Create a YAML file for the client certificate. For an example, see cert-x509.yaml.
-
To apply the file, copy and paste the following command and replace the
<client-certificate>
variable with the name of your client certificate and the<namespace>
variable with the namespace:kubectl apply -f <client-certificate>.yaml --namespace <namespace>