1 - 如何接入LDAP&OIDC

如何接入LDAP&OIDC

接入LDAP、OIDC有两种方式;

  1. 在集群安装时,配置OIDC认证信息,关于OIDC配置信息,请参考Configuring the API Server

installer-oidc

  1. 集群安装完成后,可以通过调用API的形式切换认证模式为OIDC或LDAP

    a. 修改auth配置文件,configmap: tke-auth-api,指定默认idp类型为ldap:

    "auth": {
      "init_tenant_type": "ldap", // 指定ldap类型的idp
      "init_tenant_id": "ldap-test", // tenant id
      "init_idp_administrators": ["jane"], //idp的管理员列表,需要存在客户ldap系统中,具有平台的超级管理员权限
      "ldap_config_file":"_debug/auth-ldap.json",
    }
    

    b. 准备ldap配置文件,配置说明参见:dex-ldap

    {
        //ldap地址,host:port
        "host": "localhost:389", 
        "insecureNoSSL": true, // 是否开始SSL,如果host没有指定端口,ture,端口为389和false, 端口为636
        "bindDN": "cn=admin,dc=example,dc=org", //服务账户的DN和密码,用来查询ldap用户组和用户
        "bindPW": "admin", //密码
        "usernamePrompt": "User Name", //
        "userSearch": {
            "baseDN": "ou=People,dc=example,dc=org", //用户baseDN
            "filter": "(objectClass=person)", //查询过滤条件
            "username": "cn", // username的属性key,cn=jane,ou=People,dc=example,dc=org
            "idAttr": "DN", // user id的属性key
            "emailAttr": "mail", // 邮件属性key
            "nameAttr": "cn" //displayname 的属性key
        },
        "groupSearch": {
            "baseDN": "ou=Groups,dc=example,dc=org",//用户组baseDN
            "filter": "(objectClass=groupOfNames)", //查询过滤条件
            "userAttr": "DN", //用户组成员id属性key
            "groupAttr": "member", //用户组成员key
            "nameAttr": "cn" //用户组名称key
        }
    }
    

    c. 调用API,新增ldap idp,

    curl -XPOST https://{auth_address}/apis/auth.tkestack.io/v1/identityproviders   -H 'Authorization: Bearer {admin_token}'    -H 'Content-Type: application/json'
    

    ​ Body:

    {
        "metadata": {
            "name": "ldap-test" //tennatID
        },
        "spec": {
            "name": "ldap-test", 
            "type": "ldap",
            "administrators": [  //超级管理员
                "jane"
            ],
            "config": "  {\"host\":\"localhost:389\",\"insecureNoSSL\":true,\"bindDN\":\"cn=admin,dc=example,dc=org\",\"bindPW\":\"admin\",\"usernamePrompt\":\"Email Address\",\"userSearch\":{\"baseDN\":\"ou=People,dc=example,dc=org\",\"filter\":\"(objectClass=person)\",\"username\":\"cn\",\"idAttr\":\"DN\",\"emailAttr\":\"mail\",\"nameAttr\":\"cn\"},\"groupSearch\":{\"baseDN\":\"ou=Groups,dc=example,dc=org\",\"filter\":\"(objectClass=groupOfNames)\",\"userAttr\":\"DN\",\"groupAttr\":\"member\",\"nameAttr\":\"cn\"}}" //ldap配置
        }
    }
    

d. 删除IDP

   curl -XDELETE https://{auth_address}/apis/auth.tkestack.io/v1/identityproviders/ldap-test -H 'Authorization: Bearer {admin_token}'

2 - 业务管理、平台管理的区别

业务管理、平台管理的区别

TKEStack的权限体系分为业务使用者和平台管理员两种角色,平台管理员可以管理平台所有功能,业务使用者可以访问自己有权限的业务或者namespace下的资源。同时平台管理员可以通过自定义策略,定义不同的策略类型。

3 - 如何设置自定义策略

如何设置自定义策略

TKEStack 策略(policy)用来描述授权的具体信息。核心元素包括操作(action)、资源(resource)以及效力(effect)。

操作(action)

描述允许或拒绝的操作。操作可以是 API(以 name 前缀描述)或者功能集(一组特定的 API,以 permid 前缀描述)。该元素是必填项。

资源(resource)

描述授权的具体数据。资源是用六段式描述。每款产品的资源定义详情会有所区别。有关如何指定资源的信息,请参阅您编写的资源声明所对应的产品文档。该元素是必填项。

效力(effect)

描述声明产生的结果是“允许”还是“显式拒绝”。包括 allow(允许)和 deny (显式拒绝)两种情况。该元素是必填项。

策略样例

该样例描述为:允许关联到此策略的用户,对cls-123集群下的工作负载deploy-123中的所有资源,有查看权限。

{
  "actions": [
    "get*",
    "list*",
    "watch*"
  ],
  "resources": [
    "cluster:cls-123/deployment:deploy-123/*"
  ],
  "effect": "allow"
}

4 - Docker login 权限错误

Docker login 权限错误

Docker login 权限错误

在Tkestack选用用了自建证书,需要用户在客户端手动导入,docker login 权限报错:certificate signed by unknown authority。

方法一

在 Global 集群上执行 kubectl get cm certs -n tke -o yaml 将 ca.crt 内容保存到客户端节点的/etc/docker/certs.d/**/ca.crt ( 为镜像仓库地址) 重启docker即可

方法二:

在/etc/docker/daemon.json文件里添加insecure-registries,如下: { “insecure-registries”: [ “xxx”,“xxx” ] } (* 为镜像仓库地址)

重启docker即可