LDAP是Lightweight Directory Access Protocol的缩写,提供LDAP服务的软件有很多商业上获得成功的,其中以MS的AD和Redhat的NDS(Netscape directory server)使用最为广泛,而开源领域则是OpenLdap了,为了集成认证后面需要的gitlab,jenkins,nexus,harbor等,因此我们在准备在kubernetes上部署一下openldap和openldap的界面管理工具phpldapadmin.
我们把openldap和phpldapadmin放置在一个Pod内运行,组合成一个容器组 openldap-phpldapadmin-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: openldap
namespace: kube-ops # 这里是归档的Namespace
spec:
selector:
matchLabels:
app: openldap
template:
metadata:
labels:
app: openldap
spec:
containers:
- name: openldap # 使用stale版本的openldap镜像
image: osixia/openldap:stable
resources:
limits:
memory: "128Mi"
cpu: "256m"
ports:
- containerPort: 389 # openldap用于tcp/udp传输的端口
name: ldaptcpudp
- containerPort: 636 # openldap over ssl
name: ldaps
- name: phpldapadmin
image: osixia/phpldapadmin:0.7.2
resources:
limits:
memory: "256Mi"
cpu: "256m"
ports:
- containerPort: 80
name: ldapadminweb
env:
- name: PHPLDAPADMIN_HTTPS
value: "false"
- name: PHPLDAPADMIN_LDAP_HOSTS
value: "localhost" # 因为和openldap属于在一个容器组内,所以使用localhost
我们需要在外部访问phpldapadmin,因此创建一个service和ingress route
代码语言:javascript复制apiVersion: v1
kind: Service
metadata:
name: openldap
namespace: kube-ops
spec:
selector:
app: openldap
ports:
- port: 80
targetPort: ldapadminweb
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: openldap-ingressroute
namespace: kube-ops
spec:
entryPoints:
- web
routes:
- match: Host(`phpldapadmin.kubemaster.top.com`)
kind: Rule
services:
- name: openldap
port: 80
这样,基本上完成了openldap服务的配置清单的准备,下一步开始部署到集群中
代码语言:javascript复制kubectl apply -f .
我们可以通过日志查看pod是否运行正常:
代码语言:javascript复制☸️ devcluster? kube-ops ~ ? ? kubectl get pods |grep openldap
openldap-6f6647d46b-wqk2n 2/2 Running 0 21m
# 通过-c选项查看指定容器的日志
☸️ devcluster? kube-ops ~ ? ? k logs -f openldap-6f6647d46b-wqk2n -c phpldapadmin
我们通过域名访问一下,使用 cn=admin,dc=example,dc=org
和密码 admin
进行登录
然后我们也可以在集群的控制面板上查看一下openldap和Phpldapadmin的状态。