在Kubernetes上使用Openldap做集中认证

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

代码语言:javascript
复制
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的状态。