Spinnaker是一个开源的持续交付平台,用于自动化在云环境中的应用程序部署。在Spinnaker中,安全性是一个关键的考虑因素,尤其是在大型组织或在多团队环境中。认证(Authentication)和授权(Authorization)是确保安全的两个主要方面。
Spinnaker部署完成后,默认没有任何认证机制,需要自行配置登录认证和权限认证机制,spinnaker支持gitlab、github、ldap等认证机制,下面介绍ldap和基于github的认证方式。
官方文档:https://spinnaker.io/docs/setup/other_config/security/authentication/ldap/
创建自定义网络
docker network create openldap
使用 docker 安装openldap
docker run -d --name openldap --restart always \
-p 389:389 -p 636:636 --net openldap \
--env LDAP_ORGANISATION="myorg" \
--env LDAP_DOMAIN="example.com" \
--env LDAP_ADMIN_PASSWORD="Ldap#123456" \
-v openldap-db:/var/lib/ldap \
-v openldap-config:/etc/ldap/slapd.d \
osixia/openldap
部署ldapadmin
docker run -d --name phpldapadmin --restart always \
-p 8443:443 --net openldap \
--env PHPLDAPADMIN_LDAP_HOSTS=openldap \
osixia/phpldapadmin
登录ldapadmin 管理界面
DOMAIN: https://192.168.72.16:8443
Login DN:cn=admin,dc=example,dc=com
Password:Ldap#123456
创建OU,然后在OU下创建组及用户,依次选择:
创建流程如下:
1、创建OU
点击 Create a child entry
选择Generic: Organisational Unit
名称自定义,这里为devops
2、创建用户组
选择Generic: Posix Group
名称自定义,这里为group01
3、创建用户
选择Generic: User Account
名称自定义,这里为testuser
创建后结构如下
执行以下命令测试账号
ldapsearch -D "CN=admin,dc=example,dc=com" \
-w "Ldap#123456" \
-H ldap://192.168.72.16 \
-x -b "ou=devops,dc=example,dc=com" \
"CN=testuser"
执行结果如下:
root@ubuntu:~# docker exec -it openldap bash
root@ba6d8d2f01d8:/# ldapsearch -D "CN=admin,dc=example,dc=com" \
> -w "Ldap#123456" \
> -H ldap://192.168.72.16 \
> -x -b "ou=devops,dc=example,dc=com" \
> "CN=testuser"
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: CN=testuser
# requesting: ALL
#
# testuser, devops, example.com
dn: cn=testuser,ou=devops,dc=example,dc=com
sn: testuser
cn:: IHRlc3R1c2Vy
uid: testuser
userPassword:: e01ENX1HMDFuMVJQejdPekVYbWNRR3ZnbFJ3PT0=
uidNumber: 1000
gidNumber: 500
homeDirectory: /home/users/testuser
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
启用ldap验证
hal config security authn ldap enable
配置ldap对接
hal config security authn ldap edit \
--user-search-base 'ou=devops,dc=example,dc=com' \
--url 'ldap://192.168.72.16:389' \
--user-search-filter 'cn={0}' \
--manager-dn 'cn=admin,dc=example,dc=com' \
--manager-password 'Ldap#123456'
参数说明:
重新部署spinnaker,等待spinnaker pods running.
hal deploy apply
登录spinnaker,验证是否需要认证,账号为testuser,密码为openldap创建的对应账号密码
官方文档:https://spinnaker.io/setup/security/authentication/oauth/github/
首先需要登录GitHub,转到https://github.com/settings/developers,然后创建一个OAuth APP。
注意:这里的Authorization callback URL基于kubernetes离线部署spinnanker进行配置。请适当调整配置,适配您的环境,例如可能为http://spin-gate.example.com/login
。
记录client-id及client-secret,
client_id=b7xxxxxxxc9397
client_secret=7574b463cbc4xxxxxxxxxxxxxxxx8ebad0f2630
hal config security authn oauth2 edit --provider github \
--client-id ${client_id} \
--client-secret ${client_secret}
hal config security authn oauth2 enable
重新部署spinnaker,等待spinnaker pods running.
hal deploy apply
登录spinnaker,验证是否需要认证