diff --git a/.vuepress/config-sidebar.js b/.vuepress/config-sidebar.js index a8ff769..025c258 100644 --- a/.vuepress/config-sidebar.js +++ b/.vuepress/config-sidebar.js @@ -429,12 +429,14 @@ let sidebar = { 'k8s-advanced/sec/authenticate/', 'k8s-advanced/sec/sa-admin', 'k8s-advanced/sec/authenticate/install', + 'k8s-advanced/sec/authenticate/ldap', ] }, { title: '用户授权', collapsable: true, children: [ 'k8s-advanced/sec/kuboard', + 'k8s-advanced/sec/rbac/user-namespace.html', 'k8s-advanced/sec/rbac/list-namespace.html', 'k8s-advanced/sec/rbac/logs.html', 'k8s-advanced/sec/rbac/api', diff --git a/.vuepress/public/practice/ldap/kuboard_ldap_example.yaml b/.vuepress/public/practice/ldap/kuboard_ldap_example.yaml new file mode 100644 index 0000000..0b880d1 --- /dev/null +++ b/.vuepress/public/practice/ldap/kuboard_ldap_example.yaml @@ -0,0 +1,213 @@ + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: ldap-example + name: ldap + annotations: + k8s.kuboard.cn/workload: ldap + k8s.kuboard.cn/ingress: 'false' + k8s.kuboard.cn/service: none + labels: + app: ldap +spec: + selector: + matchLabels: + app: ldap + revisionHistoryLimit: 10 + template: + metadata: + labels: + app: ldap + spec: + securityContext: + seLinuxOptions: {} + imagePullSecrets: [] + restartPolicy: Always + initContainers: [] + containers: + - image: 'osixia/openldap:1.4.0' + imagePullPolicy: IfNotPresent + name: ldap + volumeMounts: + - name: openldap-data + mountPath: /var/lib/ldap + subPath: data + - name: openldap-data + mountPath: /etc/ldap/slapd.d + subPath: config + - name: openldap-data + mountPath: /container/service/slapd/assets/certs + subPath: certs + - name: secret-volume + mountPath: /container/environment/01-custom + - name: container-run + mountPath: /container/run + args: + - '--copy-service' + resources: + limits: + requests: + env: [] + readinessProbe: + tcpSocket: + port: openldap + initialDelaySeconds: 20 + timeoutSeconds: 1 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 10 + livenessProbe: + tcpSocket: + port: openldap + initialDelaySeconds: 20 + timeoutSeconds: 1 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 10 + lifecycle: {} + ports: + - name: openldap + containerPort: 389 + protocol: TCP + - name: ssl-ldap-port + containerPort: 636 + protocol: TCP + volumes: + - name: openldap-data + emptyDir: {} + - name: secret-volume + secret: + secretName: ldap-secret + defaultMode: 420 + items: [] + - name: container-run + emptyDir: {} + dnsPolicy: ClusterFirst + dnsConfig: {} + terminationGracePeriodSeconds: 30 + progressDeadlineSeconds: 600 + strategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 25% + maxSurge: 25% + replicas: 1 + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: ldap-example + name: phpldapadmin + annotations: + k8s.kuboard.cn/workload: phpldapadmin + k8s.kuboard.cn/ingress: 'false' + k8s.kuboard.cn/service: ClusterIP + labels: + io.kompose.service: phpldapadmin +spec: + selector: + matchLabels: + io.kompose.service: phpldapadmin + revisionHistoryLimit: 10 + template: + metadata: + labels: + io.kompose.service: phpldapadmin + spec: + securityContext: + seLinuxOptions: {} + imagePullSecrets: [] + restartPolicy: Always + initContainers: [] + containers: + - image: 'osixia/phpldapadmin:0.9.0' + imagePullPolicy: Always + name: phpldapadmin + volumeMounts: [] + resources: + limits: + requests: + env: + - name: PHPLDAPADMIN_HTTPS + value: 'false' + - name: PHPLDAPADMIN_LDAP_HOSTS + value: ldap-service + lifecycle: {} + ports: + - containerPort: 80 + protocol: TCP + volumes: [] + dnsPolicy: ClusterFirst + dnsConfig: {} + terminationGracePeriodSeconds: 30 + progressDeadlineSeconds: 600 + strategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 25% + maxSurge: 25% + replicas: 1 + +--- +apiVersion: v1 +kind: Service +metadata: + annotations: {} + labels: + app: ldap + name: ldap-service + namespace: ldap-example +spec: + ports: + - name: openldap + port: 389 + protocol: TCP + targetPort: openldap + - name: ssl-ldap-port + port: 636 + protocol: TCP + targetPort: ssl-ldap-port + selector: + app: ldap + sessionAffinity: None + type: ClusterIP + + +--- +apiVersion: v1 +kind: Service +metadata: + namespace: ldap-example + name: phpldapadmin + annotations: + k8s.kuboard.cn/workload: phpldapadmin + labels: + io.kompose.service: phpldapadmin +spec: + selector: + io.kompose.service: phpldapadmin + type: ClusterIP + ports: + - port: 8080 + targetPort: 80 + protocol: TCP + name: '8080' + nodePort: 0 + sessionAffinity: None + +--- +metadata: + name: ldap-secret + namespace: ldap-example + annotations: {} +data: + env.startup.yaml: >- + IyBUaGlzIGlzIHRoZSBkZWZhdWx0IGltYWdlIHN0YXJ0dXAgY29uZmlndXJhdGlvbiBmaWxlCiMgdGhpcyBmaWxlIGRlZmluZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCBkdXJpbmcgdGhlIGNvbnRhaW5lciAqKmZpcnN0IHN0YXJ0KiogaW4gKipzdGFydHVwIGZpbGVzKiouCgojIFRoaXMgZmlsZSBpcyBkZWxldGVkIHJpZ2h0IGFmdGVyIHN0YXJ0dXAgZmlsZXMgYXJlIHByb2Nlc3NlZCBmb3IgdGhlIGZpcnN0IHRpbWUsCiMgYWZ0ZXIgdGhhdCBhbGwgdGhlc2UgdmFsdWVzIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBpbiB0aGUgY29udGFpbmVyIGVudmlyb25tZW50LgojIFRoaXMgaGVscHMgdG8ga2VlcCB5b3VyIGNvbnRhaW5lciBjb25maWd1cmF0aW9uIHNlY3JldC4KIyBtb3JlIGluZm9ybWF0aW9uIDogaHR0cHM6Ly9naXRodWIuY29tL29zaXhpYS9kb2NrZXItbGlnaHQtYmFzZWltYWdlCgojIFJlcXVpcmVkIGFuZCB1c2VkIGZvciBuZXcgbGRhcCBzZXJ2ZXIgb25seQpMREFQX09SR0FOSVNBVElPTjogRXhhbXBsZSBJbmMuCkxEQVBfRE9NQUlOOiBleGFtcGxlLm9yZwpMREFQX0JBU0VfRE46ICNpZiBlbXB0eSBhdXRvbWF0aWNhbGx5IHNldCBmcm9tIExEQVBfRE9NQUlOCgpMREFQX0FETUlOX1BBU1NXT1JEOiBhZG1pbgpMREFQX0NPTkZJR19QQVNTV09SRDogY29uZmlnCgpMREFQX1JFQURPTkxZX1VTRVI6IGZhbHNlCkxEQVBfUkVBRE9OTFlfVVNFUl9VU0VSTkFNRTogcmVhZG9ubHkKTERBUF9SRUFET05MWV9VU0VSX1BBU1NXT1JEOiByZWFkb25seQoKIyBCYWNrZW5kCkxEQVBfQkFDS0VORDogaGRiCgojIFRscwpMREFQX1RMUzogdHJ1ZQpMREFQX1RMU19DUlRfRklMRU5BTUU6IGxkYXAuY3J0CkxEQVBfVExTX0tFWV9GSUxFTkFNRTogbGRhcC5rZXkKTERBUF9UTFNfQ0FfQ1JUX0ZJTEVOQU1FOiBjYS5jcnQKCkxEQVBfVExTX0VORk9SQ0U6IGZhbHNlCkxEQVBfVExTX0NJUEhFUl9TVUlURTogU0VDVVJFMjU2Oi1WRVJTLVNTTDMuMApMREFQX1RMU19QUk9UT0NPTF9NSU46IDMuMQpMREFQX1RMU19WRVJJRllfQ0xJRU5UOiBkZW1hbmQKCiMgUmVwbGljYXRpb24KTERBUF9SRVBMSUNBVElPTjogZmFsc2UKIyB2YXJpYWJsZXMgJExEQVBfQkFTRV9ETiwgJExEQVBfQURNSU5fUEFTU1dPUkQsICRMREFQX0NPTkZJR19QQVNTV09SRAojIGFyZSBhdXRvbWF0aWNhbHkgcmVwbGFjZWQgYXQgcnVuIHRpbWUKCiMgaWYgeW91IHdhbnQgdG8gYWRkIHJlcGxpY2F0aW9uIHRvIGFuIGV4aXN0aW5nIGxkYXAKIyBhZGFwdCBMREFQX1JFUExJQ0FUSU9OX0NPTkZJR19TWU5DUFJPViBhbmQgTERBUF9SRVBMSUNBVElPTl9EQl9TWU5DUFJPViB0byB5b3VyIGNvbmZpZ3VyYXRpb24KIyBhdm9pZCB1c2luZyAkTERBUF9CQVNFX0ROLCAkTERBUF9BRE1JTl9QQVNTV09SRCBhbmQgJExEQVBfQ09ORklHX1BBU1NXT1JEIHZhcmlhYmxlcwpMREFQX1JFUExJQ0FUSU9OX0NPTkZJR19TWU5DUFJPVjogYmluZGRuPSJjbj1hZG1pbixjbj1jb25maWciIGJpbmRtZXRob2Q9c2ltcGxlIGNyZWRlbnRpYWxzPSRMREFQX0NPTkZJR19QQVNTV09SRCBzZWFyY2hiYXNlPSJjbj1jb25maWciIHR5cGU9cmVmcmVzaEFuZFBlcnNpc3QgcmV0cnk9IjYwICsiIHRpbWVvdXQ9MSBzdGFydHRscz1jcml0aWNhbApMREFQX1JFUExJQ0FUSU9OX0RCX1NZTkNQUk9WOiBiaW5kZG49ImNuPWFkbWluLCRMREFQX0JBU0VfRE4iIGJpbmRtZXRob2Q9c2ltcGxlIGNyZWRlbnRpYWxzPSRMREFQX0FETUlOX1BBU1NXT1JEIHNlYXJjaGJhc2U9IiRMREFQX0JBU0VfRE4iIHR5cGU9cmVmcmVzaEFuZFBlcnNpc3QgaW50ZXJ2YWw9MDA6MDA6MDA6MTAgcmV0cnk9IjYwICsiIHRpbWVvdXQ9MSBzdGFydHRscz1jcml0aWNhbApMREFQX1JFUExJQ0FUSU9OX0hPU1RTOgogIC0gbGRhcDovL2xkYXAuZXhhbXBsZS5vcmcgIyBUaGUgb3JkZXIgbXVzdCBiZSB0aGUgc2FtZSBvbiBhbGwgbGRhcCBzZXJ2ZXJzCiAgLSBsZGFwOi8vbGRhcDIuZXhhbXBsZS5vcmcKCgojIFJlbW92ZSBjb25maWcgYWZ0ZXIgc2V0dXAKTERBUF9SRU1PVkVfQ09ORklHX0FGVEVSX1NFVFVQOiB0cnVlCgojIGNmc3NsIGVudmlyb25tZW50IHZhcmlhYmxlcyBwcmVmaXgKTERBUF9DRlNTTF9QUkVGSVg6IGxkYXAgIyBjZnNzbC1oZWxwZXIgZmlyc3Qgc2VhcmNoIGNvbmZpZyBmcm9tIExEQVBfQ0ZTU0xfKiB2YXJpYWJsZXMsIGJlZm9yZSBDRlNTTF8qIHZhcmlhYmxlcy4K + env.yaml: >- + IyBUaGlzIGlzIHRoZSBkZWZhdWx0IGltYWdlIGNvbmZpZ3VyYXRpb24gZmlsZQojIFRoZXNlIHZhbHVlcyB3aWxsIHBlcnNpc3RzIGluIGNvbnRhaW5lciBlbnZpcm9ubWVudC4KCiPCoEFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCBhZnRlciB0aGUgY29udGFpbmVyIGZpcnN0IHN0YXJ0CiMgbXVzdCBiZSBkZWZpbmVkIGhlcmUuCiMgbW9yZSBpbmZvcm1hdGlvbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9vc2l4aWEvZG9ja2VyLWxpZ2h0LWJhc2VpbWFnZQoKIyBHZW5lcmFsIGNvbnRhaW5lciBjb25maWd1cmF0aW9uCiMgc2VlIHRhYmxlIDUuMSBpbiBodHRwOi8vd3d3Lm9wZW5sZGFwLm9yZy9kb2MvYWRtaW4yNC9zbGFwZGNvbmYyLmh0bWwgZm9yIHRoZSBhdmFpbGFibGUgbG9nIGxldmVscy4KTERBUF9MT0dfTEVWRUw6IDI1Ngo= +type: Opaque +kind: Secret +apiVersion: v1 diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720221931304.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720221931304.png new file mode 100644 index 0000000..768af70 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720221931304.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720224823436.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720224823436.png new file mode 100644 index 0000000..55f0a64 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720224823436.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720224920889.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720224920889.png new file mode 100644 index 0000000..20765fd Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720224920889.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720225039012.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720225039012.png new file mode 100644 index 0000000..3dd5d61 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720225039012.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720225243855.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720225243855.png new file mode 100644 index 0000000..55c8159 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720225243855.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720231936844.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720231936844.png new file mode 100644 index 0000000..0031400 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720231936844.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720232351634.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720232351634.png new file mode 100644 index 0000000..9fa5a2e Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200720232351634.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726165616950.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726165616950.png new file mode 100644 index 0000000..36fbcef Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726165616950.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726165741339.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726165741339.png new file mode 100644 index 0000000..bbed2dc Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726165741339.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726170049198.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726170049198.png new file mode 100644 index 0000000..e2c6c2a Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726170049198.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726170545157.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726170545157.png new file mode 100644 index 0000000..dc2e158 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726170545157.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726170739621.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726170739621.png new file mode 100644 index 0000000..8b627e7 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726170739621.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726172733862.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726172733862.png new file mode 100644 index 0000000..ce03b24 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726172733862.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726175739979.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726175739979.png new file mode 100644 index 0000000..00910b6 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726175739979.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726175840036.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726175840036.png new file mode 100644 index 0000000..29d77ff Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726175840036.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726202228504.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726202228504.png new file mode 100644 index 0000000..ab761fc Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726202228504.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726202709144.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726202709144.png new file mode 100644 index 0000000..71a84dd Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726202709144.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726204044666.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726204044666.png new file mode 100644 index 0000000..37cb46f Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726204044666.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726204609310.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726204609310.png new file mode 100644 index 0000000..a3fe4bd Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726204609310.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726210358145.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726210358145.png new file mode 100644 index 0000000..d6969e0 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726210358145.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726210455919.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726210455919.png new file mode 100644 index 0000000..5d460d2 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726210455919.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726222447923.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726222447923.png new file mode 100644 index 0000000..44a99bc Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726222447923.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726222608697.png b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726222608697.png new file mode 100644 index 0000000..d9806e5 Binary files /dev/null and b/learning/k8s-advanced/sec/authenticate/ldap.assets/image-20200726222608697.png differ diff --git a/learning/k8s-advanced/sec/authenticate/ldap.md b/learning/k8s-advanced/sec/authenticate/ldap.md index 0f5144e..3c94e16 100644 --- a/learning/k8s-advanced/sec/authenticate/ldap.md +++ b/learning/k8s-advanced/sec/authenticate/ldap.md @@ -15,9 +15,220 @@ meta: 本文介绍了两部分内容,如果您已经有 LDAP 在使用,请直接进入文档的第二部分内容。 * 安装 OpenLDAP + > 仅用于配合此文档达成演示目的,部署到生产环境时,请参考 OpenLDAP 的官方网站 + * 配置 Kubernetes/Kuboard 使用 OpenLDAP 登录 -## 安装 OpenLDAP +## 前提条件 + +* Kubernetes 集群版本不低于 v1.13 +* Kuboard 版本不低于 v2.0.3-beta.2 + +## 安装/配置 OpenLDAP + +本文描述的 LDAP 安装/配置方法仅仅是为了演示目的,生产环境请另外规划您的 LDAP 服务器安装,或者更大的可能性是,使用您企业中已经部署的 LDAP 服务。 + +* 下载文件 kuboard_ldap_example.yaml + +* 打开 Kuboard 集群概览页,并创建名称空间 ***ldap-example*** + +* 进入名称空间 ***ldap-example*** 并点击 ***从 YAML 创建*** 按钮,将 kuboard_ldap_example.yaml 文件中的内容粘贴到弹出对话框,并点击 **保存** 按钮。 + +  + + 完成创建后,稍等片刻,ldap / phpldapadmin 启动成功后,名称空间界面显示如下: + +  + +* 打开 LDAP 管理界面 phpldapadmin + + * 点击上图中的 phpldapadmin,进入工作负载查看页,如下图所示: + +  + + * 点击 ***代理*** 按钮,打开代理对话框,如下图所示: + +  + + * 点击上图中的 ***在浏览器窗口中打开*** 按钮,进入 phpldapadmin 首页,如下图所示: + +  + +* 点击上图中的 ***login*** 按钮,登录 phpldapadmin 管理界面: + + 登录时使用 + + * 用户名:cn=admin,dc=example,dc=org + + * 密码: admin + +  + + 登录成功后,界面如下图所示: + +  + +* 添加分组 + + 点击上图左侧的按钮 ***Create new entry here***,如下图所示: + +  + + 点击上图中的 ***Generic: Posix Group***,如下图所示: + + 输入表单如下,然后点击 ***Create Object*** 按钮,再点击 ***Commit*** 按钮,将完成 `mygroup` 的创建 + + Group: `mygroup` + +  + + + +* 添加用户 + + 点击左侧的按钮 ***Create new entry here***,并选择 ***Genric: User Account***,如下图所示: + + 输入表单如下: + + | 字段名称 | 字段值 | + | -------------- | ------------------ | + | First name | hello | + | Last name | world | + | Common Name | hello world | + | User ID | hworld | + | Password | 123456 | + | GID Number | mygroup | + | Home directory | /home/users/hworld | + +  + + 完成表单填写后,点击 ***Create Object*** 按钮,再点击 ***Commit*** 按钮,将完成 `hworld` 用户的创建,如下图所示: + +  + + 点击上图右上侧的 ***Add new attribute*** 按钮,选择字段类型 `Email`,并输入 `hworld@kuboard.cn` 如下图所示: + +  + + 然后点击页面末尾的 ***Update Object*** 按钮,在新的界面再点一次 ***Update Object*** 按钮以确认更新。 + +::: tip ldap 样例 + +此时我们已经准备好了用于演示的 LDAP 环境: + +* 快速安装了一个 LDAP 服务实例(实际生产环境,请自行规划 LDAP 的安装,此文档中 LDAP 的安装方法只是用于 Demo 演示); +* 创建了一个用户组 `mygroup`; +* 创建了一个用户 `hworld` ,归属于用户组 `mygroup`,其邮箱地址为 `hworld@kuboard.cn`,密码为 `123456`。 + +::: ## 配置 Kubernetes/Kuboard 使用 OpenLDAP 登录 + +* 登录 Kuboard 界面,并点击右上角的 *圆形* 按钮,进入设置菜单,点击左侧导航栏的 ***单点登录*** 菜单,如下图所示: + +  + +* 点击上图中的 ***Kubernetes Authentication 安装向导***,在该向导界面中填写表单: + + | 字段名称 | 字段值 | 说明 | + | ----------------------------------------- | ----------------------------------------- | ------------------------------------------------------------ | + |