mirror of https://github.com/dexidp/dex.git
1 changed files with 129 additions and 0 deletions
@ -0,0 +1,129 @@
|
||||
# Integration kubelogin and Active Directory |
||||
|
||||
## Overview |
||||
|
||||
kubelogin is helper tool for kubernetes and oidc integration. |
||||
It makes easy to login Open ID Provider. |
||||
This document describes how dex work with kubelogin and Active Directory. |
||||
|
||||
examples/config-ad-kubelogin.yaml is sample configuration to integrate Active Directory and kubelogin. |
||||
|
||||
## Precondition |
||||
|
||||
1. Active Directory |
||||
You should have Active Directory or LDAP has Active Directory compatible schema such as samba ad. |
||||
You may have user objects and group objects in AD. Please ensure TLS is enabled. |
||||
|
||||
2. Install kubelogin |
||||
Download kubelogin from https://github.com/int128/kubelogin/releases. |
||||
Install it to your terminal. |
||||
|
||||
## Getting started |
||||
|
||||
### Generate certificate and private key |
||||
|
||||
Create OpenSSL conf req.conf as follow: |
||||
|
||||
``` |
||||
[req] |
||||
req_extensions = v3_req |
||||
distinguished_name = req_distinguished_name |
||||
|
||||
[req_distinguished_name] |
||||
|
||||
[ v3_req ] |
||||
basicConstraints = CA:FALSE |
||||
keyUsage = nonRepudiation, digitalSignature, keyEncipherment |
||||
subjectAltName = @alt_names |
||||
|
||||
[alt_names] |
||||
DNS.1 = dex.example.com |
||||
``` |
||||
|
||||
Please replace dex.example.com to your favorit hostname. |
||||
Generate certificate and private key by following command. |
||||
|
||||
``` |
||||
$ openssl req -new -x509 -sha256 -days 3650 -newkey rsa:4096 -extensions v3_req -out openid-ca.pem -keyout openid-key.pem -config req.cnf -subj "/CN=kube-ca" -nodes |
||||
$ ls openid* |
||||
openid-ca.pem openid-key.pem |
||||
``` |
||||
|
||||
### Modify dex config |
||||
|
||||
Modify following host, bindDN and bindPW in examples/config-ad-kubelogin.yaml. |
||||
|
||||
``` |
||||
connectors: |
||||
- type: ldap |
||||
name: OpenLDAP |
||||
id: ldap |
||||
config: |
||||
host: ldap.example.com:636 |
||||
|
||||
# No TLS for this setup. |
||||
insecureNoSSL: false |
||||
insecureSkipVerify: true |
||||
|
||||
# This would normally be a read-only user. |
||||
bindDN: cn=Administrator,cn=users,dc=example,dc=com |
||||
bindPW: admin0! |
||||
``` |
||||
|
||||
### Run dex |
||||
|
||||
``` |
||||
$ bin/dex serve examples/config-ad-kubelogin.yaml |
||||
``` |
||||
|
||||
### Configure kubernetes with oidc |
||||
|
||||
Copy openid-ca.pem to /etc/ssl/certs/openid-ca.pem on master node. |
||||
|
||||
Use the following flags to point your API server(s) at dex. `dex.example.com` should be replaced by whatever DNS name or IP address dex is running under. |
||||
|
||||
``` |
||||
--oidc-issuer-url=https://dex.example.com:32000/dex |
||||
--oidc-client-id=kubernetes |
||||
--oidc-ca-file=/etc/ssl/certs/openid-ca.pem |
||||
--oidc-username-claim=email |
||||
--oidc-groups-claim=groups |
||||
``` |
||||
|
||||
Then restart API server(s). |
||||
|
||||
|
||||
See https://kubernetes.io/docs/reference/access-authn-authz/authentication/ for more detail. |
||||
|
||||
### kubelogin |
||||
|
||||
Create context for dex authentication: |
||||
|
||||
``` |
||||
$ kubectl config set-context oidc-ctx --cluster=cluster.local --user=test |
||||
$ kubectl config set-credentials test |
||||
--auth-provider=oidc \ |
||||
--auth-provider-arg=idp-issuer-url=https://dex.example.com:32000/dex \ |
||||
--auth-provider-arg=client-id=kubernetes \ |
||||
--auth-provider-arg=client-secret=ZXhhbXBsZS1hcHAtc2VjcmV0 \ |
||||
--auth-provider-arg=idp-certificate-authority-data=$(base64 -w 0 openid-ca.pem) \ |
||||
"--auth-provider-arg=extra-scopes=offline_access openid profile email group" |
||||
$ kubectl config use-context oidc-ctx |
||||
``` |
||||
|
||||
Please confirm idp-issuer-url, cleint-id, client-secret and idp-certificate-authority-data value is same as config-ad-kubelogin.yaml's value. |
||||
|
||||
Then run kubelogin: |
||||
|
||||
``` |
||||
$ kubelogin |
||||
``` |
||||
|
||||
Access http://localhost:8000 by web browser and login with your AD account(eg. test@example.com) and password. |
||||
After login and grant, you have following token in ~/.kube/config: |
||||
|
||||
``` |
||||
id-token: eyJhbGciOiJSUzICuU4dCcilDDWlw2lfr8mg... |
||||
refresh-token: ChlxY2EzeGhKEB4492EzecdKJOElECK... |
||||
``` |
||||
|
||||
Loading…
Reference in new issue