티스토리 뷰
LDAP서버를 설치하는 방법은 docker로 설치하는 방법과 k8s Pod로 설치하는 방법이 있습니다.
빠르게 설치하려면 docker로 설치하십시오.
실제 업무에 적용할때는 Pod로 설치하여 이중화하는것이 좋습니다.
docker로 설치
1) LDAP서버, LDAP Client 설치
$ docker run -d -e DOMAIN={LDAP host} -e PASSWORD={admin password} --name={container name} -p 389:389 -p 9580:9580 -v /var/lib/ldap/data:/var/ldap -v /var/lib/ldap/conf:/etc/ldap/slapd.d siji/openldap:2.4.42
아래는 LDAP주소를 myldap.io로 설치하는 예제입니다.
[root@osboxes ~]# docker run -d -e DOMAIN=myldap.io -e PASSWORD=happy@cloud --name=myldap -p 389:389 -p 9580:9580 -v /var/lib/ldap/data:/var/ldap -v /var/lib/ldap/conf:/etc/ldap/slapd.d siji/openldap:2.4.42
Unable to find image 'siji/openldap:2.4.42' locally
2.4.42: Pulling from siji/openldap
ae79f2514705: Pull complete
5ad56d5fc149: Pull complete
170e558760e8: Pull complete
395460e233f5: Pull complete
6f01dc62e444: Pull complete
787cff8b2458: Pull complete
bf2ada941824: Pull complete
Digest: sha256:615c4822c31e9b752a92798501406f25ecb66d5006bc66770c8d60791e6dc680
Status: Downloaded newer image for siji/openldap:2.4.42
d5921029902f8461803a44a9a85e7b20eaa57000eeff3f54b4a47700971bae36
- DOMAIN, PASSWORD는 적절히 변경
2) LDAP 도메인 등록
DNS서버에 LDAP host를 등록합니다. 없으면 LDAP을 이용하는 모든 VM과 Host PC의 hosts파일에 등록합니다.
3) /var/lib/ldap 소유권 변경
root로 설치시에는 하지 않아도 됩니다.
user계정으로 설치시에는 /var/lib/ldap 디렉토리의 소유권을 변경해 줘야 합니다.
안 하면 ldap 로그인 후 좌측 아래에 아래와 같은 에러 메시지가 뜹니다.
'This base cannot be created with PLA'
만약 pocuser로 설치하였다면 아래와 같이 변경하시면 됩니다.
[pocuser@bastion]$ sudo chown -R pocuser:pocuser /var/lib/ldap
4) 설치 확인
웹 브라우저에서 http://{LDAP host}:9580/phpldapadmin 페이지를 접근합니다.
Login DN(Distinguished Name)은 cn=admin,dc={1st LDAP host part},dc={2nd LDAP host part},....입니다.
예를 들어 myldap.ibm.com이 LDAP host이면, cn=admin,dc=myldap,dc=ibm,dc=com이 됩니다.
암호는 설치 시 지정한 환경변수 'PASSWORD'값입니다. 이 예제에서는 happy@cloud입니다.
위 설치 예제에서는 아래와 같이 로그인하면 됩니다.
DN : cn=admin,dc=myldap,dc=io
password: happy@cloud
pod로 설치
사전준비
1) helm client 설치: https://happycloud-lee.tistory.com/3?category=832245
2) namespace생성과 기본 Service Accont에 anyuid 권한부여
- vanilla k8s
$ kubectl create ns ldap
$ kubectl create clusterrolebinding crb_ldap_default --clusterrole=cluster-admin --serviceaccount=ldap:default
- OCP
$ oc new-project ldap
$ oc adm policy add-scc-to-user anyuid -z default
ldap서버 설치
1) 작업 디렉토리를 만듭니다.
$ mkdir -p ~/install/ldap
$ cd ~/install/ldap
2) helm registry를 추가합니다.
2020.11월 경부터 helm 3.0을 지원하는 새 registry를 사용해야 합니다.
$helm repo add stable https://charts.helm.sh/stable
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com
3) 설치 환경 설정을 합니다.
$ helm repo update
$ helm inspect values stable/openldap > values-openldap
$ vi values-openldap
DOMAIN과 admin암호, storageClass를 적절히 바꾸십시오.
persistence.enabled는 'true'로 변경하십시오.
storage class는 kubectl get sc로 확인합니다.
사전에 k8s에 NFS 서버설치와 dynamic provisioning설정이 되어 있어야 합니다.
# Default configuration for openldap as environment variables. These get injected directly in the container.
# Use the env variables from https://github.com/osixia/docker-openldap#beginner-guide
env:
...
LDAP_DOMAIN: "myldap.io"
...
# Default Passwords to use, stored as a secret. If unset, passwords are auto-generated.
# You can override these at install time with
# helm install openldap --set openldap.adminPassword=<passwd>,openldap.configPassword=<passwd>
adminPassword: "happy@cloud"
...
## Persist data to a persistent volume
persistence:
enabled: true
...
storageClass: "nfs-standard"
...
4) LDAP서버를 설치합니다.
$ helm install ldap -f values-openldap stable/openldap -n ldap
phpldapadmin 설치
$ helm repo add cetic https://cetic.github.io/helm-charts
$ helm repo update
$ helm inspect values cetic/phpldapadmin > values-phpldapadmin
$ vi values-phpldapadmin
- LDAP_DOMAIN은 ldap 서비스명을 입력함. ldap service가 다른 namespace에 있으면 ldap-openldap.<namespace>.svc.cluster.local로 입력. 만약 다른 cluster라면 외부에서 접속할 수 있는 ingress주소를 입력함.
- Ingress설정은 하지 마십시오. 설정을 하면 아래와 같이 에러가 납니다. Ingress는 수동으로 만들어 줄 겁니다.
Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: unable to recognize "": no matches for kind "Ingress" in version "extensions/v1beta1"
- readinessProbe와 livenessProbe는 아래와 같이 설정을 리마크하거나 삭제하십시오. 이 설정을 하면 Pod가 제대로 동작하지 않습니다.
## TODO: add this in the deployment.yaml
env:
PHPLDAPADMIN_LDAP_HOSTS: "ldap-openldap"
...
...
service:
type: ClusterIP
...
## Configure liveness and readiness probes
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
##
readinessProbe:
# httpGet:
# path: /
# port: http
livenessProbe:
# httpGet:
# path: /
# port: http
phpldapadmin을 설치합니다.
$ helm install ldapadm -f values-phpldapadmin cetic/phpldapadmin -n ldap
ingress 생성
ingress controller가 먼저 설치되어 있어야 합니다.
minikube에서는 아래와 같이 간단히 설치할 수 있습니다.
$ minikube addons enable ingress
멀티노드에 설치한 경우는 아래 글을 참조하여 ingress를 설치 하십시오.
https://happycloud-lee.tistory.com/167
$ vi ing.yaml
host값의 ip는 worker node중 하나의 ip로 지정함(생성 후 연결이 안되면 kubectl get ing 결과의 ADDRESS column의 ip로 바꾸면 됨)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
generation: 1
labels:
app: phpldapadmin
chart: phpldapadmin-0.1.4
heritage: Helm
release: ldapadm
name: ldapadm-phpldapadmin
namespace: ldap
spec:
rules:
- host: myldap.io
http:
paths:
- backend:
service:
name: ldapadm-phpldapadmin
port:
number: 80
path: /
pathType: Prefix
$ kubectl apply -f ing.yaml
로그인
작업 PC의 hosts파일에 ingress host를 등록 합니다.
위 예제대로 설치하였다면 http://myldap.io 로 접근하여, 아래 값으로 로그인하면 됩니다.
DN : cn=admin,dc=myldap,dc=io
password: happy@cloud
참고: 복수의 ldap서버를 관리하려면..
phpldapadmin : https://libraries.io/github/osixia/docker-phpLDAPadmin
위 values-phpldapadmin의 PHPLDAPADMIN_LDAP_HOSTS 필드에 ldap server의 서비스 이름을 복수로 입력하여 여러개의 ldap server를 관리할 수 있어야 하는데 아직 잘 안됩니다.
아래와 같이 deployment 의 YAML을 수정하면 됩니다.
$ kubectl get deploy ldapadm-phpldapadmin -o yaml > deploy.yaml
$ vi deploy.yaml
먼저, 불필요한 부분 정리합니다.
- createTimestamp
- managedFields포함하여 전부 ( name: 바로 전 줄까지 삭제)
- resourceVersion, selfLink, uid 삭제
- status 포함하여 모두 삭제
아래 예제와 같이 envFrom의 3줄을 지우거나, remark 하시고, env: 항목에 환경변수를 직접 지정합니다.
이때 PHPLDAPADMIN_LDAP_HOSTS값에 ldap service명과 bind_id를 적절하게 지정하시면 됩니다.
spec:
containers:
- resources: {}
...
env:
- name: PHPLDAPADMIN_HTTPS
value: 'false'
- name: PHPLDAPADMIN_LDAP_HOSTS
value: |-
#PYTHON2BASH:[{'ldap-openldap': [{'server': [{'tls': False}]},
{'login': [{'bind_id': 'cn=admin,dc=ldap,dc=io'}]}]},{'ldap2-openldap': [{'server': [{'tls': False}]},
{'login': [{'bind_id': 'cn=admin,dc=ldap2,dc=io'}]}]}]
- name: PHPLDAPADMIN_TRUST_PROXY_SSL
value: 'true'
#envFrom:
# - configMapRef:
# name: ldap-admin-phpldapadmin
...
지정 후에는 Pod를 삭제하십시오. 자동으로 새 Pod가 생성되면서 지정된 환경변수값을 읽어 여러개의 ldap서버를 지원하게 phpldap admin앱이 실행됩니다.
cluster 외부에서 LDAP서버를 389포트로 접근하려면
LDAP과 연동하는 서버(image registry, k8s 등)에서 LDAP서버를 389포트로 접근하려면 아래와 같이, externalIPs를 이용합니다.
$ kubectl edit svc ldap-openldap
...
spec:
...
externalIPs:
- 169.56.84.41
...
이제 ldap://169.56.84.41 으로 접근할 수 있습니다.
사용자와 그룹 추가 방법은 아래 글을 참조하세요 .
happycloud-lee.tistory.com/172?category=832250
'Open Sources' 카테고리의 다른 글
오픈소스 성능테스트툴 nGrinder (0) | 2020.05.30 |
---|---|
screen: 가상터미널을 이용한 백그라운드 명령 실행 (0) | 2020.05.27 |
nexus repository 설정 (0) | 2020.04.15 |
MS Visual Studio Code 설치 (0) | 2020.03.29 |
mongodb 설치, db, collection, user 만들기 (0) | 2020.02.03 |
- Total
- Today
- Yesterday
- 육각형인간
- 디토소비
- 돌봄경제
- 마이크로서비스 패턴
- Event Sourcing
- AXON
- 도파밍
- 스핀프로젝트
- 분초사회
- micro service
- 버라이어티가격
- API Composition
- 리퀴드폴리탄
- 애자일
- CQRS
- spotify
- SAGA
- 호모프롬프트
- 스포티파이
- agile
- 마이크로서비스
- 요즘남편 없던아빠
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |