|
| 1 | +:_mod-docs-content-type: PROCEDURE |
| 2 | +[id='configuring-ldap-with-domain-specific-drivers_{context}'] |
| 3 | += Configuring LDAP with domain-specific drivers |
| 4 | +```suggestion |
| 5 | +If you need to integrate the {identity_service_first_ref} with one or more LDAP servers using domain-specific configurations, you can enable domain-specific drivers and provide the necessary LDAP settings. |
| 6 | + |
| 7 | +This involves two main steps: |
| 8 | +1. Creating the Kubernetes secret that holds the domain-specific LDAP configuration files that {identity_service} uses. Each file within the secret corresponds to an LDAP domain. |
| 9 | +2. Patching the `OpenStackControlPlane` custom resource (CR) to enable domain-specific drivers for the {identity_service} and mount a secret that contains the LDAP configurations. |
| 10 | + |
| 11 | + |
| 12 | +.Procedure |
| 13 | + |
| 14 | +. To create the `keystone-domains` secret that stores the actual LDAP configuration files that {identity_service} uses, create a local file that includes your LDAP configuration, for example, `keystone.conf.ldap.myldapdomain`: |
| 15 | + |
| 16 | +The following example file includes the configuration for a single LDAP domain. If you have multiple LDAP domains, create a configuration file for each, for example, `keystone.DOMAIN_ONE.conf`, `keystone.DOMAIN_TWO.conf`. |
| 17 | ++ |
| 18 | +[source,ini] |
| 19 | +---- |
| 20 | +[ldap] |
| 21 | +url = ldap://<ldap_server_host>:<ldap_server_port> |
| 22 | +user = <bind_dn_user> |
| 23 | +password = <bind_dn_password> |
| 24 | +suffix = <user_tree_dn> |
| 25 | +query_scope = sub |
| 26 | +# User configuration |
| 27 | +user_tree_dn = <user_tree_dn> |
| 28 | +user_objectclass = <user_object_class> |
| 29 | +user_id_attribute = <user_id_attribute> |
| 30 | +user_name_attribute = <user_name_attribute> |
| 31 | +user_mail_attribute = <user_mail_attribute> |
| 32 | +user_enabled_attribute = <user_enabled_attribute> |
| 33 | +user_enabled_default = true |
| 34 | +# Group configuration |
| 35 | +group_tree_dn = <group_tree_dn> |
| 36 | +group_objectclass = <group_object_class> |
| 37 | +group_id_attribute = <group_id_attribute> |
| 38 | +group_name_attribute = <group_name_attribute> |
| 39 | +group_member_attribute = <group_member_attribute> |
| 40 | +group_members_are_ids = true |
| 41 | +---- |
| 42 | ++ |
| 43 | +* Replace the values, such as `<ldap_server_host>`, `<bind_dn_user>`, `<user_tree_dn>`, and so on, with your LDAP server details. |
| 44 | +
|
| 45 | +. Create the secret from this file: |
| 46 | ++ |
| 47 | +---- |
| 48 | +$ oc create secret generic keystone-domains \ |
| 49 | + -n <namespace> \ |
| 50 | + --from-file=<keystone.DOMAIN_NAME.conf> |
| 51 | +---- |
| 52 | ++ |
| 53 | +* Replace `<namespace>` with the namespace where your {identity_service} is deployed. |
| 54 | +* Replace `<keystone.DOMAIN_NAME.conf>` with the name of your local configuration file. If applicable, include additional configuration files by using the `--from-file` option. After creating the secret, you can remove the local configuration file if it is no longer needed, or store it securely. |
| 55 | ++ |
| 56 | +[IMPORTANT] |
| 57 | +The name of the file that you provide to `--from-file`, for example `keystone.DOMAIN_NAME.conf`, is critical. The {identity_service} uses this filename to map incoming authentication requests for a domain to the correct LDAP configuration. Ensure that `DOMAIN_NAME` matches the name of the domain you are configuring in the {identity_service}. |
| 58 | +
|
| 59 | +. Patch the `OpenStackControlPlane` CR: |
| 60 | ++ |
| 61 | +---- |
| 62 | +$ oc patch openstackcontrolplane <cr_name> \ |
| 63 | + -n <namespace> \ |
| 64 | + --type=merge \ |
| 65 | + -p ' |
| 66 | +spec: |
| 67 | + keystone: |
| 68 | + template: |
| 69 | + customServiceConfig: | |
| 70 | + [identity] |
| 71 | + domain_specific_drivers_enabled = true |
| 72 | + extraMounts: |
| 73 | + - name: v1 |
| 74 | + region: r1 |
| 75 | + extraVol: |
| 76 | + - propagation: |
| 77 | + - Keystone |
| 78 | + extraVolType: Conf |
| 79 | + volumes: |
| 80 | + - name: keystone-domains |
| 81 | + secret: |
| 82 | + secretName: keystone-domains |
| 83 | + mounts: |
| 84 | + - name: keystone-domains |
| 85 | + mountPath: "/etc/keystone/domains" |
| 86 | + readOnly: true |
| 87 | +---- |
| 88 | ++ |
| 89 | +* Replace `<cr_name>` with the name of your `OpenStackControlPlane` CR (for example, `openstack`) and `<namespace>` with the namespace where it is deployed (for example, `openstack`). |
| 90 | +* This patch does the following: |
| 91 | +** Sets `spec.keystone.template.customServiceConfig`. Ensure that you do not overwrite any previously defined value. |
| 92 | +** Defines `spec.keystone.template.extraMounts` to mount a secret named `keystone-domains` into the {identity_service} pods at `/etc/keystone/domains`. This secret contains your LDAP configuration files. |
| 93 | ++ |
| 94 | +[NOTE] |
| 95 | +You might need to wait a few minutes for the changes to propagate and for the {identity_service} pods to be updated. |
0 commit comments