Added documentation for LDAP (#658)
* Added documentation for LDAP Related to #133 Inspired by https://github.com/jenkinsci/kubernetes-operator/issues/133#issuecomment-555976832
This commit is contained in:
parent
14b0018a7f
commit
b4345b2905
|
|
@ -0,0 +1,128 @@
|
||||||
|
---
|
||||||
|
title: "LDAP"
|
||||||
|
linkTitle: "LDAP"
|
||||||
|
weight: 9
|
||||||
|
date: 2021-09-30
|
||||||
|
description: >
|
||||||
|
Additional configuration for LDAP
|
||||||
|
---
|
||||||
|
|
||||||
|
Configuring LDAP is not supported out of the box, but can be achieved through
|
||||||
|
plugins and some well tuned configurations.
|
||||||
|
|
||||||
|
The plugin we will use is: <https://plugins.jenkins.io/ldap/>
|
||||||
|
|
||||||
|
> Note: This is an example of how LDAP authentication can be achieved. The LDAP
|
||||||
|
> plugin is from a third-party, and there may be other alternatives that suits
|
||||||
|
> your use case better. Use this guide with a grain of salt.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- LDAP server accessible from the Kubernetes cluster where your Jenkins
|
||||||
|
instance will live.
|
||||||
|
|
||||||
|
- Credentials to a manager account in your AD. Jenkins Operator will use
|
||||||
|
this account to authenticate with Jenkins for health checks, seed jobs, etc.
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
In your Jenkins configuration, add the following plugin:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
plugins:
|
||||||
|
# Check https://plugins.jenkins.io/ldap/ to find the latest version.
|
||||||
|
- name: ldap
|
||||||
|
version: "2.7"
|
||||||
|
```
|
||||||
|
|
||||||
|
Easiest step is to then start up Jenkins then navigate to your instance's
|
||||||
|
"Configure Global Security" page and configure it accordingly.
|
||||||
|
|
||||||
|
`http://jenkins.example.com/configureSecurity/`
|
||||||
|
|
||||||
|
Once it's set up and tested, you can navigate to your JCasC page and export
|
||||||
|
the LDAP settings.
|
||||||
|
|
||||||
|
`https://jenkins.example.com/configuration-as-code/`
|
||||||
|
|
||||||
|
Feed the relevant new settings into your Kubernetes ConfigMap for your JCasC
|
||||||
|
settings.
|
||||||
|
|
||||||
|
Here's a snippet of the LDAP-related configurations:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: jenkins-casc
|
||||||
|
data:
|
||||||
|
ldap.yaml: |
|
||||||
|
jenkins:
|
||||||
|
securityRealm:
|
||||||
|
ldap:
|
||||||
|
configurations:
|
||||||
|
- displayNameAttributeName: "name"
|
||||||
|
groupSearchBase: "OU=Groups,OU=MyCompany"
|
||||||
|
groupSearchFilter: "(& (cn={0}) (objectclass=group) )"
|
||||||
|
inhibitInferRootDN: false
|
||||||
|
managerDN: "CN=Jenkins Admin,OU=UsersSystem,OU=UsersOther,OU=MyCompany,DC=mycompany,DC=local"
|
||||||
|
managerPasswordSecret: "${LDAP_MANAGER_PASSWORD}"
|
||||||
|
rootDN: "DC=mycompany,DC=local"
|
||||||
|
server: "MyCompany.local"
|
||||||
|
userSearch: "SamAccountName={0}"
|
||||||
|
userSearchBase: "OU=MyCompany"
|
||||||
|
disableMailAddressResolver: false
|
||||||
|
disableRolePrefixing: true
|
||||||
|
groupIdStrategy: "caseInsensitive"
|
||||||
|
userIdStrategy: "caseInsensitive"
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note the use of `${LDAP_MANAGER_PASSWORD}` above. You can reference
|
||||||
|
> Kubernetes secrets in your JCasC ConfigMaps by adding the following to your
|
||||||
|
> Jenkins object:
|
||||||
|
>
|
||||||
|
> ```yaml
|
||||||
|
> kind: Jenkins
|
||||||
|
> spec:
|
||||||
|
> configurationAsCode:
|
||||||
|
> configurations:
|
||||||
|
> - name: jenkins-casc
|
||||||
|
> secret:
|
||||||
|
> # This here
|
||||||
|
> name: jenkins-casc-secrets
|
||||||
|
> ```
|
||||||
|
>
|
||||||
|
> ```yaml
|
||||||
|
> apiVersion: v1
|
||||||
|
> kind: Secret
|
||||||
|
> metadata:
|
||||||
|
> name: jenkins-cred-conf-secrets
|
||||||
|
> stringData:
|
||||||
|
> LDAP_MANAGER_PASSWORD: <password-for-manager-created-in-ldap>
|
||||||
|
> ```
|
||||||
|
>
|
||||||
|
> Schema reference: [v1alpha2.ConfigurationAsCode](./schema/#github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2.ConfigurationAsCode)
|
||||||
|
|
||||||
|
Finally you must configure the Jenkins operator to use the manager's
|
||||||
|
credentials from the AD.
|
||||||
|
|
||||||
|
This is because this procedure will disable Jenkins' own user database, and the
|
||||||
|
Jenkins operator still needs to be able to talk to Jenkins in an authorized
|
||||||
|
manner.
|
||||||
|
|
||||||
|
Create the following Kubernetes secret:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: jenkins-operator-credentials-<jenkins-cr-name>
|
||||||
|
namespace: <jenkins-cr-namespace>
|
||||||
|
stringData:
|
||||||
|
user: <username-for-manager-created-in-ldap>
|
||||||
|
password: <password-for-manager-created-in-ldap>
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: Values in stringData do not need to be base64 encoded. They are
|
||||||
|
> encoded by Kubernetes when the manifest is applied.
|
||||||
|
|
||||||
Loading…
Reference in New Issue