面试题答案
一键面试身份验证
- 用户名和密码:最基础的方式,用户在访问镜像仓库时输入预先设定的用户名和密码。例如在Docker Registry中,可以通过
htpasswd
工具生成包含用户名和加密密码的文件,配置到Registry服务中。 - Token认证: 生成一个包含身份信息和访问权限的令牌。客户端在请求时携带该Token,仓库验证Token的有效性。如Docker Registry支持通过颁发JWT(JSON Web Token)来进行身份验证,Token中包含用户信息、权限以及有效期等。
- 单点登录(SSO):整合现有的企业身份管理系统,如使用LDAP(轻量级目录访问协议)、OAuth 2.0或OpenID Connect等协议,实现用户通过企业统一账号登录镜像仓库。
访问控制
- 基于角色的访问控制(RBAC):定义不同角色(如管理员、普通用户、只读用户等),为每个角色分配特定的权限。比如管理员可以执行所有操作,包括上传、删除镜像;普通用户只能拉取和推送镜像;只读用户只能拉取镜像。在Kubernetes环境中,可使用Kubernetes的RBAC机制对镜像仓库访问进行管理。
- 基于资源的访问控制(RBAC):根据镜像仓库中的具体资源(如特定镜像、镜像标签等)设置访问权限。例如,只有特定团队成员才能访问和操作某些敏感业务镜像。
- 网络访问控制:通过防火墙、安全组等网络策略,限制只有特定的IP地址或IP地址段能够访问镜像仓库。比如只允许公司内部网络或特定的可信外部IP访问镜像仓库,防止外部非法访问。
镜像签名验证
- 使用GPG签名:开发者使用GnuPG工具对镜像进行签名,生成签名文件。在拉取镜像时,客户端验证签名文件,确保镜像的完整性和来源合法性。例如在Containerd中,可以配置使用GPG密钥对镜像签名进行验证。
- 使用Notary:Notary是Docker官方推出的镜像签名和验证工具。它采用了一种分层的信任模型,通过私钥对镜像元数据进行签名,并将签名信息存储在专门的签名服务器上。客户端拉取镜像时,会从签名服务器获取签名并验证镜像的完整性和真实性。